53 lines
2.4 KiB
PHP
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);
|