['label' => 'Postfix', 'hint' => 'MTA / Versand'], 'dovecot' => ['label' => 'Dovecot', 'hint' => 'IMAP / POP3'], 'rspamd' => ['label' => 'Rspamd', 'hint' => 'Spamfilter'], 'clamav' => ['label' => 'ClamAV', 'hint' => 'Virenscanner'], // Daten & Cache 'db' => ['label' => 'Datenbank', 'hint' => 'MySQL / MariaDB'], '127.0.0.1:6379' => ['label' => 'Redis', 'hint' => 'Cache / Queue'], // Web / PHP 'php8.2-fpm' => ['label' => 'PHP-FPM', 'hint' => 'PHP Runtime'], 'nginx' => ['label' => 'Nginx', 'hint' => 'Webserver'], // MailWolt 'mailwolt-queue' => ['label' => 'MailWolt Queue', 'hint' => 'Job Worker'], 'mailwolt-schedule'=> ['label' => 'MailWolt Schedule', 'hint' => 'Task Scheduler'], 'mailwolt-ws' => ['label' => 'MailWolt WebSocket','hint' => 'Echtzeit Updates'], // Sonstiges 'fail2ban' => ['label' => 'Fail2Ban', 'hint' => 'SSH / Mail Protection'], 'systemd-journald'=> ['label' => 'System Logs', 'hint' => 'Journal'], 'rsyslog' => ['label' => 'Rsyslog', 'hint' => 'Logging'], // WebSocket/TCP '127.0.0.1:8080' => ['label' => 'Reverb', 'hint' => 'WebSocket Server'], ]; public function mount(): void { $this->load(); } public function load(): void { $this->services = Cache::get('health:services', []); $meta = Cache::get('health:meta', []); $updated = $meta['updated_at'] ?? null; $existing = collect($this->services)->keyBy('name'); $this->servicesCompact = collect($this->nameMap) ->map(function ($meta, $key) use ($existing) { $srv = $existing->get($key, []); $ok = (bool)($srv['ok'] ?? false); return [ 'label' => $meta['label'], 'hint' => $meta['hint'], 'ok' => $ok, 'dotClass' => $ok ? 'bg-emerald-400' : 'bg-rose-400', 'pillText' => $ok ? 'Aktiv' : 'Offline', 'pillClass' => $ok ? 'text-emerald-300 border-emerald-400/30 bg-emerald-500/10' : 'text-rose-300 border-rose-400/30 bg-rose-500/10', ]; }) ->values() ->all(); } public function render() { return view('livewire.ui.system.services-card'); } }