Files
wevads-platform/scripts/api_brain-combo.php
2026-02-26 04:53:11 +01:00

124 lines
4.9 KiB
PHP
Executable File

<?php
require_once("/opt/wevads/config/credentials.php");
/**
* Brain Combo Discovery API — reads REAL brain_winners + brain_configs from DB
*/
header('Content-Type: application/json');
header('Access-Control-Allow-Origin: *');
$action = $_GET['action'] ?? $_POST['action'] ?? 'stats';
try {
$pdo = get_pdo("adx_system");
} catch (PDOException $e) {
echo json_encode(['status' => 'error', 'message' => 'DB: ' . $e->getMessage()]);
exit;
}
// Get actual columns from brain_winners
$winnerCols = [];
try {
$stmt = $pdo->query("SELECT column_name FROM information_schema.columns WHERE table_schema='admin' AND table_name='brain_winners' ORDER BY ordinal_position");
$winnerCols = $stmt->fetchAll(PDO::FETCH_COLUMN);
} catch (Exception $e) {}
switch ($action) {
case 'stats':
$total = $pdo->query("SELECT COUNT(*) FROM admin.brain_configs")->fetchColumn();
$winners = $pdo->query("SELECT COUNT(*) FROM admin.brain_winners")->fetchColumn();
// Get avg inbox rate - adapt to actual columns
$avgInbox = 0;
if (in_array('inbox_rate', $winnerCols)) {
$avgInbox = $pdo->query("SELECT COALESCE(AVG(inbox_rate), 0) FROM admin.brain_winners")->fetchColumn();
} elseif (in_array('success_rate', $winnerCols)) {
$avgInbox = $pdo->query("SELECT COALESCE(AVG(success_rate), 0) FROM admin.brain_winners")->fetchColumn();
}
// Count distinct ISPs
$isps = 0;
if (in_array('isp', $winnerCols)) {
$isps = $pdo->query("SELECT COUNT(DISTINCT isp) FROM admin.brain_winners")->fetchColumn();
} elseif (in_array('isp_name', $winnerCols)) {
$isps = $pdo->query("SELECT COUNT(DISTINCT isp_name) FROM admin.brain_winners")->fetchColumn();
}
echo json_encode([
'status' => 'ok',
'data' => [
'total_configs' => (int)$total,
'winners' => (int)$winners,
'avg_inbox' => round((float)$avgInbox, 1),
'isps_covered' => (int)$isps
],
'columns' => $winnerCols
]);
break;
case 'winners':
// Build query dynamically based on actual columns
$cols = implode(', ', array_map(fn($c) => "\"$c\"", $winnerCols));
$rows = $pdo->query("SELECT $cols FROM admin.brain_winners ORDER BY id DESC LIMIT 20")->fetchAll(PDO::FETCH_ASSOC);
// Normalize field names for frontend
$normalized = array_map(function($row) {
return [
'isp' => $row['isp'] ?? $row['isp_name'] ?? $row['target_isp'] ?? '—',
'mua' => $row['mua'] ?? $row['mua_type'] ?? $row['user_agent'] ?? '—',
'encoding' => $row['encoding'] ?? $row['content_encoding'] ?? '—',
'x_mailer' => $row['x_mailer'] ?? $row['mailer'] ?? 'none',
'inbox_rate' => $row['inbox_rate'] ?? $row['success_rate'] ?? 0,
'status' => 'winner',
'raw' => $row
];
}, $rows);
echo json_encode(['status' => 'ok', 'data' => $normalized]);
break;
case 'list':
// Get brain_configs
$configCols = [];
try {
$stmt = $pdo->query("SELECT column_name FROM information_schema.columns WHERE table_schema='admin' AND table_name='brain_configs' ORDER BY ordinal_position");
$configCols = $stmt->fetchAll(PDO::FETCH_COLUMN);
} catch (Exception $e) {}
if (!empty($configCols)) {
$cols = implode(', ', array_map(fn($c) => "\"$c\"", $configCols));
$rows = $pdo->query("SELECT $cols FROM admin.brain_configs ORDER BY id DESC LIMIT 30")->fetchAll(PDO::FETCH_ASSOC);
} else {
$rows = [];
}
$normalized = array_map(function($row) {
return [
'id' => $row['id'] ?? '—',
'combo' => $row['description'] ?? $row['name'] ?? $row['config_name'] ?? json_encode(array_slice($row, 0, 3)),
'tests' => $row['test_count'] ?? $row['tests'] ?? 0,
'inbox_rate' => $row['inbox_rate'] ?? $row['success_rate'] ?? 0,
'status' => $row['status'] ?? $row['is_active'] ?? 'unknown',
'raw' => $row
];
}, $rows);
echo json_encode(['status' => 'ok', 'data' => $normalized]);
break;
case 'discover':
// Trigger a new combo discovery (placeholder — connects to brain engine)
echo json_encode([
'status' => 'ok',
'message' => 'Discovery triggered',
'brain_tables' => [
'brain_winners' => count($winnerCols) . ' columns',
'columns' => $winnerCols
]
]);
break;
default:
echo json_encode(['status' => 'ok', 'message' => 'Brain Combo API', 'actions' => ['stats', 'winners', 'list', 'discover']]);
}
?>