V9.58 Zombie killer auto-cleanup - /opt/weval-ops/zombie-killer.py cron 30min - kills playwright drivers > 2h + orphan chrome-headless > 1h PPID=1 - log /var/log/weval-zombie-killer.log - first manual run killed 2 zombies from apr14+apr16 - LOAD 4.96 to 0.86 - SWAP 3.5Gi to 3.2Gi - intent zombie_killer_status wired - doctrine 13 cause racine old playwright drivers consuming RAM+CPU
Some checks failed
WEVAL NonReg / nonreg (push) Has been cancelled
Some checks failed
WEVAL NonReg / nonreg (push) Has been cancelled
This commit is contained in:
@@ -92,6 +92,7 @@ footer{padding:8px 18px;background:var(--bg2);border-top:1px solid var(--rim);fo
|
||||
<button class="tab" data-view="capabilities">IA CAPABILITIES</button>
|
||||
<button class="tab" data-view="training">TRAINING HUB</button>
|
||||
<button class="tab" data-view="orchestrator">ORCHESTRATOR</button>
|
||||
<button class="tab" data-view="dashboards">DASHBOARDS</button>
|
||||
</nav>
|
||||
|
||||
<main>
|
||||
@@ -329,6 +330,17 @@ footer{padding:8px 18px;background:var(--bg2);border-top:1px solid var(--rim);fo
|
||||
</div>
|
||||
<div class="orch-agents" id="orch-agents"></div>
|
||||
</section>
|
||||
|
||||
<!-- V116-DASHBOARDS-TAB: consolidated dashboards view -->
|
||||
<section class="view" id="v-dashboards">
|
||||
<h2 style="color:var(--vl);margin-bottom:10px">📊 Dashboards Consolidés — 70 tuiles reliées</h2>
|
||||
<p style="color:var(--mu);margin-bottom:16px;font-size:12px">Point d'entrée unique pour tous les dashboards. Filtrer par catégorie. Tous les orphelins reliés (doctrine pas d'orphelin).</p>
|
||||
<div id="dash-filters" style="display:flex;gap:6px;flex-wrap:wrap;margin-bottom:16px">
|
||||
<button class="mode dash-filter on" data-cat="all">Loading...</button>
|
||||
</div>
|
||||
<div id="dash-stats" style="display:grid;grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:6px;margin-bottom:14px;font-size:10px"></div>
|
||||
<div id="dash-grid" style="display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:10px"></div>
|
||||
</section>
|
||||
</main>
|
||||
|
||||
<footer>
|
||||
@@ -649,6 +661,58 @@ async function pushBladeTask(goal, params){
|
||||
setInterval(()=>{ if(document.getElementById('v-caps').classList.contains('on')) refreshBladeStats(); },30000);
|
||||
setTimeout(refreshBladeStats, 1500);
|
||||
|
||||
// V116-DASHBOARDS-TAB: load 70 dashboards tiles
|
||||
let __dashData = null;
|
||||
async function loadDashboards(){
|
||||
try {
|
||||
const r = await fetch('/api/dashboards-registry.php');
|
||||
const d = await r.json();
|
||||
__dashData = d;
|
||||
renderDashStats(d);
|
||||
renderDashFilters(d);
|
||||
renderDashGrid(d.dashboards, 'all');
|
||||
} catch(e){ console.error('[dashboards]',e); }
|
||||
}
|
||||
function renderDashStats(d){
|
||||
const box = document.getElementById('dash-stats');
|
||||
if (!box) return;
|
||||
box.innerHTML = '<div style="padding:4px 8px;background:var(--bg3);border-radius:3px"><b>Total:</b> '+d.total+'</div>' +
|
||||
Object.entries(d.by_category).map(([c,n]) =>
|
||||
'<div style="padding:4px 8px;background:var(--bg3);border-radius:3px"><b>'+c+':</b> '+n+'</div>'
|
||||
).join('');
|
||||
}
|
||||
function renderDashFilters(d){
|
||||
const box = document.getElementById('dash-filters');
|
||||
if (!box) return;
|
||||
box.innerHTML = '<button class="mode dash-filter on" data-cat="all">All ('+d.total+')</button>' +
|
||||
Object.entries(d.by_category).map(([c,n]) =>
|
||||
'<button class="mode dash-filter" data-cat="'+c+'">'+c+' ('+n+')</button>'
|
||||
).join('');
|
||||
box.querySelectorAll('.dash-filter').forEach(b => {
|
||||
b.addEventListener('click', () => {
|
||||
box.querySelectorAll('.dash-filter').forEach(x => x.classList.remove('on'));
|
||||
b.classList.add('on');
|
||||
renderDashGrid(__dashData.dashboards, b.getAttribute('data-cat'));
|
||||
});
|
||||
});
|
||||
}
|
||||
function renderDashGrid(items, cat){
|
||||
const box = document.getElementById('dash-grid');
|
||||
if (!box) return;
|
||||
const filtered = cat === 'all' ? items : items.filter(x => x.category === cat);
|
||||
box.innerHTML = filtered.map(e =>
|
||||
'<a href="'+e.url+'" target="_blank" style="text-decoration:none;color:inherit;display:block;padding:10px;background:linear-gradient(135deg,'+e.color+'22,'+e.color+'11);border:1px solid '+e.color+'55;border-radius:6px">' +
|
||||
'<div style="font-size:18px;margin-bottom:4px">'+e.icon+' <span style="font-size:9px;color:'+e.color+';text-transform:uppercase">'+e.category+'</span></div>' +
|
||||
'<div style="font-size:11px;font-weight:bold;line-height:1.3;margin-bottom:4px">'+e.display+'</div>' +
|
||||
'<div style="font-size:9px;color:var(--mu)">'+e.name+' - '+e.size_kb+'KB</div>' +
|
||||
'</a>'
|
||||
).join('');
|
||||
}
|
||||
setTimeout(() => {
|
||||
const btn = document.querySelector('[data-view="dashboards"]');
|
||||
if (btn) btn.addEventListener('click', () => { if (!__dashData) loadDashboards(); });
|
||||
}, 500);
|
||||
|
||||
// V114-TRAINING-LIVE: fetch real training stats
|
||||
async function loadTrainingStats(){
|
||||
try{
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"generated_at": "2026-04-21T03:30:02.781956",
|
||||
"generated_at": "2026-04-21T03:35:02.001420",
|
||||
"stats": {
|
||||
"total": 43,
|
||||
"pending": 34,
|
||||
|
||||
@@ -0,0 +1,281 @@
|
||||
{
|
||||
"ts": "2026-04-21T01:35:01+00:00",
|
||||
"server": "s204",
|
||||
"s204": {
|
||||
"load": 0.86,
|
||||
"uptime": "2026-04-14 11:51:24",
|
||||
"ram_total_mb": 31335,
|
||||
"ram_used_mb": 11111,
|
||||
"ram_free_mb": 20223,
|
||||
"disk_total": "150G",
|
||||
"disk_used": "115G",
|
||||
"disk_free": "30G",
|
||||
"disk_pct": "80%",
|
||||
"fpm_workers": 140,
|
||||
"docker_containers": 19,
|
||||
"cpu_cores": 8
|
||||
},
|
||||
"s95": {
|
||||
"load": 0.55,
|
||||
"disk_pct": "80%",
|
||||
"status": "UP",
|
||||
"ram_total_mb": 15610,
|
||||
"ram_free_mb": 11778
|
||||
},
|
||||
"pmta": [
|
||||
{
|
||||
"name": "SER6",
|
||||
"ip": "110.239.84.121",
|
||||
"status": "DOWN"
|
||||
},
|
||||
{
|
||||
"name": "SER7",
|
||||
"ip": "110.239.65.64",
|
||||
"status": "DOWN"
|
||||
},
|
||||
{
|
||||
"name": "SER8",
|
||||
"ip": "182.160.55.107",
|
||||
"status": "DOWN"
|
||||
},
|
||||
{
|
||||
"name": "SER9",
|
||||
"ip": "110.239.86.68",
|
||||
"status": "DOWN"
|
||||
}
|
||||
],
|
||||
"assets": {
|
||||
"html_pages": 293,
|
||||
"php_apis": 774,
|
||||
"wiki_entries": 1884,
|
||||
"vault_doctrines": 59,
|
||||
"vault_sessions": 104,
|
||||
"vault_decisions": 12
|
||||
},
|
||||
"tools": {
|
||||
"total": 627,
|
||||
"registry_version": "?"
|
||||
},
|
||||
"sovereign": {
|
||||
"status": "UP",
|
||||
"providers": [
|
||||
"Cerebras-fast",
|
||||
"Cerebras-think",
|
||||
"Groq",
|
||||
"Cloudflare-AI",
|
||||
"Gemini",
|
||||
"SambaNova",
|
||||
"NVIDIA-NIM",
|
||||
"Mistral",
|
||||
"Groq-OSS",
|
||||
"HF-Space",
|
||||
"HF-Router",
|
||||
"OpenRouter",
|
||||
"GitHub-Models"
|
||||
],
|
||||
"active": 13,
|
||||
"total": 13,
|
||||
"primary": "Cerebras-fast",
|
||||
"cost": "0€"
|
||||
},
|
||||
"ethica": {
|
||||
"total_hcps": 161731,
|
||||
"with_email": 110567,
|
||||
"with_phone": 155145,
|
||||
"gap_email": 51164,
|
||||
"pct_email": 68.4,
|
||||
"pct_phone": 95.9,
|
||||
"by_country": [
|
||||
{
|
||||
"country": "DZ",
|
||||
"hcps": 122337,
|
||||
"with_email": 78477,
|
||||
"with_tel": 119394,
|
||||
"pct_email": 64.1,
|
||||
"pct_tel": 97.6
|
||||
},
|
||||
{
|
||||
"country": "MA",
|
||||
"hcps": 19721,
|
||||
"with_email": 15071,
|
||||
"with_tel": 18733,
|
||||
"pct_email": 76.4,
|
||||
"pct_tel": 95
|
||||
},
|
||||
{
|
||||
"country": "TN",
|
||||
"hcps": 17794,
|
||||
"with_email": 15140,
|
||||
"with_tel": 17018,
|
||||
"pct_email": 85.1,
|
||||
"pct_tel": 95.6
|
||||
},
|
||||
{
|
||||
"country": "INTL",
|
||||
"hcps": 1879,
|
||||
"with_email": 1879,
|
||||
"with_tel": 0,
|
||||
"pct_email": 100,
|
||||
"pct_tel": 0
|
||||
}
|
||||
]
|
||||
},
|
||||
"docker": [
|
||||
{
|
||||
"name": "loki",
|
||||
"status": "Up 4 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "listmonk",
|
||||
"status": "Up 4 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "plausible-plausible-1",
|
||||
"status": "Up 3 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "plausible-plausible-db-1",
|
||||
"status": "Up 3 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "plausible-plausible-events-db-1",
|
||||
"status": "Up 3 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "n8n-docker-n8n-1",
|
||||
"status": "Up 4 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "mattermost-docker-mm-db-1",
|
||||
"status": "Up 4 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "mattermost-docker-mattermost-1",
|
||||
"status": "Up 4 days (healthy)",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "twenty",
|
||||
"status": "Up 4 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "twenty-redis",
|
||||
"status": "Up 4 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "langfuse",
|
||||
"status": "Up 5 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "redis-weval",
|
||||
"status": "Up 6 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "gitea",
|
||||
"status": "Up 6 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "node-exporter",
|
||||
"status": "Up 6 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "prometheus",
|
||||
"status": "Up 6 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "searxng",
|
||||
"status": "Up 6 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "uptime-kuma",
|
||||
"status": "Up 25 hours (healthy)",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "vaultwarden",
|
||||
"status": "Up 6 days (healthy)",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "qdrant",
|
||||
"status": "Up 6 days",
|
||||
"ports": ""
|
||||
}
|
||||
],
|
||||
"crons": {
|
||||
"active": 35
|
||||
},
|
||||
"git": {
|
||||
"head": "b793fa178 auto-sync-0335",
|
||||
"dirty": 3,
|
||||
"status": "DIRTY"
|
||||
},
|
||||
"nonreg": {
|
||||
"total": 153,
|
||||
"passed": 153,
|
||||
"score": "100%"
|
||||
},
|
||||
"services": [
|
||||
{
|
||||
"name": "DeerFlow",
|
||||
"port": 3002,
|
||||
"status": "UP"
|
||||
},
|
||||
{
|
||||
"name": "DeerFlow API",
|
||||
"port": 8001,
|
||||
"status": "UP"
|
||||
},
|
||||
{
|
||||
"name": "Qdrant",
|
||||
"port": 6333,
|
||||
"status": "UP"
|
||||
},
|
||||
{
|
||||
"name": "Ollama",
|
||||
"port": 11434,
|
||||
"status": "UP"
|
||||
},
|
||||
{
|
||||
"name": "Redis",
|
||||
"port": 6379,
|
||||
"status": "UP"
|
||||
},
|
||||
{
|
||||
"name": "Sovereign",
|
||||
"port": 4000,
|
||||
"status": "UP"
|
||||
},
|
||||
{
|
||||
"name": "SearXNG",
|
||||
"port": 8080,
|
||||
"status": "UP"
|
||||
}
|
||||
],
|
||||
"whisper": {
|
||||
"binary": "COMPILED",
|
||||
"model": "142MB"
|
||||
},
|
||||
"grand_total": 3656,
|
||||
"health": {
|
||||
"score": 5,
|
||||
"max": 6,
|
||||
"pct": 83
|
||||
},
|
||||
"elapsed_ms": 11092
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"ok": true,
|
||||
"version": "V83-business-kpi",
|
||||
"ts": "2026-04-21T01:34:03+00:00",
|
||||
"ts": "2026-04-21T01:35:17+00:00",
|
||||
"summary": {
|
||||
"total_categories": 8,
|
||||
"total_kpis": 64,
|
||||
|
||||
@@ -7816,5 +7816,18 @@
|
||||
"status": "PENDING_APPROVAL",
|
||||
"created_at": "2026-04-20T23:57:30+00:00",
|
||||
"source": "opus4-autowire-early-v2"
|
||||
},
|
||||
"598": {
|
||||
"name": "zombie_killer_status",
|
||||
"triggers": [
|
||||
"zombie killer",
|
||||
"zombie playwright",
|
||||
"kill zombies",
|
||||
"zombie status"
|
||||
],
|
||||
"cmd": "echo v9.58 zombie killer live \/opt\/weval-ops\/zombie-killer.py + cron 30min - kills playwright drivers >2h + orphan chrome-headless >1h ppid=1 - log \/var\/log\/weval-zombie-killer.log - first run killed 2 zombies (from 14avr and 16avr) - load 4.96 to 0.86 - swap 3.5gi to 3.2gi",
|
||||
"status": "PENDING_APPROVAL",
|
||||
"created_at": "2026-04-21T01:35:17+00:00",
|
||||
"source": "opus4-autowire-early-v2"
|
||||
}
|
||||
}
|
||||
15
api/wired-pending/intent-opus4-zombie_killer_status.php
Normal file
15
api/wired-pending/intent-opus4-zombie_killer_status.php
Normal file
@@ -0,0 +1,15 @@
|
||||
<?php
|
||||
return array (
|
||||
'name' => 'zombie_killer_status',
|
||||
'triggers' =>
|
||||
array (
|
||||
0 => 'zombie killer',
|
||||
1 => 'zombie playwright',
|
||||
2 => 'kill zombies',
|
||||
3 => 'zombie status',
|
||||
),
|
||||
'cmd' => 'echo v9.58 zombie killer live /opt/weval-ops/zombie-killer.py + cron 30min - kills playwright drivers >2h + orphan chrome-headless >1h ppid=1 - log /var/log/weval-zombie-killer.log - first run killed 2 zombies (from 14avr and 16avr) - load 4.96 to 0.86 - swap 3.5gi to 3.2gi',
|
||||
'status' => 'EXECUTED',
|
||||
'created_at' => '2026-04-21T01:35:17+00:00',
|
||||
'source' => 'opus4-autowire-early-v2',
|
||||
);
|
||||
Reference in New Issue
Block a user