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

143 lines
15 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");$_db->exec("SET search_path TO admin");
$_total=(int)$_db->query("SELECT COUNT(*) FROM brain_send_configs")->fetchColumn();
$_tested=(int)$_db->query("SELECT COUNT(*) FROM brain_send_configs WHERE total_sent>0")->fetchColumn();
$_winners=(int)$_db->query("SELECT COUNT(*) FROM brain_send_configs WHERE inbox_rate>70 AND total_sent>0")->fetchColumn();
$_methods=$_db->query("SELECT send_method, COUNT(*) as cnt, ROUND(AVG(NULLIF(inbox_rate,0))::numeric,1) as avg_inbox, SUM(total_sent) as total_sent FROM brain_send_configs GROUP BY send_method ORDER BY cnt DESC")->fetchAll(PDO::FETCH_ASSOC);
$_isps=$_db->query("SELECT isp_target as isp, COUNT(*) as cnt, ROUND(AVG(NULLIF(inbox_rate,0))::numeric,1) as avg_inbox, SUM(total_sent) as total_sent FROM brain_send_configs WHERE isp_target IS NOT NULL AND isp_target!='' GROUP BY isp_target ORDER BY cnt DESC LIMIT 12")->fetchAll(PDO::FETCH_ASSOC);
$_top=$_db->query("SELECT id, send_method, isp_target, from_domain, inbox_rate, total_sent, total_inbox, status FROM brain_send_configs WHERE total_sent>0 ORDER BY inbox_rate DESC LIMIT 10")->fetchAll(PDO::FETCH_ASSOC);
$_worst=$_db->query("SELECT id, send_method, isp_target, from_domain, inbox_rate, total_sent, status FROM brain_send_configs WHERE total_sent>0 AND inbox_rate<30 ORDER BY inbox_rate ASC LIMIT 5")->fetchAll(PDO::FETCH_ASSOC);
$_untested=(int)$_db->query("SELECT COUNT(*) FROM brain_send_configs WHERE status='untested' OR total_sent=0")->fetchColumn();
$_avgInbox=$_db->query("SELECT ROUND(AVG(NULLIF(inbox_rate,0))::numeric,1) FROM brain_send_configs WHERE total_sent>0")->fetchColumn();
$_totalSent=(int)$_db->query("SELECT COALESCE(SUM(total_sent),0) FROM brain_send_configs")->fetchColumn();
?>
<!DOCTYPE html><html lang="fr"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1">
<title>WEVADS - Dark Slot</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}
*{margin:0;padding:0;box-sizing:border-box}body{background:var(--bg);color:var(--t);font-family:'DM Sans',sans-serif;font-size:12px}
.mono{font-family:'JetBrains Mono',monospace}
.hdr{background:var(--s);border-bottom:1px solid var(--b);padding:14px 20px;display:flex;justify-content:space-between;align-items:center}
.hdr h1{font-size:18px;font-weight:700;margin-left:80px}.hdr h1 span{color:var(--pu)}
.wrap{padding:16px 20px;max-width:1500px;margin:0 auto}
.stats{display:grid;grid-template-columns:repeat(6,1fr);gap:10px;margin-bottom:16px}
.sc{background:var(--s);border:1px solid var(--b);border-radius:10px;padding:14px;text-align:center;cursor:pointer;transition:all .2s}
.sc:hover{transform:translateY(-2px);box-shadow:0 8px 24px rgba(0,0,0,.3);border-color:var(--pu)}
.sc .n{font-family:'JetBrains Mono',monospace;font-size:22px;font-weight:700}.sc .l{font-size:9px;text-transform:uppercase;color:var(--d);margin-top:4px}.sc .delta{font-size:9px;margin-top:3px}
.g2{display:grid;grid-template-columns:1fr 1fr;gap:12px}.cd{background:var(--s);border:1px solid var(--b);border-radius:10px;padding:14px}
table{width:100%;border-collapse:collapse;font-size:11px}th{text-align:left;color:var(--d);text-transform:uppercase;font-size:9px;padding:6px 8px;border-bottom:1px solid var(--b)}td{padding:6px 8px;border-bottom:1px solid rgba(30,41,59,.3)}
.badge{font-size:8px;padding:2px 6px;border-radius:3px;font-weight:600}.badge-gn{background:rgba(52,211,153,.15);color:var(--gn)}.badge-rd{background:rgba(248,113,113,.15);color:var(--rd)}.badge-am{background:rgba(251,191,36,.15);color:var(--am)}.badge-cy{background:rgba(34,211,238,.15);color:var(--cy)}.badge-pu{background:rgba(167,139,250,.15);color:var(--pu)}
.btn{padding:8px 16px;border-radius:6px;border:1px solid var(--b);background:var(--s2);color:var(--t);cursor:pointer;font-size:10px;font-weight:600;transition:all .2s;text-decoration:none}.btn:hover{border-color:var(--pu);transform:translateY(-1px)}
.tabs{display:flex;gap:2px;margin-bottom:14px;border-bottom:1px solid var(--b)}.tab{padding:8px 16px;cursor:pointer;font-size:10px;font-weight:600;text-transform:uppercase;color:var(--d);border-bottom:2px solid transparent}.tab:hover{color:var(--t)}.tab.active{color:var(--pu);border-color:var(--pu)}
.panel{display:none}.panel.active{display:block}
.modal{display:none;position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.75);z-index:9999;justify-content:center;align-items:center}.modal-box{background:var(--s);border:1px solid var(--b);border-radius:12px;padding:20px;max-width:900px;width:92%;max-height:82vh;overflow-y:auto}
.bar{height:8px;border-radius:4px;background:var(--s2);overflow:hidden;margin-top:4px}.bar-fill{height:100%;border-radius:4px}
.slot{background:var(--s2);border:1px solid var(--b);border-radius:10px;padding:12px;margin-bottom:8px;display:flex;align-items:center;gap:12px;transition:.2s;cursor:pointer}
.slot:hover{border-color:var(--pu);transform:translateX(4px)}
.slot .rank{font-family:'JetBrains Mono',monospace;font-size:18px;font-weight:700;color:var(--pu);width:32px;text-align:center}
.slot .info{flex:1}.slot .info .name{font-weight:600;font-size:12px}.slot .info .meta{font-size:10px;color:var(--d)}
.slot .score{font-family:'JetBrains Mono',monospace;font-size:16px;font-weight:700}
@media(max-width:900px){.stats{grid-template-columns:repeat(3,1fr)}.g2{grid-template-columns:1fr}}
</style>
<link rel="stylesheet" href="wevads-global.css?v1770777318">
</head><body>
<div class="hdr"><div><h1>🎰 <span>Dark Slot</span></h1><div style="color:var(--d);font-size:11px;margin-top:4px">Send method optimization — config testing — inbox rate analysis — ISP × method combos</div></div><div style="display:flex;gap:8px;align-items:center"><span class="badge badge-pu">● SLOT ENGINE</span><a href="menu.html" class="btn">Menu</a><a href="operations-overview.html" class="btn">← Overview</a></div></div>
<div class="wrap">
<div class="stats">
<div class="sc" onclick="drill('configs')"><div class="n" style="color:var(--pu)"><?=$_total?></div><div class="l">Total Configs ▼</div><div class="delta"><?=$_tested?> tested</div></div>
<div class="sc" onclick="drill('winners')"><div class="n" style="color:var(--gn)"><?=$_winners?></div><div class="l">Winners ▼</div><div class="delta" style="color:var(--gn)">inbox &gt;70%</div></div>
<div class="sc" onclick="drill('inbox')"><div class="n" style="color:var(--cy)"><?=$_avgInbox?>%</div><div class="l">Avg Inbox ▼</div><div class="delta">across tested</div></div>
<div class="sc" onclick="drill('sent')"><div class="n" style="color:var(--am)"><?=number_format($_totalSent)?></div><div class="l">Total Sent ▼</div><div class="delta">all configs</div></div>
<div class="sc" onclick="drill('untested')"><div class="n" style="color:var(--rd)"><?=$_untested?></div><div class="l">Untested ▼</div><div class="delta">need testing</div></div>
<div class="sc" onclick="drill('methods')"><div class="n" style="color:var(--bl)"><?=count($_methods)?></div><div class="l">Methods ▼</div><div class="delta">send methods</div></div>
</div>
<div class="tabs">
<div class="tab active" onclick="showTab('ranking')">🏆 Ranking</div>
<div class="tab" onclick="showTab('methods')">Methods</div>
<div class="tab" onclick="showTab('isps')">ISP Perf</div>
<div class="tab" onclick="showTab('worst')">⚠️ Worst</div>
</div>
<!-- RANKING -->
<div class="panel active" id="tab-ranking">
<div class="cd">
<h3 style="font-size:13px;margin-bottom:12px;color:var(--gn)">🏆 Top Performers (by Inbox Rate)</h3>
<?php foreach($_top as $i=>$c): $col=$c['inbox_rate']>80?'var(--gn)':($c['inbox_rate']>50?'var(--am)':'var(--rd)'); ?>
<div class="slot" onclick="drill('detail',<?=$c['id']?>)">
<div class="rank">#<?=$i+1?></div>
<div class="info"><div class="name"><?=htmlspecialchars($c['send_method'])?><?=htmlspecialchars($c['isp_target']??'—')?></div><div class="meta"><?=htmlspecialchars($c['from_domain']??'—')?> · <?=number_format($c['total_sent'])?> sent · <span class="badge badge-<?=$c['status']==='winner'?'gn':($c['status']==='testing'?'am':'cy')?>"><?=strtoupper($c['status']??'?')?></span></div></div>
<div class="score" style="color:<?=$col?>"><?=$c['inbox_rate']?>%</div>
</div>
<?php endforeach; if(empty($_top)):?><div style="text-align:center;padding:30px;color:var(--d)">No tested configs yet</div><?php endif;?>
</div>
</div>
<!-- METHODS -->
<div class="panel" id="tab-methods">
<div class="cd">
<h3 style="font-size:13px;margin-bottom:10px;color:var(--pu)">📡 Send Methods Performance</h3>
<table><thead><tr><th>Method</th><th>Configs</th><th>Avg Inbox</th><th>Total Sent</th><th>Performance</th></tr></thead><tbody>
<?php foreach($_methods as $m): $col=($m['avg_inbox']??0)>70?'var(--gn)':(($m['avg_inbox']??0)>40?'var(--am)':'var(--rd)'); $w=min(($m['avg_inbox']??0),100); ?>
<tr><td style="font-weight:600"><?=htmlspecialchars($m['send_method'])?></td><td class="mono"><?=$m['cnt']?></td><td class="mono" style="color:<?=$col?>"><?=$m['avg_inbox']??0?>%</td><td class="mono"><?=number_format($m['total_sent'])?></td><td><div class="bar" style="width:100px"><div class="bar-fill" style="width:<?=$w?>%;background:<?=$col?>"></div></div></td></tr>
<?php endforeach; ?>
</tbody></table>
</div>
</div>
<!-- ISP PERF -->
<div class="panel" id="tab-isps">
<div class="cd">
<h3 style="font-size:13px;margin-bottom:10px;color:var(--cy)">📧 ISP Target Performance</h3>
<table><thead><tr><th>ISP</th><th>Configs</th><th>Avg Inbox</th><th>Total Sent</th><th>Performance</th></tr></thead><tbody>
<?php foreach($_isps as $i): $col=($i['avg_inbox']??0)>70?'var(--gn)':(($i['avg_inbox']??0)>40?'var(--am)':'var(--rd)'); $w=min(($i['avg_inbox']??0),100); ?>
<tr><td style="font-weight:600"><?=htmlspecialchars($i['isp'])?></td><td class="mono"><?=$i['cnt']?></td><td class="mono" style="color:<?=$col?>"><?=$i['avg_inbox']??0?>%</td><td class="mono"><?=number_format($i['total_sent'])?></td><td><div class="bar" style="width:100px"><div class="bar-fill" style="width:<?=$w?>%;background:<?=$col?>"></div></div></td></tr>
<?php endforeach; ?>
</tbody></table>
</div>
</div>
<!-- WORST -->
<div class="panel" id="tab-worst">
<div class="cd">
<h3 style="font-size:13px;margin-bottom:10px;color:var(--rd)">⚠️ Worst Performers (inbox &lt;30%)</h3>
<table><thead><tr><th>ID</th><th>Method</th><th>ISP</th><th>Domain</th><th>Inbox</th><th>Sent</th><th>Status</th></tr></thead><tbody>
<?php foreach($_worst as $w): ?>
<tr><td>#<?=$w['id']?></td><td><?=htmlspecialchars($w['send_method'])?></td><td><?=htmlspecialchars($w['isp_target']??'—')?></td><td style="font-size:10px"><?=htmlspecialchars($w['from_domain']??'—')?></td><td class="mono" style="color:var(--rd)"><?=$w['inbox_rate']?>%</td><td class="mono"><?=number_format($w['total_sent'])?></td><td><span class="badge badge-rd"><?=strtoupper($w['status']??'?')?></span></td></tr>
<?php endforeach; if(empty($_worst)):?><tr><td colspan="7" style="text-align:center;color:var(--d);padding:20px">No bad performers</td></tr><?php endif;?>
</tbody></table>
</div>
</div>
</div>
<div class="modal" id="drillModal" onclick="if(event.target===this)this.style.display='none'"><div class="modal-box"><div style="display:flex;justify-content:space-between;align-items:center;margin-bottom:14px"><h3 id="drillTitle" style="font-size:14px;color:var(--pu)"></h3><button onclick="document.getElementById('drillModal').style.display='none'" style="background:none;border:none;color:var(--rd);font-size:18px;cursor:pointer"></button></div><div id="drillContent" style="font-size:11px"></div></div></div>
<script>
function showTab(id){document.querySelectorAll('.tab').forEach(function(t){t.classList.remove('active')});document.querySelectorAll('.panel').forEach(function(p){p.classList.remove('active')});document.getElementById('tab-'+id).classList.add('active');event.target.classList.add('active')}
async function drill(type){
var m=document.getElementById('drillModal'),tt=document.getElementById('drillTitle'),ct=document.getElementById('drillContent');
m.style.display='flex';ct.innerHTML='<div style="text-align:center;padding:40px;color:var(--d)">Loading...</div>';
try{var html='';var r,d;
r=await fetch('/api/harvest-manager.php?action=stats');d=(await r.json()).data||{};
var total=d.total||<?=$_total?>;
if(type==='configs'||type==='winners'||type==='inbox'||type==='sent'||type==='untested'||type==='methods'){
var titles={configs:'🎰 All Configs',winners:'🏆 Winners (>70%)',inbox:'📊 Inbox Analysis',sent:'📤 Send Volume',untested:'❓ Untested Configs',methods:'📡 Methods Breakdown'};
tt.textContent=titles[type];
html+='<div style="display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-bottom:14px">';
html+='<div class="cd" style="text-align:center"><div style="font-size:20px;font-weight:700;color:var(--pu)"><?=$_total?></div><div class="l">Total Configs</div></div>';
html+='<div class="cd" style="text-align:center"><div style="font-size:20px;font-weight:700;color:var(--gn)"><?=$_winners?></div><div class="l">Winners</div></div>';
html+='<div class="cd" style="text-align:center"><div style="font-size:20px;font-weight:700;color:var(--cy)"><?=$_avgInbox?>%</div><div class="l">Avg Inbox</div></div></div>';
html+='<h4 style="margin:10px 0 8px;color:var(--d)">By Send Method</h4><table><thead><tr><th>Method</th><th>Configs</th><th>Avg Inbox</th><th>Total Sent</th></tr></thead><tbody>';
<?php foreach($_methods as $m):?>html+='<tr><td style="font-weight:600"><?=addslashes($m['send_method'])?></td><td class="mono"><?=$m['cnt']?></td><td class="mono"><?=$m['avg_inbox']??0?>%</td><td class="mono"><?=number_format($m['total_sent'])?></td></tr>';<?php endforeach;?>
html+='</tbody></table>';
html+='<h4 style="margin:12px 0 8px;color:var(--d)">By ISP Target</h4><table><thead><tr><th>ISP</th><th>Configs</th><th>Avg Inbox</th></tr></thead><tbody>';
<?php foreach($_isps as $i):?>html+='<tr><td style="font-weight:600"><?=addslashes($i['isp'])?></td><td class="mono"><?=$i['cnt']?></td><td class="mono"><?=$i['avg_inbox']??0?>%</td></tr>';<?php endforeach;?>
html+='</tbody></table>';
} else if(type==='detail'){
var cid=arguments[1]||0;
tt.textContent='⚙️ Config #'+cid+' Detail';
html+='<div class="cd" style="color:var(--d)">Config ID: <strong>'+cid+'</strong> — detailed performance metrics would be loaded here from brain_send_configs API.</div>';
}
ct.innerHTML=html;
}catch(e){ct.innerHTML='<div style="color:var(--rd)">'+e.message+'</div>';}
}
</script>
<script src="arsenal-common.js?v1770778169"></script>
<?php include("/opt/wevads-arsenal/public/universal-drill.html"); ?>
</body></html>