96 lines
4.0 KiB
PHP
Executable File
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";
|
|
}
|