fix: der Merker wird erst gesetzt, wenn die Meldung wirklich rausging
Beim ersten echten Meldetest lief das Skript ohne -Webhook. Es hat den Alarm
angezeigt, NICHTS gesendet -- und den Zustand trotzdem als "gemeldet"
abgehakt. Der naechste Lauf MIT Webhook waere still geblieben.
Ein Merker bedeutet "dieser Zustand wurde berichtet". Wenn nichts berichtet
wurde, darf er nicht gesetzt werden -- sonst verschluckt ausgerechnet der
Fehlerfall die Meldung, fuer die das Ganze da ist.
Jetzt vier Faelle, sauber getrennt:
alles gut -> Merker leeren, keine Nachricht noetig
schon gemeldet -> still bleiben
kein Webhook -> sagen, dass NICHTS gemeldet wurde, Merker nicht setzen
Webhook da -> senden; NUR bei HTTP 200/204 den Merker setzen
Der letzte Punkt ist der zweite Teil derselben Sache: schlaegt das Senden fehl,
bleibt der Merker leer und der naechste Lauf versucht es erneut. Eine Meldung,
die im Netz haengengeblieben ist, ist keine Meldung.
Nachgemessen, beide Richtungen:
Alarm ohne Webhook -> "NICHTS gemeldet", Merker vorhanden: False
derselbe mit Webhook -> "Gemeldet (HTTP 204)", Merker gesetzt: True
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
+31
-6
@@ -240,9 +240,30 @@ $merker = Join-Path $zVoll '.letzter-alarm.txt'
|
|||||||
$zuletzt = if (Test-Path $merker) { (Get-Content $merker -Raw).Trim() } else { '' }
|
$zuletzt = if (Test-Path $merker) { (Get-Content $merker -Raw).Trim() } else { '' }
|
||||||
$jetzt = if ($text) { $text } else { '' }
|
$jetzt = if ($text) { $text } else { '' }
|
||||||
|
|
||||||
if ($jetzt -ne $zuletzt) {
|
# DER MERKER WIRD ERST GESETZT, WENN DIE MELDUNG WIRKLICH RAUSGING.
|
||||||
Set-Content $merker $jetzt -Encoding UTF8
|
#
|
||||||
if ($Webhook -and $jetzt) {
|
# Vorher stand er ganz oben und wurde bei jedem Zustandswechsel geschrieben --
|
||||||
|
# auch wenn gar kein Webhook konfiguriert war oder das Senden fehlschlug. Beim
|
||||||
|
# ersten echten Test ist genau das passiert: ein Lauf OHNE -Webhook hat den
|
||||||
|
# Alarm als "gemeldet" abgehakt, und der naechste Lauf MIT Webhook waere still
|
||||||
|
# geblieben.
|
||||||
|
#
|
||||||
|
# Ein Merker bedeutet "dieser Zustand wurde berichtet". Wenn nichts berichtet
|
||||||
|
# wurde, darf er nicht gesetzt werden -- sonst verschluckt genau der Fehlerfall
|
||||||
|
# die Meldung, fuer die das Ganze da ist.
|
||||||
|
|
||||||
|
if (-not $jetzt) {
|
||||||
|
# Alles in Ordnung: Entwarnung braucht keine Nachricht, aber der Merker
|
||||||
|
# muss weg, damit derselbe Zustand spaeter wieder gemeldet werden kann.
|
||||||
|
if ($zuletzt) { Set-Content $merker '' -Encoding UTF8; Gut 'Wieder in Ordnung.' }
|
||||||
|
} elseif ($jetzt -eq $zuletzt) {
|
||||||
|
Warn 'Schon gemeldet -- bleibt still, bis sich etwas aendert.'
|
||||||
|
} elseif (-not $Webhook) {
|
||||||
|
Write-Host ''
|
||||||
|
Warn 'Kein -Webhook angegeben -- es wurde NICHTS gemeldet.'
|
||||||
|
Warn 'Der Merker bleibt deshalb leer: beim naechsten Lauf mit Webhook'
|
||||||
|
Warn 'geht die Meldung dann wirklich raus.'
|
||||||
|
} else {
|
||||||
$rumpf = @{
|
$rumpf = @{
|
||||||
username = 'Sicherungs-Abholung'
|
username = 'Sicherungs-Abholung'
|
||||||
embeds = @(@{
|
embeds = @(@{
|
||||||
@@ -256,8 +277,12 @@ if ($jetzt -ne $zuletzt) {
|
|||||||
$code = $rumpf | curl.exe -s -o NUL -w '%{http_code}' -X POST `
|
$code = $rumpf | curl.exe -s -o NUL -w '%{http_code}' -X POST `
|
||||||
-H 'content-type: application/json' --data-binary '@-' $Webhook
|
-H 'content-type: application/json' --data-binary '@-' $Webhook
|
||||||
Write-Host ''
|
Write-Host ''
|
||||||
if ($code -in '200', '204') { Gut "Gemeldet (HTTP $code)." } else { Schlecht "Melden fehlgeschlagen: HTTP $code" }
|
if ($code -in '200', '204') {
|
||||||
|
Gut "Gemeldet (HTTP $code)."
|
||||||
|
Set-Content $merker $jetzt -Encoding UTF8
|
||||||
|
} else {
|
||||||
|
# NICHT merken: beim naechsten Lauf noch einmal versuchen. Eine
|
||||||
|
# Meldung, die im Netz haengengeblieben ist, ist keine Meldung.
|
||||||
|
Schlecht "Melden fehlgeschlagen: HTTP $code -- wird beim naechsten Lauf erneut versucht."
|
||||||
}
|
}
|
||||||
} elseif ($jetzt) {
|
|
||||||
Warn 'Schon gemeldet -- bleibt still, bis sich etwas aendert.'
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user