143 lines
14 KiB
HTML
Executable File
143 lines
14 KiB
HTML
Executable File
<!DOCTYPE html><html lang="fr"><head>
|
|
<meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>WEVADS - Cron Control Panel</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;--og:#fb923c}
|
|
*{margin:0;padding:0;box-sizing:border-box}body{background:var(--bg);color:var(--t);font-family:'DM Sans',sans-serif;font-size:11px}
|
|
.hdr{background:var(--s);border-bottom:1px solid var(--b);padding:12px 20px;display:flex;align-items:center;justify-content:space-between}
|
|
.hdr h1{font-size:16px;font-weight:700}.hdr h1 span{color:var(--pu)}
|
|
.wrap{padding:16px;max-width:1400px;margin:0 auto}
|
|
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:12px}
|
|
.grid4{display:grid;grid-template-columns:1fr 1fr 1fr 1fr;gap:8px}
|
|
.card{background:var(--s);border:1px solid var(--b);border-radius:10px;padding:16px;margin-bottom:12px;transition:.25s;position:relative;overflow:hidden}
|
|
.card:hover{transform:translateY(-1px);box-shadow:0 8px 24px rgba(0,0,0,.25)}
|
|
.btn{padding:6px 12px;border-radius:6px;border:1px solid var(--b);background:var(--s2);color:var(--t);cursor:pointer;font-size:10px;font-weight:600;transition:.2s}.btn:hover{border-color:var(--cy)}
|
|
.btn-gn{background:rgba(52,211,153,.15);border-color:var(--gn);color:var(--gn)}
|
|
.btn-rd{background:rgba(248,113,113,.15);border-color:var(--rd);color:var(--rd)}
|
|
.btn-am{background:rgba(251,191,36,.15);border-color:var(--am);color:var(--am)}
|
|
.btn-cy{background:rgba(34,211,238,.15);border-color:var(--cy);color:var(--cy)}
|
|
.btn-pu{background:rgba(167,139,250,.15);border-color:var(--pu);color:var(--pu)}
|
|
.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)}
|
|
.mono{font-family:'JetBrains Mono',monospace}
|
|
.cron-row{padding:6px 8px;border-bottom:1px solid rgba(30,41,59,.3);display:flex;align-items:center;gap:8px;font-size:10px}
|
|
.cron-row:hover{background:rgba(34,211,238,.05)}
|
|
.cron-active{border-left:3px solid var(--gn)}.cron-disabled{border-left:3px solid var(--rd);opacity:.6}.cron-frozen{border-left:3px solid var(--am);opacity:.7}
|
|
.log{background:var(--bg);border:1px solid var(--b);border-radius:6px;padding:8px;font-family:'JetBrains Mono',monospace;font-size:9px;max-height:200px;overflow-y:auto;white-space:pre-wrap}
|
|
#toast{position:fixed;bottom:20px;right:20px;padding:10px 18px;border-radius:8px;font-size:11px;font-weight:600;z-index:9999;display:none}
|
|
.toast-gn{background:rgba(52,211,153,.9);color:#000}.toast-rd{background:rgba(248,113,113,.9);color:#000}
|
|
@media(max-width:1000px){.grid2,.grid4{grid-template-columns:1fr}}
|
|
</style>
|
|
<link rel="stylesheet" href="wevads-global.css?v1770777318">
|
|
</head><body>
|
|
<div class="hdr"><div><h1>⏱ WEVADS • <span>Cron Control Panel</span></h1><p style="font-size:10px;color:var(--d);margin-top:4px">Gestion centralisée crons — tous serveurs — PMTA stoppé</p></div>
|
|
<div style="display:flex;gap:8px;align-items:center"><button class="btn btn-cy" onclick="scanAll()">🔍 Scan All</button><button class="btn btn-rd" onclick="emergencyStop()">🛑 Emergency Stop</button><span class="mono" style="font-size:11px;color:var(--d)" id="clock"></span></div></div>
|
|
<div class="wrap">
|
|
|
|
<!-- PMTA ALERT -->
|
|
<div class="card" style="border-color:var(--rd);background:rgba(248,113,113,.05)">
|
|
<div style="display:flex;align-items:center;gap:12px"><span style="font-size:18px">🛑</span><div><strong style="color:var(--rd)">PMTA STOPPÉ</strong> — pmtad killé + masqué + spool purgé (483K msgs, 896MB, 117 SMTP vers Microsoft IPv6 sans rDNS)<br><code class="mono" style="font-size:9px;color:var(--d)">Réactiver: sudo mv /usr/sbin/pmtad.STOPPED /usr/sbin/pmtad && sudo systemctl unmask pmta && sudo systemctl start pmta</code></div></div>
|
|
</div>
|
|
|
|
<!-- Server Cards -->
|
|
<div class="grid4" style="margin-bottom:12px">
|
|
<div class="card" style="border-left:3px solid var(--cy)"><strong style="color:var(--cy)">GXX WEVADS</strong><div class="mono" style="font-size:9px;color:var(--d)">89.167.40.150</div><div style="font-size:9px">4 actifs / 14 disabled / 2 frozen</div></div>
|
|
<div class="card" style="border-left:3px solid var(--gn)"><strong style="color:var(--gn)">OVH Tracking</strong><div class="mono" style="font-size:9px;color:var(--d)">151.80.235.110</div><div style="font-size:9px">0 crons | track.php UP</div></div>
|
|
<div class="card" style="border-left:3px solid var(--pu)"><strong style="color:var(--pu)">Consulting WEVIA</strong><div class="mono" style="font-size:9px;color:var(--d)">46.62.220.135</div><div style="font-size:9px">1 actif (RLHF) | WEVIA 1.3s</div></div>
|
|
<div class="card" style="border-left:3px solid var(--og)"><strong style="color:var(--og)">GPU Hetzner</strong><div class="mono" style="font-size:9px;color:var(--d)">88.198.4.195</div><div style="font-size:9px">1 actif (keepalive) | 10 models</div></div>
|
|
</div>
|
|
|
|
<div class="grid2">
|
|
<!-- GXX -->
|
|
<div class="card" style="border-left:3px solid var(--cy)">
|
|
<h3 style="font-size:12px;color:var(--cy);margin-bottom:10px">⏱ GXX WEVADS — 89.167.40.150</h3>
|
|
<div style="font-size:10px;font-weight:700;color:var(--gn);margin-bottom:4px">✅ ACTIFS (4)</div>
|
|
<div class="cron-row cron-active"><span class="mono" style="font-size:9px;flex:1">*/15 * * * *</span><span style="flex:2">IA rate-limit reset</span><span class="badge badge-gn">OK</span></div>
|
|
<div class="cron-row cron-active"><span class="mono" style="font-size:9px;flex:1">*/5 * * * *</span><span style="flex:2">PG watchdog</span><span class="badge badge-gn">OK</span></div>
|
|
<div class="cron-row cron-active"><span class="mono" style="font-size:9px;flex:1">*/1 * * * *</span><span style="flex:2">Crontab sync</span><span class="badge badge-gn">OK</span></div>
|
|
<div class="cron-row cron-active"><span class="mono" style="font-size:9px;flex:1">*/15 * * * *</span><span style="flex:2">WEVIA vectorize</span><span class="badge badge-gn">OK</span></div>
|
|
<div style="font-size:10px;font-weight:700;color:var(--rd);margin:10px 0 4px">🛑 SEND CRONS DÉSACTIVÉS (14)</div>
|
|
<div class="cron-row cron-disabled"><span style="flex:2">brain-productive send</span><span class="badge badge-rd">STANDBY</span></div>
|
|
<div class="cron-row cron-disabled"><span style="flex:2">brain-graph-api send</span><span class="badge badge-rd">ANTISPAM</span></div>
|
|
<div class="cron-row cron-disabled"><span style="flex:2">brain-graph-api check</span><span class="badge badge-rd">ANTISPAM</span></div>
|
|
<div class="cron-row cron-disabled"><span style="flex:2">brain-pmta-send send</span><span class="badge badge-rd">STANDBY</span></div>
|
|
<div class="cron-row cron-disabled"><span style="flex:2">brain-pipeline full</span><span class="badge badge-rd">ANTISPAM</span></div>
|
|
<div class="cron-row cron-disabled"><span style="flex:2">brain-tracking-seeds send</span><span class="badge badge-rd">ANTISPAM</span></div>
|
|
<div class="cron-row cron-disabled"><span style="flex:2">brain-tracking-seeds check_opens</span><span class="badge badge-rd">ANTISPAM</span></div>
|
|
<div class="cron-row cron-disabled"><span style="flex:2">warmup-engine execute</span><span class="badge badge-rd">FULL_STOP</span></div>
|
|
<div class="cron-row cron-disabled"><span style="flex:2">warmup-engine advance_day</span><span class="badge badge-rd">FULL_STOP</span></div>
|
|
<div class="cron-row cron-disabled"><span style="flex:2">warmup daily reset</span><span class="badge badge-rd">FULL_STOP</span></div>
|
|
<div class="cron-row cron-disabled"><span style="flex:2">brain-optimizer-cron</span><span class="badge badge-rd">FULL_STOP</span></div>
|
|
<div class="cron-row cron-disabled"><span style="flex:2">brain-creative-engine</span><span class="badge badge-rd">FULL_STOP</span></div>
|
|
<div class="cron-row cron-disabled"><span style="flex:2">brain-graph-api discover</span><span class="badge badge-rd">ANTISPAM</span></div>
|
|
<div class="cron-row cron-disabled"><span style="flex:2">sync-office-to-graph</span><span class="badge badge-rd">ANTISPAM</span></div>
|
|
<div style="font-size:10px;font-weight:700;color:var(--am);margin:10px 0 4px">🧊 GELÉS (2)</div>
|
|
<div class="cron-row cron-frozen"><span style="flex:2">sentinel-brain scan</span><span class="badge badge-am">FREEZE</span></div>
|
|
<div class="cron-row cron-frozen"><span style="flex:2">kb-sync-cron</span><span class="badge badge-am">FREEZE</span></div>
|
|
<div style="font-size:10px;font-weight:700;color:var(--pu);margin:10px 0 4px">🔧 SERVICES</div>
|
|
<div class="cron-row" style="border-left:3px solid var(--gn)"><span>Apache2 (5821+5890)</span><span class="badge badge-gn">UP</span></div>
|
|
<div class="cron-row" style="border-left:3px solid var(--gn)"><span>PostgreSQL 13</span><span class="badge badge-gn">UP</span></div>
|
|
<div class="cron-row" style="border-left:3px solid var(--gn)"><span>N8N (5678)</span><span class="badge badge-gn">UP</span></div>
|
|
<div class="cron-row" style="border-left:3px solid var(--rd)"><span>PMTA (pmtad)</span><span class="badge badge-rd">KILLED</span></div>
|
|
</div>
|
|
|
|
<!-- CONSULTING -->
|
|
<div class="card" style="border-left:3px solid var(--pu)">
|
|
<h3 style="font-size:12px;color:var(--pu);margin-bottom:10px">🌐 Consulting WEVIA — 46.62.220.135</h3>
|
|
<div style="font-size:10px;font-weight:700;color:var(--gn);margin-bottom:4px">✅ ACTIFS (1)</div>
|
|
<div class="cron-row cron-active"><span class="mono" style="font-size:9px;flex:1">*/30 * * * *</span><span style="flex:2">RLHF collect (WEVIA feedback)</span><span class="badge badge-gn">OK</span></div>
|
|
<div style="font-size:10px;font-weight:700;color:var(--pu);margin:10px 0 4px">🔧 SERVICES</div>
|
|
<div class="cron-row" style="border-left:3px solid var(--gn)"><span>Apache2 (80/443)</span><span class="badge badge-gn">UP</span></div>
|
|
<div class="cron-row" style="border-left:3px solid var(--gn)"><span>WEVIA API (5880) — 1.3s greetings</span><span class="badge badge-gn">UP</span></div>
|
|
<div class="cron-row" style="border-left:3px solid var(--gn)"><span>Node.js React (3001)</span><span class="badge badge-gn">UP</span></div>
|
|
<div class="cron-row" style="border-left:3px solid var(--gn)"><span>PostgreSQL wevia_db</span><span class="badge badge-gn">UP</span></div>
|
|
<div style="font-size:9px;color:var(--d);margin-top:8px;line-height:1.6;padding:6px;background:var(--bg);border-radius:4px">
|
|
<strong style="color:var(--pu)">WEVIA Optimisé 28 fév:</strong> KB 1699→116 | Cerebras gpt-oss-120b | Groq fast-path 1.3s | 43/43 endpoints
|
|
</div>
|
|
|
|
<h3 style="font-size:12px;color:var(--gn);margin:16px 0 10px">📡 OVH Tracking — 151.80.235.110</h3>
|
|
<div style="font-size:10px;color:var(--d);margin-bottom:4px">1 cron actif (tracking_monitor) — serveur tracking uniquement</div>
|
|
<div class="cron-row" style="border-left:3px solid var(--gn)"><span>track.php / open.php / click.php</span><span class="badge badge-gn">UP</span></div>
|
|
<div class="cron-row" style="border-left:3px solid var(--gn)"><span>conversion.php (postback CX3/DoubleM)</span><span class="badge badge-gn">UP</span></div>
|
|
|
|
<h3 style="font-size:12px;color:var(--og);margin:16px 0 10px">🖥 GPU Hetzner — 88.198.4.195</h3>
|
|
<div style="font-size:10px;font-weight:700;color:var(--gn);margin-bottom:4px">✅ ACTIFS (1)</div>
|
|
<div class="cron-row cron-active"><span class="mono" style="font-size:9px;flex:1">*/5 * * * *</span><span style="flex:2">Ollama keepalive (deepseek-r1-fast)</span><span class="badge badge-gn">OK</span></div>
|
|
<div style="font-size:10px;font-weight:700;color:var(--og);margin:10px 0 4px">🤖 10 MODELS OLLAMA</div>
|
|
<div style="font-size:9px;color:var(--d);line-height:1.6">wevia-sovereign • deepseek-r1-turbo • deepseek-r1-fast • deepseek-r1:32b (19GB) • nomic-embed-text • moondream (vision) • qwen2.5-coder:14b • deepseek-r1:14b • llama3.1:8b • deepseek-r1:8b</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Quick Actions -->
|
|
<div class="card" style="margin-top:8px">
|
|
<h3 style="font-size:12px;margin-bottom:8px;color:var(--cy)">⚡ Actions</h3>
|
|
<div style="display:flex;flex-wrap:wrap;gap:6px">
|
|
<button class="btn btn-cy" onclick="exec('crontab -l | grep -c -v \"^#\"')">📊 Active Crons</button>
|
|
<button class="btn btn-gn" onclick="exec('systemctl status postgresql | head -3')">🐘 PG Status</button>
|
|
<button class="btn btn-am" onclick="exec('ss -tn | grep :25 | wc -l')">📧 SMTP Count</button>
|
|
<button class="btn btn-rd" onclick="exec('ps aux | grep pmtad | grep -v grep | wc -l')">🛑 PMTA?</button>
|
|
<button class="btn btn-pu" onclick="exec('df -h / | tail -1')">💾 Disk</button>
|
|
</div>
|
|
<div class="log" id="cmd-log" style="margin-top:8px;display:none"></div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="toast"></div>
|
|
<script>
|
|
async function exec(cmd) {
|
|
const l=document.getElementById('cmd-log'); l.style.display='block';
|
|
l.innerHTML+=`<span style="color:var(--d)">[${new Date().toLocaleTimeString()}]</span> → ${cmd}\n`;
|
|
try {
|
|
const fd=new FormData(); fd.append('action','exec'); fd.append('cmd',cmd);
|
|
const r=await fetch('/api/sentinel-brain.php',{method:'POST',body:fd});
|
|
const d=await r.json();
|
|
l.innerHTML+=`← ${(d.output||'').substring(0,500)}\n`;
|
|
} catch(e) { l.innerHTML+=`❌ ${e.message}\n`; }
|
|
l.scrollTop=l.scrollHeight;
|
|
}
|
|
function scanAll(){exec('crontab -l | grep -v "^#" | grep -v "^$"');}
|
|
function emergencyStop(){if(confirm('⚠️ STOP ALL CRONS?')){exec('crontab -l > /opt/wevads/crontab-emergency.bak && echo "# EMERGENCY STOP" | crontab -');}}
|
|
setInterval(()=>{document.getElementById('clock').textContent=new Date().toLocaleTimeString();},1000);
|
|
</script>
|
|
</body></html>
|