Files
wevads-platform/cron/test_all_seeds.php
2026-02-26 04:53:11 +01:00

96 lines
4.0 KiB
PHP
Executable File

<?php
/**
* TEST ALL SEEDS - Teste TOUS les seeds et désactive les expirés
*/
set_time_limit(0);
ini_set('memory_limit', '512M');
$pdo = new PDO("pgsql:host=localhost;dbname=adx_system", "admin", "admin123");
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$batchSize = isset($argv[1]) ? (int)$argv[1] : 100;
$sleepMs = isset($argv[2]) ? (int)$argv[2] : 200; // ms entre chaque test
echo "=== TEST ALL SEEDS ===\n";
echo "Batch size: $batchSize | Sleep: {$sleepMs}ms\n\n";
// Stats
$stats = ['tested' => 0, 'valid' => 0, 'expired' => 0, 'errors' => 0];
// Compter le total
$total = $pdo->query("SELECT COUNT(*) FROM admin.brain_seeds WHERE is_active = true AND password IS NOT NULL AND password != '' AND password != 'TO_CONFIGURE'")->fetchColumn();
echo "Total seeds à tester: $total\n\n";
$offset = 0;
$startTime = time();
while (true) {
$seeds = $pdo->query("
SELECT id, email, password, imap_host, imap_port, isp
FROM admin.brain_seeds
WHERE is_active = true
AND password IS NOT NULL AND password != '' AND password != 'TO_CONFIGURE'
AND (check_status IS NULL OR check_status NOT IN ('valid', 'expired'))
ORDER BY isp, id
LIMIT $batchSize
")->fetchAll(PDO::FETCH_ASSOC);
if (empty($seeds)) {
echo "\n✅ Tous les seeds ont été testés!\n";
break;
}
foreach ($seeds as $seed) {
$stats['tested']++;
// Test IMAP
$mailbox = '{' . $seed['imap_host'] . ':' . $seed['imap_port'] . '/imap/ssl/novalidate-cert}INBOX';
$imap = @imap_open($mailbox, $seed['email'], $seed['password'], 0, 1, ['DISABLE_AUTHENTICATOR' => 'GSSAPI']);
if ($imap) {
$stats['valid']++;
@imap_close($imap);
$pdo->prepare("UPDATE admin.brain_seeds SET check_status = 'valid', last_checked = NOW() WHERE id = ?")->execute([$seed['id']]);
echo "{$seed['isp']}: {$seed['email']}\n";
} else {
$error = @imap_last_error();
$stats['expired']++;
$pdo->prepare("UPDATE admin.brain_seeds SET is_active = false, check_status = 'expired', last_checked = NOW(), check_error = ? WHERE id = ?")->execute([$error, $seed['id']]);
// Pas d'output pour les expirés (trop nombreux)
}
// Progress
if ($stats['tested'] % 100 == 0) {
$elapsed = time() - $startTime;
$rate = $stats['tested'] / max(1, $elapsed);
$remaining = ($total - $stats['tested']) / max(1, $rate);
echo "\n--- Progress: {$stats['tested']}/$total | Valid: {$stats['valid']} | Expired: {$stats['expired']} | ~" . round($remaining/60) . "min restant ---\n\n";
}
usleep($sleepMs * 1000);
}
// Nettoyer les erreurs IMAP en mémoire
imap_errors();
imap_alerts();
}
// Résumé final
$elapsed = time() - $startTime;
echo "\n";
echo "╔════════════════════════════════════════╗\n";
echo "║ RÉSULTAT FINAL ║\n";
echo "╠════════════════════════════════════════╣\n";
echo "║ Testés: " . str_pad($stats['tested'], 10) . "\n";
echo "║ Valides: " . str_pad($stats['valid'], 10) . " ✅ ║\n";
echo "║ Expirés: " . str_pad($stats['expired'], 10) . " ❌ ║\n";
echo "║ Durée: " . str_pad(round($elapsed/60, 1) . " min", 10) . "\n";
echo "╚════════════════════════════════════════╝\n";
// Stats par ISP
echo "\n=== SEEDS VALIDES PAR ISP ===\n";
$ispStats = $pdo->query("SELECT isp, COUNT(*) as cnt FROM admin.brain_seeds WHERE check_status = 'valid' GROUP BY isp ORDER BY cnt DESC")->fetchAll();
foreach ($ispStats as $row) {
echo "{$row['isp']}: {$row['cnt']}\n";
}