Files
wevia-brain/s89-arsenal-screens/send-capacity-dashboard.html
2026-04-12 23:01:36 +02:00

89 lines
7.6 KiB
HTML
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?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>