load(); } public function render() { return view('livewire.ui.security.spam-av-card'); } public function refresh(): void { $this->load(true); } protected function load(bool $force = false): void { $data = Cache::remember('dash.spamav', $force ? 1 : 60, function () { $out = trim(@shell_exec('rspamc counters 2>/dev/null') ?? ''); // very rough counters (adapt to your setup) $ham = preg_match('/ham:\s*(\d+)/i', $out, $m1) ? (int)$m1[1] : 0; $spam = preg_match('/spam:\s*(\d+)/i', $out, $m2) ? (int)$m2[1] : 0; $reject = preg_match('/reject:\s*(\d+)/i', $out, $m3) ? (int)$m3[1] : 0; $rspamdVer = trim(@shell_exec('rspamadm version 2>/dev/null') ?? '') ?: '–'; $clamVer = trim(@shell_exec('clamd --version 2>/dev/null || clamscan --version 2>/dev/null') ?? '') ?: '–'; // last signatures update (freshclam log) $sigUpdated = null; $log = @shell_exec('grep -i "Database updated" /var/log/clamav/freshclam.log | tail -n1 2>/dev/null'); if ($log) $sigUpdated = trim($log); return compact('ham','spam','reject','rspamdVer','clamVer','sigUpdated'); }); foreach ($data as $k => $v) $this->$k = $v; } }