Files
wevads-platform/scripts/hamid-test-api.php
2026-02-26 04:53:11 +01:00

195 lines
5.9 KiB
PHP
Executable File

<?php
header('Content-Type: application/json');
$results = [];
$totalTests = 0;
$passedTests = 0;
// 1. Test Providers API
$providers = ['cerebras', 'groq', 'cloudflare', 'sambanova'];
foreach ($providers as $provider) {
$totalTests++;
$start = microtime(true);
$ch = curl_init('http://localhost:5821/hamid-api.php');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode(['message' => '2+2', 'provider' => $provider, 'session_id' => 'test_' . time()]),
CURLOPT_TIMEOUT => 30
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
$duration = round((microtime(true) - $start) * 1000);
$data = json_decode($response, true);
$success = $httpCode == 200 && isset($data['response']) && !empty($data['response']);
if ($success) $passedTests++;
$results['providers'][$provider] = [
'success' => $success,
'duration' => $duration,
'http_code' => $httpCode,
'has_response' => isset($data['response'])
];
}
// 2. Test Status API
$totalTests++;
$ch = curl_init('http://localhost:5821/hamid-status.php');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
$data = json_decode($response, true);
$success = $httpCode == 200 && isset($data['providers']) && isset($data['best_available']);
if ($success) $passedTests++;
$results['status_api'] = [
'success' => $success,
'http_code' => $httpCode,
'providers_count' => isset($data['providers']) ? count($data['providers']) : 0,
'best_available' => $data['best_available'] ?? 'N/A',
'ready_count' => isset($data['providers']) ? count(array_filter($data['providers'], fn($p) => $p['status'] === 'ready')) : 0
];
// 3. Test PHP Syntax
$phpFiles = [
'hamid-api.php',
'hamid-fullscreen.php',
'hamid-cli.php',
'hamid-ssh.php',
'hamid-widget.php',
'hamid-status.php',
'hamid-index.php',
'hamid-failover-monitor.php',
'hamid-providers-config.php',
'hamid-providers.php'
];
foreach ($phpFiles as $file) {
$totalTests++;
$path = "/opt/wevads/public/$file";
if (file_exists($path)) {
$output = shell_exec("php -l $path 2>&1");
$success = strpos($output, 'No syntax errors') !== false;
} else {
$success = false;
$output = 'File not found';
}
if ($success) $passedTests++;
$results['php_syntax'][$file] = [
'success' => $success,
'exists' => file_exists($path)
];
}
// 4. Test HTTP Access
$pages = [
'hamid-index.php',
'hamid-fullscreen.php',
'hamid-cli.php',
'hamid-ssh.php',
'hamid-widget.php',
'hamid-failover-monitor.php',
'hamid-status.php',
'hamid-providers.php',
'hamid-code/'
];
foreach ($pages as $page) {
$totalTests++;
$ch = curl_init("http://localhost:5821/$page");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_NOBODY, false);
curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
$success = $httpCode == 200;
if ($success) $passedTests++;
$results['http_access'][$page] = [
'success' => $success,
'http_code' => $httpCode
];
}
// 5. Test Failover Health
$totalTests++;
$ch = curl_init('http://localhost:5821/hamid-failover-monitor.php?api=health_check');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true);
$success = isset($data['healthy']);
if ($success) $passedTests++;
$results['failover_health'] = [
'success' => $success,
'healthy' => $data['healthy'] ?? false,
'ready_count' => $data['ready_count'] ?? 0,
'down_count' => $data['down_count'] ?? 0
];
// 6. Test CLI Python
$totalTests++;
$output = shell_exec('python3 -m py_compile /usr/local/bin/hamid 2>&1');
$success = empty($output) || strpos($output, 'Error') === false;
if ($success) $passedTests++;
$results['cli_python'] = [
'success' => $success,
'has_cloudflare' => strpos(file_get_contents('/usr/local/bin/hamid'), 'cloudflare') !== false,
'has_sambanova' => strpos(file_get_contents('/usr/local/bin/hamid'), 'sambanova') !== false
];
// 7. Test Config centralisée
$totalTests++;
try {
require_once '/opt/wevads/public/hamid-providers-config.php';
global $WEVAL_MIND_PROVIDERS, $WEVAL_MIND_ROTATION_ORDER;
$success = isset($WEVAL_MIND_PROVIDERS) && count($WEVAL_MIND_PROVIDERS) > 20;
$cfPriority = $WEVAL_MIND_PROVIDERS['cloudflare']['priority'] ?? 'N/A';
$rotationCount = count($WEVAL_MIND_ROTATION_ORDER ?? []);
} catch (Exception $e) {
$success = false;
$cfPriority = 'ERROR';
$rotationCount = 0;
}
if ($success) $passedTests++;
$results['config'] = [
'success' => $success,
'providers_count' => isset($WEVAL_MIND_PROVIDERS) ? count($WEVAL_MIND_PROVIDERS) : 0,
'cloudflare_priority' => $cfPriority,
'rotation_count' => $rotationCount
];
// 8. Test Database
$totalTests++;
try {
$pdo = new PDO("pgsql:host=localhost;dbname=adx_system", "admin", "admin123");
$stmt = $pdo->query("SELECT COUNT(*) FROM admin.hamid_config");
$configCount = $stmt->fetchColumn();
$success = $configCount > 0;
} catch (Exception $e) {
$success = false;
$configCount = 0;
}
if ($success) $passedTests++;
$results['database'] = [
'success' => $success,
'config_count' => $configCount
];
// Summary
$results['summary'] = [
'total_tests' => $totalTests,
'passed' => $passedTests,
'failed' => $totalTests - $passedTests,
'success_rate' => round(($passedTests / $totalTests) * 100, 1),
'timestamp' => date('Y-m-d H:i:s')
];
echo json_encode($results, JSON_PRETTY_PRINT);