&1"; $out = shell_exec($cmd); $rows = []; foreach (explode("\n", trim($out)) as $line) { if (empty($line)) continue; $f = explode("|", $line); if (count($f) < 11) continue; $rows[] = [ "id" => $f[0], "station" => $f[1], "severity" => $f[2], "message" => $f[3], "status" => $f[4], "created_at" => $f[5], "resolved_at" => $f[6], "triggered_by" => $f[7], "resolved_by" => $f[8], "owner" => $f[9], "resolution_path" => $f[10], "drilldown_info" => drilldown_info($f[1]) ]; } function drilldown_info($station) { $map = [ "cash-OKP4" => ["type"=>"commercial", "action"=>"Relance facture Yacine", "contact"=>"Kaouther/OKP4", "url"=>"/wevia-life-app/crm"], "sales-vistex" => ["type"=>"commercial", "action"=>"Email Olga Vistex addendum", "contact"=>"Olga Vistex", "url"=>"/wevia-life-app/deals"], "saas-churn" => ["type"=>"seed_data", "action"=>"Fake seed resolved doctrine 4", "contact"=>"N/A", "url"=>null, "note"=>"Not real business data"], "blade-agent-exec" => ["type"=>"infra", "action"=>"Restart via intent blade_wake or wevia_blade_restart", "contact"=>"Yacineutt Windows", "url"=>"/api/blade-agent.php"], "cybersec-nuclei" => ["type"=>"infra", "action"=>"V9.41 scan = 0 findings", "contact"=>"N/A", "url"=>"/api/nuclei-scanner.php"], "Apps" => ["type"=>"infra", "action"=>"V9.43 symlinks fix", "contact"=>"N/A", "url"=>"/"], "EM-Platform" => ["type"=>"infra", "action"=>"V9.46 investigating", "contact"=>"N/A", "url"=>null], "dispensation-station-3" => ["type"=>"ethica", "action"=>"Scanner fallback manuel", "contact"=>"N/A", "url"=>"/ethica-hub.html"] ]; return $map[$station] ?? ["type"=>"unknown", "action"=>"Investigate", "contact"=>"TBD", "url"=>null]; } $open = array_filter($rows, fn($r) => $r["status"] === "open"); $summary = [ "ok" => true, "ts" => date("c"), "source" => "adx_system.weval.andon_alerts", "total" => count($rows), "open" => count($open), "resolved" => count($rows) - count($open), "drilldown_map_version" => "v9.47", "alerts" => $rows ]; echo json_encode($summary, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);