/dev/null | wc -l")); $uptime = trim(shell_exec("uptime -p")); // SSL $ssl_exp = trim(shell_exec("openssl x509 -in /var/www/weval/ssl/fullchain.pem -noout -enddate 2>/dev/null | cut -d= -f2")); $ssl_days = $ssl_exp ? (int)((strtotime($ssl_exp) - time()) / 86400) : -1; // Ollama $ollama = @json_decode(@file_get_contents('http://127.0.0.1:11434/api/tags'), true); $models = count($ollama['models'] ?? []); $ollama_gb = round(array_sum(array_map(fn($m) => $m['size'] / (1024**3), $ollama['models'] ?? [])), 1); // Qdrant $qdrant = @json_decode(@file_get_contents('http://127.0.0.1:6333/collections'), true); $vectors = 0; foreach ($qdrant['result']['collections'] ?? [] as $c) { $ci = @json_decode(@file_get_contents("http://127.0.0.1:6333/collections/{$c['name']}"), true); $vectors += $ci['result']['points_count'] ?? 0; } // L99 + NonReg $l99 = @json_decode(@file_get_contents('/var/www/html/api/l99-ux-results.json'), true); $nr = @json_decode(@file_get_contents('/var/www/html/api/nonreg-latest.json'), true); $auth = @json_decode(@file_get_contents('/var/www/html/api/l99-auth-results.json'), true); // Architecture $arch = @json_decode(@file_get_contents('/var/www/html/api/architecture-index.json'), true); // Autonomy $auto = @json_decode(@file_get_contents('/var/www/html/api/wevia-autonomy-status.json'), true); // Blade $blade = @json_decode(@file_get_contents('/var/www/html/api/blade-tasks/heartbeat.json'), true); $blade_pending = count(array_filter( array_map(fn($f) => @json_decode(file_get_contents($f), true), glob('/var/www/html/api/blade-tasks/task_*.json')), fn($t) => ($t['status'] ?? '') === 'pending' )); // S95 MTA (via Action Engine) $s95r = @json_decode(@file_get_contents('http://127.0.0.1/api/wevia-action-engine.php?action=s95_status', false, stream_context_create(['http'=>['timeout'=>5]])), true); $s95_ports = ($s95r && $s95r['ok']) ? $s95r['ports'] : ['pmta:25'=>false]; // Domains $domains = []; foreach (['weval-consulting.com','wevads.weval-consulting.com','monitor.weval-consulting.com', 'ethica.weval-consulting.com','mirofish.weval-consulting.com','auth.weval-consulting.com'] as $d) { $ch = curl_init("https://$d/"); curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER=>1,CURLOPT_TIMEOUT=>3,CURLOPT_NOBODY=>1,CURLOPT_SSL_VERIFYPEER=>0]); curl_exec($ch); $code = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); $domains[$d] = $code > 0 && $code < 500; } // Ethica $c = @pg_connect("host=127.0.0.1 dbname=adx_system user=admin password=admin123"); $ethica = $c ? (int)pg_fetch_result(pg_query($c, "SELECT COUNT(*) FROM ethica.medecins_validated"), 0, 0) : 0; if ($c) pg_close($c); $elapsed = round((microtime(true) - $start) * 1000); echo json_encode([ 'ts' => date('c'), 'elapsed_ms' => $elapsed, 'system' => ['disk'=>$disk,'ram'=>$ram,'load'=>$load,'docker'=>$docker,'uptime'=>$uptime], 'ssl' => ['days'=>$ssl_days,'expires'=>$ssl_exp], 'ai' => ['ollama_models'=>$models,'ollama_gb'=>$ollama_gb,'qdrant_vectors'=>$vectors], 'quality' => [ 'l99' => ['pass'=>$l99['pass']??0,'fail'=>$l99['fail']??0,'warn'=>$l99['warn']??0,'total'=>($l99['pass']??0)+($l99['fail']??0)+($l99['warn']??0)], 'nonreg' => ['pass'=>$nr['pass']??0,'total'=>$nr['total']??0], 'auth' => ['pass'=>$auth['pass']??0,'fail'=>$auth['fail']??0], 'arch_score' => $arch['recommendations']['score'] ?? 0 ], 'mta' => ['ports'=>$s95_ports,'all_up'=>!in_array(false,$s95_ports)], 'domains' => ['list'=>$domains,'all_up'=>!in_array(false,$domains),'count'=>count(array_filter($domains))], 'blade' => ['online'=>!empty($blade['ts']),'ts'=>$blade['ts']??null,'pending'=>$blade_pending], 'ethica' => ['hcp'=>$ethica], 'autonomy' => ['fixes'=>$auto['fixes_count']??0,'alerts'=>$auto['alerts_count']??0,'last_run'=>$auto['timestamp']??null], 'action_engine' => ['routes'=>53,'version'=>'2.0'], ], JSON_PRETTY_PRINT);