diff --git a/packages/vitec/Classes/Command/SsrHealthSampleCommand.php b/packages/vitec/Classes/Command/SsrHealthSampleCommand.php index e2a6e79..84e6b75 100644 --- a/packages/vitec/Classes/Command/SsrHealthSampleCommand.php +++ b/packages/vitec/Classes/Command/SsrHealthSampleCommand.php @@ -126,31 +126,31 @@ final class SsrHealthSampleCommand extends Command if ($prevOk !== null && $prevOk !== $row['ok']) { if ($row['ok'] === 1) { $this->sendAlert( - '[VITEC SSR] Entwarnung: SSR-Server wieder erreichbar', - "Die 5-Minuten-Messung erreicht den SSR-Server wieder (Status ok).\n\n" - . 'Zeitpunkt: ' . date('d.m.Y H:i:s') . "\n" - . 'Release: ' . ($row['release_id'] ?: '-') . "\n" - . 'Antwortzeit: ' . $row['response_ms'] . " ms\n\n" - . 'Aktueller Stand: Schalter vitec.ssr.enabled = ' - . ($this->flagService->isEnabledInSettings() ? 'AN' : 'AUS') - . ', Flag-Datei ' . ($this->flagService->isFlagSet() ? 'vorhanden (SSR aktiv)' : 'fehlt (SPA-Auslieferung)') . ".\n" - . "Falls der Auto-Failover ausgelöst wurde, bleibt die Seite bewusst auf SPA.\n" - . "Wieder einschalten: TYPO3-Backend > Site Management > Settings > SSR delivery auf AN,\n" - . "danach Komplett-Purge (vendor/bin/typo3 vitec:ssr-purge --all).\n", + '[VITEC SSR] Recovered: SSR server reachable again', + "The 5-minute health check reaches the SSR server again (status ok).\n\n" + . 'Time: ' . date('d.m.Y H:i:s') . "\n" + . 'Release: ' . ($row['release_id'] ?: '-') . "\n" + . 'Response time: ' . $row['response_ms'] . " ms\n\n" + . 'Current state: switch vitec.ssr.enabled = ' + . ($this->flagService->isEnabledInSettings() ? 'ON' : 'OFF') + . ', flag file ' . ($this->flagService->isFlagSet() ? 'present (SSR active)' : 'missing (SPA delivery)') . ".\n" + . "If the auto-failover was triggered, the site deliberately stays on SPA.\n" + . "Re-enable: TYPO3 backend > Site Management > Settings > SSR delivery ON,\n" + . "then a full purge (vendor/bin/typo3 vitec:ssr-purge --all).\n", $output ); } else { $this->sendAlert( - '[VITEC SSR] ALARM: SSR-Server antwortet nicht', - "Die 5-Minuten-Messung konnte den SSR-Server nicht erreichen\n" - . "(oder /__health meldete einen Fehler).\n\n" - . 'Zeitpunkt: ' . date('d.m.Y H:i:s') . "\n" - . 'Endpoint: ' . $endpoint . "\n" - . 'Antwortzeit: ' . $row['response_ms'] . " ms\n\n" - . 'Solange die Flag-Datei existiert, leitet dev.vitec.com weiter zum SSR-Server. Nach ' - . $failoverAfter . ' Fehlmessungen in Folge (ca. ' . ($failoverAfter * 5) . " Minuten) schaltet\n" - . "der Auto-Failover automatisch auf SPA-Auslieferung um - die Seite bleibt erreichbar.\n\n" - . "Diese Mail kommt nur beim Zustandswechsel ok -> down, nicht bei jeder Messung.\n", + '[VITEC SSR] ALERT: SSR server not responding', + "The 5-minute health check could not reach the SSR server\n" + . "(or /__health reported an error).\n\n" + . 'Time: ' . date('d.m.Y H:i:s') . "\n" + . 'Endpoint: ' . $endpoint . "\n" + . 'Response time: ' . $row['response_ms'] . " ms\n\n" + . 'As long as the flag file exists, dev.vitec.com keeps routing to the SSR server. After ' + . $failoverAfter . ' failed checks in a row (about ' . ($failoverAfter * 5) . " minutes) the\n" + . "auto-failover switches to SPA delivery automatically - the site stays reachable.\n\n" + . "This mail is sent only on the ok -> down transition, not for every check.\n", $output ); } @@ -172,29 +172,29 @@ final class SsrHealthSampleCommand extends Command $consecutive )); $this->sendAlert( - '[VITEC SSR] AUTO-FAILOVER: Seite auf SPA umgeschaltet', - 'AUTO-FAILOVER AUSGELÖST: ' . $consecutive . " Messungen in Folge down.\n\n" - . "dev.vitec.com liefert ab sofort die SPA aus (Rendering im Browser).\n" - . "Für Besucher bleibt die Seite erreichbar.\n\n" - . "Was automatisch passiert ist:\n" - . "- Site-Setting vitec.ssr.enabled auf false gestellt (settings.yaml)\n" - . "- Caches geleert\n" - . "- Flag-Datei var/vitec-ssr-on.flag gelöscht\n\n" - . "Wieder einschalten (bewusst NUR von Hand), sobald der SSR-Server wieder läuft:\n" - . "1. Auf dem VPS prüfen: systemctl status vitec-ssr und /__health\n" - . "2. TYPO3-Backend > Site Management > Settings > SSR delivery wieder AN\n" - . "3. Komplett-Purge: vendor/bin/typo3 vitec:ssr-purge --all\n", + '[VITEC SSR] AUTO-FAILOVER: site switched to SPA', + 'AUTO-FAILOVER TRIGGERED: ' . $consecutive . " consecutive DOWN checks.\n\n" + . "dev.vitec.com now serves the SPA (rendering in the browser).\n" + . "The site stays available for visitors.\n\n" + . "What happened automatically:\n" + . "- site setting vitec.ssr.enabled set to false (settings.yaml)\n" + . "- caches flushed\n" + . "- flag file var/vitec-ssr-on.flag removed\n\n" + . "Re-enable (deliberately MANUAL only) once the SSR server is back:\n" + . "1. Check on the VPS: systemctl status vitec-ssr and /__health\n" + . "2. TYPO3 backend > Site Management > Settings > SSR delivery back ON\n" + . "3. Full purge: vendor/bin/typo3 vitec:ssr-purge --all\n", $output ); } catch (\Throwable $e) { $output->writeln('auto-failover FAILED: ' . $e->getMessage() . ''); $this->sendAlert( - '[VITEC SSR] FEHLER: Auto-Failover fehlgeschlagen', - "Der Auto-Failover sollte auslösen, ist aber fehlgeschlagen:\n" + '[VITEC SSR] ERROR: auto-failover FAILED', + "The auto-failover should have triggered but failed:\n" . $e->getMessage() . "\n\n" - . "Bitte von Hand prüfen: Site-Setting vitec.ssr.enabled, Datei var/vitec-ssr-on.flag.\n" - . "Not-Aus ohne TYPO3: Flag-Datei löschen UND Setting auf false stellen\n" - . "(sonst legt die SyncSsrFlag-Middleware die Flag-Datei sofort wieder an).\n", + . "Please check manually: site setting vitec.ssr.enabled, file var/vitec-ssr-on.flag.\n" + . "Emergency off without TYPO3: delete the flag file AND set the setting to false\n" + . "(otherwise the SyncSsrFlag middleware recreates the flag file immediately).\n", $output ); }