Files
html/infra-command.html

263 lines
18 KiB
HTML

<!DOCTYPE html><html lang="fr"><head><meta charset="UTF-8"><title>WEVAL Infrastructure Command</title>
<link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;700&family=Outfit:wght@300;500;700;900&display=swap" rel="stylesheet">
<style>
:root{--bg:#06080f;--card:#111827;--border:#1e293b;--text:#c8d0e0;--dim:#64748b;--accent:#818cf8;--green:#34d399;--red:#f87171;--yellow:#fbbf24;--blue:#60a5fa}
*{margin:0;padding:0;box-sizing:border-box}body{font-family:'Outfit',sans-serif;background:var(--bg);color:var(--text);min-height:100vh}
.top{background:linear-gradient(135deg,#0d1117,#161b28);padding:20px 28px;border-bottom:1px solid var(--border);display:flex;align-items:center;justify-content:space-between;position:sticky;top:0;z-index:100}
.top h1{font-size:1.4em;font-weight:900;background:linear-gradient(90deg,#818cf8,#c084fc);-webkit-background-clip:text;-webkit-text-fill-color:transparent}
.top .pills{display:flex;gap:8px}.pill{background:var(--card);padding:6px 14px;border-radius:6px;font-size:.75em;border:1px solid var(--border);cursor:pointer}.pill.on{background:var(--accent);color:#fff;border-color:var(--accent)}
.wrap{max-width:1400px;margin:0 auto;padding:20px}
.sec{margin-bottom:28px}.sec-t{font-size:1em;font-weight:700;color:var(--accent);margin-bottom:10px;display:flex;align-items:center;gap:8px;padding-bottom:6px;border-bottom:1px solid var(--border)}
.g{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:12px}
.c{background:var(--card);border:1px solid var(--border);border-radius:10px;padding:16px;transition:.15s}.c:hover{border-color:var(--accent)}
.c h3{font-size:.9em;color:#f1f5f9;margin-bottom:4px}.c .sub{font-size:.7em;color:var(--dim);margin-bottom:8px}
.c .ports{display:flex;flex-wrap:wrap;gap:4px;margin:6px 0}
.port{font-family:'JetBrains Mono',monospace;font-size:.65em;padding:2px 6px;border-radius:3px;background:#0d1117;color:var(--green);border:1px solid #065f46}
.port.dead{color:var(--red);border-color:#7f1d1d;background:#1a0505}
.c .info{font-size:.75em;color:var(--dim);line-height:1.5}
.c .cred{font-family:'JetBrains Mono',monospace;font-size:.65em;color:var(--yellow);background:#1a1a2e;padding:2px 6px;border-radius:3px;display:inline-block;margin:2px 0}
.c a.btn{display:inline-block;padding:4px 10px;background:var(--accent);color:#fff;border-radius:5px;text-decoration:none;font-size:.7em;font-weight:600;margin-top:6px}
.status{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:4px}.up{background:var(--green)}.down{background:var(--red)}.warn{background:var(--yellow)}
table{width:100%;border-collapse:collapse;font-size:.8em;margin-top:8px}th{text-align:left;padding:6px 8px;background:#0d1117;color:var(--dim);font-size:.7em;text-transform:uppercase}td{padding:5px 8px;border-bottom:1px solid #0d1117}
.mono{font-family:'JetBrains Mono',monospace;font-size:.75em}
</style></head><body>
<div class="top">
<h1>WEVAL Infrastructure Command</h1>
<div class="pills">
<a class="pill on" href="/weval-master-inventory.html">Inventory</a>
<a class="pill" href="/tools-hub.html">Tools Hub</a>
<a class="pill" href="/command-center.html">CC (32)</a>
<a class="pill" href="/mega-command-center.html">Mega CC</a>
<a class="pill" href="/wevia-ia/wevia-cyber-monitor.php">Cyber</a>
</div>
</div>
<div class="wrap">
<!-- S204 -->
<div class="sec"><div class="sec-t">🖥️ S204 — PRIMARY (204.168.152.13) — 38 ports</div>
<div class="g">
<div class="c">
<h3><span class="status up"></span>Nginx + PHP-FPM 8.5</h3>
<div class="sub">Web server + application engine</div>
<div class="ports"><span class="port">:80</span><span class="port">:443</span><span class="port">:49222 SSH</span></div>
<div class="info">116 pages • 14 APIs • Chatbot WEVIA (245ms Groq)</div>
<div class="cred">root / FLVhtCX47w3e • SSH -p 49222</div>
</div>
<div class="c">
<h3><span class="status up"></span>PMTA v5.0r3</h3>
<div class="sub">PowerMTA mail server</div>
<div class="ports"><span class="port">:25 SMTP</span></div>
<div class="info">Smart routing: Gmail→bcg_local, others→MTA-EU relay (89.167.1.139)</div>
</div>
<div class="c">
<h3><span class="status up"></span>Ollama (9 models, 33GB)</h3>
<div class="sub">Local LLM inference</div>
<div class="ports"><span class="port">:11434</span></div>
<div class="info">glm4:9b(5.5G) meditron(3.8G) medllama2(3.8G) granite4(2.1G) qwen3:8b(5.2G) qwen3:4b(2.5G) qwen3.5:0.8b(1G) qwen2.5:7b(4.7G) mistral(4.4G)</div>
</div>
<div class="c">
<h3><span class="status up"></span>Docker (15 containers)</h3>
<div class="sub">Application services</div>
<div class="ports"><span class="port">:3000 Twenty</span><span class="port">:3088 Kuma</span><span class="port">:3100 Loki</span><span class="port">:5432 PG</span><span class="port">:5678 n8n</span><span class="port">:6333 Qdrant</span><span class="port">:8065 Mattermost</span><span class="port">:8080 SearXNG</span><span class="port">:8222 Vault</span><span class="port">:8443 Authentik</span><span class="port">:9000 Authentik-w</span><span class="port">:9300 Plausible</span></div>
<table>
<tr><th>Container</th><th>Port</th><th>URL</th><th>Status</th></tr>
<tr><td>uptime-kuma</td><td>3088</td><td><a href="https://monitor.weval-consulting.com" target="_blank" class="mono">monitor.weval-consulting.com</a></td><td><span class="status up"></span>UP</td></tr>
<tr><td>plausible</td><td>9300</td><td><a href="https://analytics.weval-consulting.com" target="_blank" class="mono">analytics.weval-consulting.com</a></td><td><span class="status up"></span>UP</td></tr>
<tr><td>authentik</td><td>8443</td><td><a href="https://auth.weval-consulting.com" target="_blank" class="mono">auth.weval-consulting.com</a></td><td><span class="status up"></span>UP</td></tr>
<tr><td>n8n</td><td>5678</td><td class="mono">:5678 (internal)</td><td><span class="status up"></span>UP</td></tr>
<tr><td>vaultwarden</td><td>8222</td><td class="mono">:8222 (internal)</td><td><span class="status up"></span>UP</td></tr>
<tr><td>mattermost</td><td>8065</td><td class="mono">:8065 (internal)</td><td><span class="status up"></span>UP</td></tr>
<tr><td>searxng</td><td>8080</td><td class="mono">:8080 (localhost)</td><td><span class="status up"></span>UP</td></tr>
<tr><td>qdrant</td><td>6333</td><td class="mono">:6333 (localhost)</td><td><span class="status up"></span>UP</td></tr>
<tr><td>loki</td><td>3100</td><td class="mono">:3100 (localhost)</td><td><span class="status up"></span>UP</td></tr>
<tr><td>twenty-crm</td><td>3000</td><td class="mono">:3000 (crm.weval-consulting.com)</td><td><span class="status down"></span>UP</td></tr>
<tr><td>ollama</td><td>11434</td><td class="mono">:11434 (localhost)</td><td><span class="status up"></span>UP</td></tr>
</table>
</div>
<div class="c">
<h3><span class="status up"></span>Node.js + CrowdSec</h3>
<div class="sub">weval-api.service + WAF</div>
<div class="ports"><span class="port">:3001 Node</span><span class="port">:6060 CS</span><span class="port">:8787</span><span class="port">:8888</span></div>
<div class="info">CrowdSec active • Nuclei 0 vulns</div>
</div>
<div class="c">
<h3><span class="status up"></span>CLI Tools</h3>
<div class="sub">Kilo 7.1.0 + Hermes 27 skills</div>
<div class="info">
<code class="mono">sudo HOME=/root kilo</code> — 500+ models, orchestrator<br>
<code class="mono">sudo HOME=/root hermes</code> — autonomous agent, memory, */30 sync<br>
<code class="mono">nuclei -u domain</code> — security scanner v3.3.7
</div>
</div>
</div></div>
<!-- S95 -->
<div class="sec"><div class="sec-t">⚡ S95 — WEVADS (95.216.167.89 / 10.1.0.3) — 10 ports</div>
<div class="g">
<div class="c">
<h3><span class="status up"></span>Arsenal + Sentinel (:5890)</h3>
<div class="sub">190 screens + Sentinel Brain API + 63 crons</div>
<div class="ports"><span class="port">:5890</span></div>
<div class="cred">admin@local.com / Wevads2026</div>
<a class="btn" href="https://wevads.weval-consulting.com/auth/login.html" target="_blank">Arsenal Login</a>
<a class="btn" href="https://wevads.weval-consulting.com/cron-control-all.html" target="_blank">68 Crons</a>
</div>
<div class="c">
<h3><span class="status up"></span>ADX iResponse (:5821)</h3>
<div class="sub">168 screens, email platform</div>
<div class="ports"><span class="port">:5821</span></div>
<div class="cred">admin@local.com / Wevads2026</div>
<div class="info">Accessible via wevads.weval-consulting.com (CF proxy)</div>
</div>
<div class="c">
<h3><span class="status up"></span>FMG / BCG / DKIM / Tracking</h3>
<div class="sub">Client apps + email infra</div>
<div class="ports"><span class="port">:5822 FMG</span><span class="port">:5823 BCG</span><span class="port">:5824 DKIM</span><span class="port">:58421 FMG-Track</span><span class="port">:58423 BCG-Track</span></div>
</div>
<div class="c">
<h3><span class="status up"></span>PostgreSQL</h3>
<div class="sub">adx_system + adx_clients (6.65M contacts)</div>
<div class="ports"><span class="port">:5432</span></div>
<div class="cred">admin / admin123</div>
<div class="info">7 users • Ethica: 49K+ HCPs (table ethica.medecins_real)</div>
</div>
</div></div>
<!-- S151 -->
<div class="sec"><div class="sec-t">🌍 S151 — DR OVH (151.80.235.110) — 2 services</div>
<div class="g">
<div class="c">
<h3><span class="status up"></span>Consent + Tracking</h3>
<div class="sub">OVH disaster recovery</div>
<div class="ports"><span class="port">:443 consent.wevup.app</span><span class="port">:443 track.wevup.app</span></div>
<div class="cred">SSH ubuntu / REDACTED_SSH</div>
<div class="info">Domain: culturellemejean.charity (NEVER for Ethica)</div>
<a class="btn" href="https://consent.wevup.app" target="_blank">Consent</a>
<a class="btn" href="https://track.wevup.app" target="_blank">Track</a>
</div>
</div></div>
<!-- RAZER BLADE -->
<div class="sec"><div class="sec-t">💻 Razer Blade — Workstation locale</div>
<div class="g">
<div class="c" style="border-left:3px solid #22c55e">
<h3><span class="status up"></span>Razer Blade Laptop</h3>
<div class="sub">Station de travail dev/ops Yacine</div>
<div class="info">
<b>OS:</b> Windows 11 Pro<br>
<b>Usage:</b> SSH vers S204/S95/S151, Cursor IDE, navigateur pour Arsenal/Kuma/Analytics<br>
<b>SSH shortcuts:</b><br>
<code class="mono">ssh root@204.168.152.13 -p 49222</code> — S204<br>
<code class="mono">ssh root@95.216.167.89</code> — S95 (pwd: R4UnNNWmidH7)<br>
<code class="mono">ssh ubuntu@151.80.235.110</code> — S151<br>
<b>Tools locaux:</b> PowerShell/GWS CLI, Git, Node.js, Python
</div>
</div>
<div class="c" style="border-left:3px solid #22c55e">
<h3><span class="status up"></span>Disque Dur Externe</h3>
<div class="sub">Backup local + assets</div>
<div class="info">
<b>Contenu:</b> Backups GOLD, snapshots DB, assets marketing, templates Ethica, archives WEVADS<br>
<b>Rotation:</b> Backup hebdomadaire depuis S204 + S95 via rsync<br>
<code class="mono">rsync -avz -e "ssh -p 49222" root@204.168.152.13:/opt/wevads/vault/ /mnt/backup/vault/</code><br>
<code class="mono">rsync -avz root@95.216.167.89:/opt/wevads/vault/ /mnt/backup/s95-vault/</code>
</div>
</div>
</div></div>
<!-- CLOUD PROVIDERS -->
<div class="sec"><div class="sec-t">☁️ Cloud Providers — Chatbot Cascade</div>
<div class="g">
<div class="c"><h3><span class="status up"></span>Groq (DEFAULT — position 1)</h3><div class="sub">llama-3.3-70b-versatile • 245ms avg</div><div class="cred">REDACTED_USE_SECRETS_ENV</div><a class="btn" href="https://console.groq.com" target="_blank">Console</a></div>
<div class="c"><h3><span class="status up"></span>Mistral (position 2)</h3><div class="sub">mistral-medium • Claude 2 fix: clé trouvée</div><div class="cred">0JBySAtEKlM8CKgE3zh8uDYGQVhdMa6M</div><a class="btn" href="https://console.mistral.ai" target="_blank">Console</a></div>
<div class="c"><h3><span class="status up"></span>Cerebras (position 3)</h3><div class="sub">llama-3.3-70b • Ultra-fast backup</div><div class="cred">csk-4wrrhkpr568ry9xx49k9mcynwdx483nx53dd62yh5xedfckh</div><a class="btn" href="https://cloud.cerebras.ai" target="_blank">Console</a></div>
<div class="c"><h3><span class="status up"></span>OpenRouter (wired)</h3><div class="sub">Multi-model free tier (rate-limited)</div><div class="cred">REDACTED_KEY</div><a class="btn" href="https://openrouter.ai/settings/keys" target="_blank">Keys</a></div>
<div class="c"><h3><span class="status warn"></span>GLM-5 Zhipu (0 credits)</h3><div class="sub">glm-4-plus • Needs top-up</div><div class="cred">ac5091ee149e440789ba38c7870022a7.66nRzzOT9JmWGdv4</div><a class="btn" href="https://open.bigmodel.cn" target="_blank">Top-up</a></div>
</div></div>
<!-- CAPABILITIES -->
<div class="sec"><div class="sec-t">🧠 WEVIA Capabilities (29 total)</div>
<div class="g">
<div class="c"><h3>Core Services (10/10 UP)</h3><div class="info">SearXNG, Qdrant, Ollama, n8n, Plausible, Kuma, Loki, Mattermost, Vaultwarden, Ollama S151</div><a class="btn" href="/api/wevia-capabilities.php?cap=health" target="_blank">Health Check</a></div>
<div class="c"><h3>Extended Caps (17 dormant→active)</h3><div class="info">TTS(151L), Voice(148L), Vision(135L), PDF(852L), Charts(153L), Repair(174L), Consensus(167L), Planner(132L), GPU-Rotation(551L), SSH(103L), Webhook(58L), Nexus(160L), French(164L), collecte, OpenClaw, WEVADS bridge, ToolFK(12 tools)</div><a class="btn" href="/api/wevia-capabilities-ext.php?cap=list" target="_blank">Full List</a></div>
<div class="c"><h3>ToolFK External (12 tools)</h3><div class="info">JS obfuscate, PHP encrypt, AI image, OCR, QR code, Image compress, Regex, DNS, PDF convert, Barcode, URL shorten, SQL design</div><div class="cred">Token: n5LpZaQt517aQA69Rt3OlD2OHc77fcc6NU0YNRkb</div><a class="btn" href="https://toolfk.com" target="_blank">ToolFK.com</a></div>
</div></div>
<!-- EXTERNAL -->
<div class="sec"><div class="sec-t">🔗 External Services</div>
<div class="g">
<div class="c"><h3><span class="status up"></span>CodeRabbit</h3><div class="sub">AI PR review on GitHub</div><a class="btn" href="https://app.coderabbit.ai" target="_blank">Dashboard</a></div>
<div class="c"><h3><span class="status up"></span>Hetzner Cloud</h3><div class="sub">S204 #116787382 + S95 #121486089</div><div class="cred">Token: REDACTED_HETZNER</div><a class="btn" href="https://console.hetzner.cloud" target="_blank">Console</a></div>
<div class="c"><h3><span class="status up"></span>Cloudflare</h3><div class="sub">Zone 1488bbba251c6fa282999fcc09aac9fe</div><div class="cred">ymahboub@weval-consulting.com / Key 9eb8d1...70291</div><a class="btn" href="https://dash.cloudflare.com" target="_blank">Dashboard</a></div>
<div class="c"><h3><span class="status up"></span>GitHub</h3><div class="sub">Yacineutt/weval-consulting + wevia-brain</div><div class="cred">PAT REDACTED_KEY (exp 28-mars-2026)</div><a class="btn" href="https://github.com/Yacineutt" target="_blank">Repos</a></div>
<div class="c"><h3><span class="status up"></span>Piebald / Claude Code Prompts</h3><div class="sub">24 system prompts (v2.1.81)</div><div class="info">9 Agent + 3 Skill + 8 System = 21 Claude Code + 3 WEVAL original</div></div>
</div></div>
<p style="text-align:center;margin-top:24px;color:#475569;font-size:.7em">WEVAL Consulting — Sprint 23 Mars 2026 — 570+ screens • 29 capabilities • 9 Ollama • 38+10+2 ports</p>
</div>
<!-- === OPUS UNIVERSAL DRILL-DOWN v1 19avr — append-only, doctrine #14 === -->
<script>
(function(){
if (window.__opusUniversalDrill) return; window.__opusUniversalDrill = true;
var d = document;
var m = d.createElement('div');
m.id = 'opus-udrill';
m.style.cssText = 'position:fixed;inset:0;background:rgba(0,0,0,0.82);backdrop-filter:blur(6px);display:none;align-items:center;justify-content:center;z-index:99995;padding:20px;cursor:pointer';
var inner = d.createElement('div');
inner.id = 'opus-udrill-in';
inner.style.cssText = 'max-width:900px;width:100%;max-height:90vh;overflow:auto;background:#0b0d15;border:1px solid rgba(99,102,241,0.35);border-radius:14px;padding:28px;cursor:default;box-shadow:0 20px 60px rgba(0,0,0,0.6);color:#e2e8f0;font:14px/1.55 Inter,system-ui,sans-serif';
inner.addEventListener('click', function(e){ e.stopPropagation(); });
m.appendChild(inner);
m.addEventListener('click', function(){ m.style.display='none'; });
d.addEventListener('keydown', function(e){ if(e.key==='Escape') m.style.display='none'; });
(d.body || d.documentElement).appendChild(m);
function openCard(card) {
// Clone card content + show close btn + increase font-size
var html = '<div style="display:flex;justify-content:flex-end;margin-bottom:14px"><button id="opus-udrill-close" style="padding:6px 14px;background:#171b2a;border:1px solid rgba(99,102,241,0.25);color:#e2e8f0;border-radius:8px;cursor:pointer;font-size:12px">✕ Fermer (Esc)</button></div>';
html += '<div style="transform-origin:top left;font-size:1.05em">' + card.outerHTML + '</div>';
inner.innerHTML = html;
d.getElementById('opus-udrill-close').onclick = function(){ m.style.display='none'; };
m.style.display = 'flex';
}
function wire(root) {
var sels = '.card,[class*="card"],.kpi,[class*="kpi"],.stat,[class*="stat"],.tile,[class*="tile"],.metric,[class*="metric"],.widget,[class*="widget"]';
var cards = root.querySelectorAll(sels);
for (var i = 0; i < cards.length; i++) {
var c = cards[i];
if (c.__opusWired) continue;
if (c.closest('button, a, input, select, textarea, #opus-udrill')) continue;
var r = c.getBoundingClientRect();
if (r.width < 60 || r.height < 40) continue;
c.__opusWired = true;
c.style.cursor = 'pointer';
c.setAttribute('role','button');
c.setAttribute('tabindex','0');
c.addEventListener('click', function(ev){
// If a more-specific drill is already active (e.g. pp-card custom), let it handle
if (ev.target.closest('[data-pp-id]') && window.__opusDrillInit) return;
if (ev.target.closest('a,button,input,select')) return;
ev.preventDefault(); ev.stopPropagation();
openCard(this);
});
c.addEventListener('keydown', function(ev){ if(ev.key==='Enter'||ev.key===' '){ev.preventDefault();openCard(this);} });
}
}
// Initial + mutation observer
var initRun = function(){ wire(d.body || d.documentElement); };
if (d.readyState === 'loading') d.addEventListener('DOMContentLoaded', initRun);
else initRun();
var mo = new MutationObserver(function(muts){
var newCard = false;
for (var i=0;i<muts.length;i++) if (muts[i].addedNodes.length) { newCard = true; break; }
if (newCard) initRun();
});
mo.observe(d.body || d.documentElement, {childList:true, subtree:true});
})();
</script>
<!-- === OPUS UNIVERSAL DRILL-DOWN END === -->
</body></html>