Files
vitya 73ad6dd06a scripts(backup-notifications): unify push + email format across VDS/RUVDS/windows-host
3 host-pipelines (VDS bash, RUVDS+windows-host ps1) had drifted formats:
ntfy title `VDS backup OK $D` vs `RUVDS backup OK ($D)`, tags
`white_check_mark` vs `green_circle`, email subject `[VDS] backup OK` vs
`RUVDS backup -- SUCCESS`. Phone-side фильтрация и desktop reading
ломались за счёт inconsistency.

Unified to:
- ntfy push: title `<HOST> backup OK <date>`, body
  `<duration_human>, size=<>, snapshots=<>, dest=kreknin:<>`,
  tags `green_circle` (OK) / `red_circle` (FAILED).
- email: subject `[<HOST>] backup <STATUS> <date>` (STATUS=OK|FAILED),
  body — structured Date/Duration/Size/Snapshots/Source/Dest/Components/Log.
  Failure body extends with `Tail (last 40 lines)`.

Also imports VDS `run.sh` into repo as `scripts/vds-backup-rsync-kreknin/`
— closes drift из общего `scripts/<slug>/` pattern (RUVDS+windows-host
уже жили там; VDS жил только на /opt/stacks/backup/scripts/).

Deploy status:
- VDS: deployed via scp + sudo install, sha256=27b09ca272bb, smoke ntfy+email ✓
- RUVDS: deployed via scp + Move-Item, sha256=f3bb57a86af5, smoke ntfy+email ✓
- windows-host: deploy.ps1 + smoke-notify.ps1 готовы в scripts/, **pending
  elevated PS у user'а** (ACL=SYSTEM+Administrators, не пишется без UAC).

Spec + decisions + completed: .tasks/unify-backup-notifications.md.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-25 07:19:15 +03:00

65 lines
2.3 KiB
PowerShell

# Smoke-test notify channels with NEW unified format.
# Sends one TEST-tagged ntfy push + one TEST-tagged email — no backup run.
# MUST be run elevated (config.env ACL = SYSTEM + Administrators).
$ErrorActionPreference = 'Stop'
$base = 'C:\ProgramData\backup'
$cfg = @{}
Get-Content "$base\config.env" | Where-Object { $_ -match '^[A-Z_]+=' } | ForEach-Object {
$kv = $_ -split '=', 2
$cfg[$kv[0]] = $kv[1]
}
$today = Get-Date -Format 'yyyy-MM-dd'
$HostLabel = 'windows-host'
$SourceDisplay = "windows-host ($env:COMPUTERNAME / 94.19.247.14)"
$DestDisplay = "kreknin:/volume1/NetBackup/windows-host/$today/"
$durationHuman = '81m08s'
$sizeStr = '23.10 GB'
$snapshotCount = 1
$logFile = "C:\ProgramData\backup\logs\$today.log"
# ntfy
$pair = "$($cfg.NTFY_USER):$($cfg.NTFY_PASS)"
$auth = 'Basic ' + [Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes($pair))
$ntfyBody = "$durationHuman, size=$sizeStr, snapshots=$snapshotCount, dest=$DestDisplay"
try {
Invoke-RestMethod -Uri "$($cfg.NTFY_URL)/vds-backup" -Method POST `
-Headers @{ Authorization=$auth; Title="[TEST] $HostLabel backup OK $today"; Priority='default'; Tags='green_circle' } `
-Body $ntfyBody -ContentType 'text/plain' -ErrorAction Stop | Out-Null
Write-Host 'ntfy_ok'
} catch { Write-Host ('ntfy_fail: ' + $_.Exception.Message) }
# email
$emailBody = @"
$HostLabel daily backup completed successfully.
Date: $today
Duration: $durationHuman
Size: $sizeStr
Snapshots: $snapshotCount
Source: $SourceDisplay
Dest: $DestDisplay
Components:
- mssql (5 DBs: MoreThenCms, StayerCalculator, StayerPrice, stostayer, TireService)
- sites (C:\sites\)
- minio (data dir)
- traefik (config + acme.json)
- iis-config (applicationHost.config) + iis-backup-webconfiguration
Log: $logFile
[TEST RUN sent from unify-backup-notifications smoke]
"@
$secpass = ConvertTo-SecureString $cfg.SMTP_PASS -AsPlainText -Force
$mailCred = New-Object PSCredential($cfg.SMTP_USER, $secpass)
try {
Send-MailMessage -SmtpServer $cfg.SMTP_HOST -Port ([int]$cfg.SMTP_PORT) -UseSsl `
-Credential $mailCred -From $cfg.SMTP_FROM -To $cfg.OPS_NOTIFY_EMAIL `
-Subject "[TEST][$HostLabel] backup OK $today" -Body $emailBody -Encoding UTF8 `
-WarningAction SilentlyContinue -ErrorAction Stop
Write-Host 'email_ok'
} catch { Write-Host ('email_fail: ' + $_.Exception.Message) }