39 lines
1.6 KiB
PHP
39 lines
1.6 KiB
PHP
<?php
|
|
// scan_email_bounces — Implemented Wave 124 Opus #1
|
|
// Scans PMTA bounces log on S95 via Sentinel SSH
|
|
header('Content-Type: application/json; charset=utf-8');
|
|
|
|
$SENTINEL = 'https://wevads.weval-consulting.com/api/sentinel-brain.php';
|
|
function sc($cmd, $t=15) {
|
|
global $SENTINEL;
|
|
$ch = curl_init($SENTINEL . '?action=exec&cmd=' . urlencode($cmd));
|
|
curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER=>true, CURLOPT_TIMEOUT=>$t, CURLOPT_SSL_VERIFYPEER=>false]);
|
|
$o = curl_exec($ch); curl_close($ch);
|
|
$d = @json_decode($o, true);
|
|
return $d['output'] ?? '';
|
|
}
|
|
|
|
$period = $_GET['period'] ?? 'today';
|
|
$bouncelog = '/var/log/pmta/bounce.csv';
|
|
|
|
// Count bounces today
|
|
$count = sc("test -f $bouncelog && grep -c \"$(date +%Y-%m-%d)\" $bouncelog 2>/dev/null || echo 0");
|
|
$hard = sc("test -f $bouncelog && grep \"$(date +%Y-%m-%d)\" $bouncelog 2>/dev/null | grep -c 'hard' || echo 0");
|
|
$soft = sc("test -f $bouncelog && grep \"$(date +%Y-%m-%d)\" $bouncelog 2>/dev/null | grep -c 'soft' || echo 0");
|
|
$top = sc("test -f $bouncelog && grep \"$(date +%Y-%m-%d)\" $bouncelog 2>/dev/null | awk -F, '{print \$4}' | sort | uniq -c | sort -rn | head -5 || echo 'no data'");
|
|
|
|
$result = [
|
|
'intent' => 'scan_email_bounces',
|
|
'status' => 'OK',
|
|
'period' => $period,
|
|
'counts' => [
|
|
'total' => (int)trim($count),
|
|
'hard' => (int)trim($hard),
|
|
'soft' => (int)trim($soft),
|
|
],
|
|
'top_domains' => trim($top),
|
|
'source' => "S95 PMTA $bouncelog via Sentinel",
|
|
'ts' => date('c'),
|
|
];
|
|
echo json_encode($result, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
|