[ 'enabled' => (bool) env('MONITORING_ALERTS_ENABLED', true), // Ops-Postfach. Leer = keine Alert-Mail (Log und ntfy laufen trotzdem). 'mail_to' => env('MONITORING_ALERT_EMAIL'), // Zweiter Alarmweg: Push über ntfy, JSON-POST // an die Basis-URL. Ohne URL oder Topic aus. 'ntfy' => [ 'url' => env('MONITORING_NTFY_URL'), 'topic' => env('MONITORING_NTFY_TOPIC'), 'token' => env('MONITORING_NTFY_TOKEN'), 'priority' => (int) env('MONITORING_NTFY_PRIORITY', 4), ], ], /* |-------------------------------------------------------------------------- | Browserfehler |-------------------------------------------------------------------------- | | Eigenes GlitchTip-Projekt für JavaScript-Fehler. Die DSN ist öffentlich | (steht im HTML), sie erlaubt nur das Einliefern von Ereignissen. Ohne | DSN wird kein Skript eingebunden. | */ 'browser' => [ 'dsn' => env('SENTRY_BROWSER_DSN'), 'sample_rate' => (float) env('SENTRY_BROWSER_SAMPLE_RATE', 1.0), ], /* |-------------------------------------------------------------------------- | Health-Endpunkt und Scheduler-Herzschlag |-------------------------------------------------------------------------- | | `/health` antwortet nur mit gültigem Token (Bearer-Header oder | `?token=`); ohne konfiguriertes Token gibt es den Endpunkt nicht (404). | Der Scheduler schreibt jede Minute einen Herzschlag; bleibt er aus, ist | der Cron-Eintrag weg oder der Server hängt. | */ 'health' => [ 'token' => env('MONITORING_HEALTH_TOKEN'), 'queue_backlog_critical_seconds' => (int) env('MONITORING_QUEUE_BACKLOG_SECONDS', 300), 'disk_min_free_percent' => (float) env('MONITORING_DISK_MIN_FREE_PERCENT', 10), ], 'scheduler' => [ // Leer = storage/framework/scheduler-heartbeat. Die Tests setzen je Prozess eine eigene Datei. 'heartbeat_path' => env('MONITORING_HEARTBEAT_PATH'), 'heartbeat_warn_minutes' => 3, 'heartbeat_critical_minutes' => 10, ], ];