89 lines
7.6 KiB
HTML
Executable File
89 lines
7.6 KiB
HTML
Executable File
<?php include_once("/opt/wevads-arsenal/public/api/wevads-metrics.php"); ?>
|
||
<?php
|
||
@$_db=new PDO("pgsql:host=localhost;dbname=adx_system","admin","admin123",[PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION,PDO::ATTR_DEFAULT_FETCH_MODE=>PDO::FETCH_ASSOC]);$_db->exec("SET search_path TO admin,public");
|
||
$_total=(int)$_db->query("SELECT COUNT(*) FROM send_capacity")->fetchColumn();
|
||
$_cols=$_db->query("SELECT column_name FROM information_schema.columns WHERE table_schema='admin' AND table_name='send_capacity' ORDER BY ordinal_position")->fetchAll(PDO::FETCH_COLUMN);
|
||
$_warmup=(int)$_db->query("SELECT COUNT(*) FROM warmup_accounts WHERE status='warming'")->fetchColumn();
|
||
$_cap=$_warmup*50;
|
||
$_sent_today=(int)$_db->query("SELECT COUNT(*) FROM unified_send_log WHERE created_at > CURRENT_DATE")->fetchColumn();
|
||
$_sent_week=(int)$_db->query("SELECT COUNT(*) FROM unified_send_log WHERE created_at > CURRENT_DATE - INTERVAL '7 days'")->fetchColumn();
|
||
$_bc=(int)$_db->query("SELECT COUNT(*) FROM brain_send_configs WHERE status='active'")->fetchColumn();
|
||
$_bw=(int)$_db->query("SELECT COUNT(*) FROM brain_send_configs WHERE is_winner=true")->fetchColumn();
|
||
// Try to get ISP breakdown from send_capacity
|
||
$_by_isp=[];
|
||
try{
|
||
if(in_array('isp',$_cols)&&in_array('capacity',$_cols)){
|
||
$_by_isp=$_db->query("SELECT isp,SUM(capacity) as cap,COUNT(*) as cnt FROM send_capacity GROUP BY isp ORDER BY cap DESC LIMIT 15")->fetchAll();
|
||
}elseif(in_array('isp_target',$_cols)){
|
||
$_by_isp=$_db->query("SELECT isp_target as isp,COUNT(*) as cnt,0 as cap FROM send_capacity GROUP BY isp_target ORDER BY cnt DESC LIMIT 15")->fetchAll();
|
||
}else{
|
||
$_by_isp=$_db->query("SELECT * FROM send_capacity ORDER BY id DESC LIMIT 20")->fetchAll();
|
||
}
|
||
}catch(Exception $e){$_by_isp=[];}
|
||
// Also get brain_send_configs by ISP
|
||
$_cfg_isp=$_db->query("SELECT isp_target,COUNT(*) as cnt,SUM(CASE WHEN is_winner THEN 1 ELSE 0 END) as winners,COALESCE(AVG(inbox_rate),0) as avg_inbox FROM brain_send_configs WHERE status='active' GROUP BY isp_target ORDER BY cnt DESC LIMIT 15")->fetchAll();
|
||
?><!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1">
|
||
<title>WEVADS - Send Capacity Dashboard</title>
|
||
<link href="https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500;700&display=swap" rel="stylesheet">
|
||
<style>
|
||
:root{--bg:#060a14;--s:#0c1220;--s2:#111827;--b:#1e293b;--t:#e2e8f0;--d:#64748b;--cy:#22d3ee;--gn:#34d399;--am:#fbbf24;--rd:#f87171;--pu:#a78bfa;--bl:#60a5fa;--pk:#f472b6;--or:#f59e0b}
|
||
*{margin:0;padding:0;box-sizing:border-box}body{background:var(--bg);color:var(--t);font-family:'DM Sans',sans-serif;font-size:12px}
|
||
.app{max-width:1440px;margin:0 auto;padding:16px}
|
||
.hdr{display:flex;justify-content:space-between;align-items:center;padding:16px 20px;background:var(--s);border:1px solid var(--b);border-radius:10px;margin-bottom:16px}
|
||
.hdr h1{font-size:20px;font-weight:700}.hdr h1 b{color:var(--gn)}.hdr .sub{color:var(--d);font-size:11px}
|
||
.sr{display:grid;grid-template-columns:repeat(5,1fr);gap:10px;margin-bottom:16px}
|
||
.sc{background:var(--s);border:1px solid var(--b);border-radius:8px;padding:14px;text-align:center}
|
||
.sc .n{font-family:'JetBrains Mono',monospace;font-size:22px;font-weight:700}.sc .l{font-size:9px;color:var(--d);margin-top:4px;text-transform:uppercase}
|
||
.cd{background:var(--s);border:1px solid var(--b);border-radius:10px;padding:16px;margin-bottom:12px}
|
||
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:12px}
|
||
table{width:100%;border-collapse:collapse}th{text-align:left;padding:6px 8px;color:var(--d);font-size:9px;text-transform:uppercase;border-bottom:1px solid var(--b)}
|
||
td{padding:6px 8px;border-bottom:1px solid rgba(30,41,59,.3);font-size:11px}tr:hover{background:rgba(52,211,153,.02)}
|
||
.bar{height:8px;border-radius:4px;background:var(--s2);overflow:hidden}.bar-fill{height:100%;border-radius:4px}
|
||
.nt{display:inline-block;padding:2px 6px;border-radius:4px;font-size:9px;font-weight:600}
|
||
.nt-g{background:rgba(52,211,153,.15);color:var(--gn)}.nt-a{background:rgba(251,191,36,.15);color:var(--am)}
|
||
.gauge{text-align:center;padding:20px;background:linear-gradient(135deg,rgba(52,211,153,.05),rgba(34,211,238,.05));border:1px solid rgba(52,211,153,.2);border-radius:10px;margin-bottom:16px}
|
||
.gauge .big{font-family:'JetBrains Mono',monospace;font-size:48px;font-weight:700}
|
||
</style><link rel="stylesheet" href="wevads-global.css?v1770777318">
|
||
</head><body>
|
||
<div class="app">
|
||
<div class="hdr"><div><h1>⚡ <b>Send</b> Capacity Dashboard</h1><div class="sub">Real-time send capacity, ISP routing, config performance</div></div></div>
|
||
<div class="gauge"><div class="big" style="color:var(--gn)"><?=number_format($_cap)?></div><div style="color:var(--d);font-size:12px;margin-top:4px">DAILY CAPACITY (<?=number_format($_warmup)?> accounts × 50 emails)</div>
|
||
<div style="margin-top:8px;display:flex;gap:20px;justify-content:center">
|
||
<div><span style="color:var(--am);font-weight:700;font-family:'JetBrains Mono',monospace"><?=number_format($_sent_today)?></span> <span style="color:var(--d);font-size:10px">sent today</span></div>
|
||
<div><span style="color:var(--bl);font-weight:700;font-family:'JetBrains Mono',monospace"><?=number_format($_sent_week)?></span> <span style="color:var(--d);font-size:10px">sent 7d</span></div>
|
||
<div><span style="color:var(--cy);font-weight:700;font-family:'JetBrains Mono',monospace"><?=$_bc?></span> <span style="color:var(--d);font-size:10px">active configs</span></div>
|
||
<div><span style="color:var(--pk);font-weight:700;font-family:'JetBrains Mono',monospace"><?=$_bw?></span> <span style="color:var(--d);font-size:10px">winners</span></div>
|
||
</div></div>
|
||
<div class="sr">
|
||
<div class="sc"><div class="n" style="color:var(--gn)"><?=number_format($_warmup)?></div><div class="l">Warming</div></div>
|
||
<div class="sc"><div class="n" style="color:var(--bl)"><?=number_format($_cap)?></div><div class="l">Cap/Day</div></div>
|
||
<div class="sc"><div class="n" style="color:var(--am)"><?=$_total?></div><div class="l">Cap Records</div></div>
|
||
<div class="sc"><div class="n" style="color:var(--cy)"><?=$_bc?></div><div class="l">Active Configs</div></div>
|
||
<div class="sc"><div class="n" style="color:var(--pk)"><?=$_bw?></div><div class="l">Winners</div></div>
|
||
</div>
|
||
<div class="grid2">
|
||
<div class="cd"><h3 style="margin-bottom:10px;color:var(--cy)">📊 Config Performance by ISP</h3>
|
||
<table><tr><th>ISP Target</th><th>Configs</th><th>Winners</th><th>Avg Inbox %</th><th></th></tr>
|
||
<?php foreach($_cfg_isp as $c):$pct=round($c['avg_inbox'],1);$clr=$pct>=80?'var(--gn)':($pct>=50?'var(--am)':'var(--rd)');?>
|
||
<tr><td><b><?=htmlspecialchars($c['isp_target']??'-')?></b></td>
|
||
<td style="font-weight:700"><?=$c['cnt']?></td>
|
||
<td style="color:var(--pk);font-weight:700"><?=$c['winners']?></td>
|
||
<td style="color:<?=$clr?>;font-weight:700"><?=$pct?>%</td>
|
||
<td><div class="bar" style="width:100px"><div class="bar-fill" style="width:<?=min($pct,100)?>%;background:<?=$clr?>"></div></div></td></tr>
|
||
<?php endforeach;?></table></div>
|
||
<div class="cd"><h3 style="margin-bottom:10px;color:var(--gn)">📈 Capacity Distribution</h3>
|
||
<?php if(!empty($_by_isp)&&isset($_by_isp[0]['isp'])):?>
|
||
<table><tr><th>ISP</th><th>Records</th><th>Capacity</th></tr>
|
||
<?php foreach($_by_isp as $i):?>
|
||
<tr><td><b><?=htmlspecialchars($i['isp']??'-')?></b></td>
|
||
<td><?=$i['cnt']?></td>
|
||
<td style="color:var(--gn);font-weight:700"><?=number_format($i['cap']??0)?></td></tr>
|
||
<?php endforeach;?></table>
|
||
<?php else:?>
|
||
<p style="color:var(--d);padding:20px;text-align:center">Send capacity records: <?=$_total?>. Schema: <?=implode(', ',$_cols)?></p>
|
||
<?php endif;?>
|
||
</div>
|
||
</div></div>
|
||
<?php include("/opt/wevads-arsenal/public/universal-drill.html"); ?>
|
||
</body></html>
|