Files
html/dormant-dashboard.html

106 lines
5.5 KiB
HTML

<!DOCTYPE html>
<html lang="fr"><head>
<meta charset="UTF-8"><title>Dormant Capabilities · NO-DORMANT</title>
<style>
body{font-family:-apple-system,sans-serif;background:#0a0e27;color:#e4e8f7;margin:0;padding:24px}
h1{color:#6ba3ff;border-bottom:2px solid #1e3a8a;padding-bottom:8px}
h2{color:#c084fc;margin-top:24px}
.card{background:#141933;border:1px solid #263161;border-radius:8px;padding:16px;margin:12px 0}
.flex{display:flex;gap:16px;flex-wrap:wrap}.flex>div{flex:1;min-width:180px;text-align:center}
.num{font-size:28px;font-weight:bold;color:#6ba3ff}.lbl{color:#9ca8d3;font-size:12px;text-transform:uppercase}
table{width:100%;border-collapse:collapse}th,td{padding:8px 12px;border-bottom:1px solid #263161;text-align:left;font-size:13px}
th{background:#1e2549;color:#9ca8d3;font-size:11px;text-transform:uppercase}
.badge{padding:2px 8px;border-radius:4px;font-size:10px;font-weight:bold}
.dormant{background:#ef4444;color:#fff}.active{background:#10b981;color:#fff}.warn{background:#f59e0b;color:#fff}
a{color:#6ba3ff;text-decoration:none}a:hover{text-decoration:underline}
.loading{color:#9ca8d3;text-align:center;padding:20px}
.action{background:#1e3a8a;color:#fff;border:0;padding:4px 10px;border-radius:4px;cursor:pointer;font-size:11px}
.action:hover{background:#2950a7}
</style></head>
<body>
<h1>🛌 Dormant Capabilities · NO-DORMANT Doctrine</h1>
<p>Scan de tout ce qui dort sur la plateforme : open-source clones, services, containers stopped, tools non-utilisés. Doctrine nouvelle : <strong>ne rien laisser dormant</strong>.</p>
<h2>📊 Stats live</h2>
<div class="flex">
<div class="card"><div class="num" id="oss_total"></div><div class="lbl">OSS clones /opt</div></div>
<div class="card"><div class="num" id="oss_dormant"></div><div class="lbl">Dormants (>60j)</div></div>
<div class="card"><div class="num" id="svc_dormant"></div><div class="lbl">Services inactive</div></div>
<div class="card"><div class="num" id="docker_stopped"></div><div class="lbl">Docker stopped</div></div>
<div class="card"><div class="num" id="opt_size"></div><div class="lbl">/opt total</div></div>
</div>
<h2>🛌 Open-source clones dormants (>60 jours)</h2>
<div class="card" id="oss_list"><div class="loading">Chargement…</div></div>
<h2>🛌 Tous les OSS clones (actifs et dormants)</h2>
<div class="card" id="oss_all"><div class="loading">Chargement…</div></div>
<h2>🔧 Services inactive détectés</h2>
<div class="card" id="svc_list"><div class="loading">Chargement…</div></div>
<h2>📌 Actions suggérées</h2>
<div class="card">
<ul>
<li><strong>claw-code (1.2 GB, 2.5 ans)</strong> → Supprimer ou wake-up via <code>systemctl start claw-code.service</code></li>
<li><strong>aios (30M, 5 mois)</strong> → Évaluer intégration ou archiver</li>
<li><strong>keyhacks (480K, 1.9 ans)</strong> → Outil sécurité — intégrer dans audit sec ou archive</li>
<li><strong>deepagent (13M, 3 mois)</strong> → Voir si skills pertinents pour Paperclip</li>
<li>Créer cron hebdo <code>/opt/weval-ops/dormant-audit.sh</code> qui alerte si nouveau dormant</li>
</ul>
</div>
<h2>🔗 Liens</h2>
<div class="card">
<ul>
<li><a href="/api/dormant-scan.php" target="_blank">API JSON dormant-scan</a></li>
<li><a href="/doctrine-53.html">Doctrine 53 (parent)</a></li>
<li><a href="/wevia-ops-hub.html">Ops Hub</a></li>
<li><a href="/faq-knowledge-base.html">FAQ KB unifiée</a></li>
</ul>
</div>
<script>
fetch('/api/dormant-scan.php').then(r=>r.json()).then(d=>{
document.getElementById('oss_total').textContent = d.oss_total || '?';
document.getElementById('oss_dormant').textContent = d.oss_dormant || '0';
document.getElementById('svc_dormant').textContent = (d.services_dormant||[]).length;
document.getElementById('docker_stopped').textContent = (d.docker_stopped||[]).length;
document.getElementById('opt_size').textContent = d.opt_total_size || '?';
// OSS dormant only
const dormant = (d.oss_samples||[]).filter(o => o.dormant);
const dl = document.getElementById('oss_list');
if (dormant.length) {
dl.innerHTML = '<table><tr><th>Path</th><th>GitHub</th><th>Size</th><th>Age</th><th>Action</th></tr>'+
dormant.map(o => `<tr>
<td><code>${o.path}</code></td>
<td><a href="https://${o.remote.replace(':','/')}" target="_blank">${o.remote.split('/').slice(-2).join('/')}</a></td>
<td>${o.size}</td>
<td><span class="badge dormant">${o.age_days}j</span></td>
<td><button class="action" onclick="alert('TODO: wake ou archive '+${JSON.stringify(o.path)})">Réveiller</button></td>
</tr>`).join('')+'</table>';
} else dl.innerHTML = '<div class="loading">Aucun dormant (>60j)</div>';
// All OSS
const all = (d.oss_samples||[]);
const al = document.getElementById('oss_all');
al.innerHTML = '<table><tr><th>Path</th><th>Size</th><th>Age</th><th>Statut</th></tr>'+
all.map(o => `<tr>
<td><code>${o.path.split('/').filter(x=>x).pop()}</code></td>
<td>${o.size}</td>
<td>${o.age_days}j</td>
<td>${o.dormant? '<span class="badge dormant">DORMANT</span>':'<span class="badge active">ACTIF</span>'}</td>
</tr>`).join('')+'</table>';
// Services
const sl = document.getElementById('svc_list');
const svcs = d.services_dormant||[];
if (svcs.length) {
sl.innerHTML = '<table><tr><th>Service</th><th>État</th></tr>'+
svcs.map(s => `<tr><td><code>${s}</code></td><td><span class="badge warn">inactive</span></td></tr>`).join('')+'</table>';
} else sl.innerHTML = '<div class="loading">Aucun service inactive pertinent</div>';
}).catch(e=>console.error(e));
</script>
</body></html>