Files
html/api/ambre-6sigma-scan.php
opus 9c69db151f
Some checks failed
WEVAL NonReg / nonreg (push) Has been cancelled
auto-sync-0105
2026-04-22 01:05:02 +02:00

53 lines
2.4 KiB
PHP

<?php
header("Content-Type: application/json");
$out = [];
// 1. Check PHP-FPM status
$out["fpm_status"] = @shell_exec("systemctl is-active php8.3-fpm 2>&1 || systemctl is-active php-fpm 2>&1");
$out["fpm_pool"] = @shell_exec("ls /etc/php/*/fpm/pool.d/*.conf 2>&1 | head -3");
// max_children from pool config
$fpm_conf = @shell_exec("grep -h 'pm.max_children\\|pm.start_servers\\|pm.max_spare_servers' /etc/php/*/fpm/pool.d/*.conf 2>&1 | head -20");
$out["fpm_pool_config"] = trim($fpm_conf);
// 2. Current load
$out["load_avg"] = trim(@shell_exec("uptime") ?: "");
$out["fpm_processes"] = intval(@shell_exec("ps aux | grep -c php-fpm8") ?: 0);
// 3. Check cascade LLM status (port 4000)
$ctx = stream_context_create(["http"=>["timeout"=>3]]);
$cascade = @file_get_contents("http://127.0.0.1:4000/health", false, $ctx);
$out["cascade_health"] = $cascade ? "OK" : "DOWN/UNREACHABLE";
// 4. Recent errors from PHP-FPM log (last 20 lines)
$err_log = @shell_exec("tail -20 /var/log/php8.3-fpm.log 2>/dev/null || tail -20 /var/log/php-fpm.log 2>/dev/null");
$out["fpm_errors"] = substr($err_log ?? "", 0, 1500);
// 5. Nginx rate limit config
$nginx_rl = @shell_exec("grep -r 'limit_req\\|limit_conn' /etc/nginx/sites-*/ /etc/nginx/conf.d/ 2>/dev/null | head -5");
$out["nginx_rate_limit"] = trim($nginx_rl);
// 6. Cloudflare rate limit? Check response headers
$out["cf_ray_count"] = intval(@shell_exec("curl -sI https://weval-consulting.com/ 2>&1 | grep -c 'cf-ray'") ?: 0);
// 7. Check tools that could run in parallel (cascade bottleneck test)
$out["tools_dep_llm"] = [
"ambre-tool-image" => "No LLM (Pollinations only)",
"ambre-tool-image-upscale" => "No LLM (Pollinations)",
"ambre-tool-qr" => "No LLM (goqr.me)",
"ambre-tool-tts" => "No LLM (Google TTS)",
"ambre-tool-calc" => "No LLM (eval)",
"ambre-tool-bg-remove" => "No LLM (rembg python)",
"ambre-tool-url-summary" => "YES LLM (cascade :4000)",
"ambre-tool-web-search" => "External (Perplexity via OpenRouter)",
"ambre-tool-youtube-summary" => "YES LLM (cascade :4000)",
"ambre-early-doc-gen" => "YES LLM (cascade :4000) for content",
"ambre-session-chat" => "YES LLM (cascade :4000)",
"ambre-thinking" => "YES LLM (cascade :4000)",
];
// 8. Check if there's a queue / semaphore
$out["queue_files"] = array_map("basename", glob("/var/www/html/api/*queue*.php") ?: []);
echo json_encode($out, JSON_PRETTY_PRINT|JSON_UNESCAPED_SLASHES);