'warn|error','msg'=>'text','when'=>'...'], ...] public function mount(): void { $this->load(); } public function render() { return view('livewire.ui.system.alerts-card'); } public function refresh(): void { $this->load(true); } protected function load(bool $force=false): void { $this->alerts = Cache::remember('dash.alerts', $force ? 1 : 60, function () { $a = []; // examples: push items based on simple heuristics/files you already have if (is_file('/var/lib/mailwolt/update/state') && trim(@file_get_contents('/var/lib/mailwolt/update/state')) === 'running') { $a[] = ['level'=>'info','msg'=>'Update läuft …','when'=>date('H:i')]; } $cert = '/etc/ssl/ui/fullchain.pem'; if (is_file($cert)) { $end = trim(@shell_exec("openssl x509 -enddate -noout -in ".escapeshellarg($cert)." 2>/dev/null") ?? ''); if (preg_match('/notAfter=(.+)/', $end, $m)) { $ts = strtotime($m[1] ?? ''); if ($ts && $ts - time() < 14*86400) { $days = max(0, floor(($ts-time())/86400)); $a[] = ['level'=>'warn','msg'=>"UI-Zertifikat läuft in {$days} Tagen ab",'when'=>date('H:i')]; } } } return $a; }); } }