This commit is contained in:
@@ -664,6 +664,7 @@ setTimeout(refreshBladeStats, 1500);
|
||||
// V116-DASHBOARDS-TAB: load 70 dashboards tiles
|
||||
let __dashData = null;
|
||||
async function loadDashboards(){
|
||||
// V117-HTTP-BADGES: load with optional status check
|
||||
try {
|
||||
const r = await fetch('/api/dashboards-registry.php');
|
||||
const d = await r.json();
|
||||
@@ -671,8 +672,19 @@ async function loadDashboards(){
|
||||
renderDashStats(d);
|
||||
renderDashFilters(d);
|
||||
renderDashGrid(d.dashboards, 'all');
|
||||
// async load status badges in background
|
||||
loadDashboardsStatus();
|
||||
} catch(e){ console.error('[dashboards]',e); }
|
||||
}
|
||||
|
||||
async function loadDashboardsStatus(){
|
||||
try {
|
||||
const r = await fetch('/api/dashboards-registry.php?check=1');
|
||||
const d = await r.json();
|
||||
__dashData = d;
|
||||
renderDashGrid(d.dashboards, document.querySelector('.dash-filter.on')?.getAttribute('data-cat') || 'all');
|
||||
} catch(e){ console.error('[dashboards-status]',e); }
|
||||
}
|
||||
function renderDashStats(d){
|
||||
const box = document.getElementById('dash-stats');
|
||||
if (!box) return;
|
||||
@@ -697,12 +709,19 @@ function renderDashFilters(d){
|
||||
});
|
||||
}
|
||||
function renderDashGrid(items, cat){
|
||||
/* V117-HTTP-BADGES: status badge */
|
||||
const box = document.getElementById('dash-grid');
|
||||
if (!box) return;
|
||||
const filtered = cat === 'all' ? items : items.filter(x => x.category === cat);
|
||||
function statusBadge(s){
|
||||
if(!s) return '';
|
||||
if(s===200) return '<span style="color:#10b981;font-size:9px;margin-left:4px">● 200</span>';
|
||||
if(s===302) return '<span style="color:#f59e0b;font-size:9px;margin-left:4px">● auth</span>';
|
||||
return '<span style="color:#ef4444;font-size:9px;margin-left:4px">● '+s+'</span>';
|
||||
}
|
||||
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:18px;margin-bottom:4px">'+e.icon+' <span style="font-size:9px;color:'+e.color+';text-transform:uppercase">'+e.category+'</span>'+statusBadge(e.http_status)+'</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>'
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
{
|
||||
"generated_at": "2026-04-21T09:40:02.127601",
|
||||
"generated_at": "2026-04-21T09:45:02.061355",
|
||||
"stats": {
|
||||
"total": 47,
|
||||
"pending": 32,
|
||||
"pending": 30,
|
||||
"kaouther_surfaced": 18,
|
||||
"chrome_surfaced": 2,
|
||||
"notif_only_done": 0,
|
||||
"autofix_archived": 0,
|
||||
"cerebras_archived": 0,
|
||||
"older_3d_archived": 0,
|
||||
"unknown": 6,
|
||||
"unknown": 5,
|
||||
"errors": 0
|
||||
},
|
||||
"actions": [
|
||||
|
||||
BIN
api/blade-tasks/v117-badges-proof/01-badges.png
Normal file
BIN
api/blade-tasks/v117-badges-proof/01-badges.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 814 KiB |
Binary file not shown.
10
api/blade-tasks/v117-badges-proof/proof.json
Normal file
10
api/blade-tasks/v117-badges-proof/proof.json
Normal file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"v117": "badges",
|
||||
"state": {
|
||||
"tiles": 69,
|
||||
"badges_200": 5,
|
||||
"badges_auth": 5,
|
||||
"badges_error": 5
|
||||
},
|
||||
"VERDICT": "PARTIAL"
|
||||
}
|
||||
@@ -43,13 +43,15 @@ $byCategory = [];
|
||||
$checkStatus = isset($_GET['check']) && $_GET['check'] === '1';
|
||||
// V117-HTTP-STATUS: optional live HTTP status via local curl
|
||||
function checkHttp($name) {
|
||||
$ch = curl_init("http://127.0.0.1/$name");
|
||||
/* V117-CURL-FIX: https with self-signed + follow 1 redirect to get real status */
|
||||
$ch = curl_init("https://weval-consulting.com/$name");
|
||||
curl_setopt_array($ch, [
|
||||
CURLOPT_NOBODY => true,
|
||||
CURLOPT_RETURNTRANSFER => true,
|
||||
CURLOPT_TIMEOUT => 2,
|
||||
CURLOPT_SSL_VERIFYPEER => false,
|
||||
CURLOPT_SSL_VERIFYHOST => false,
|
||||
CURLOPT_FOLLOWLOCATION => false,
|
||||
CURLOPT_HTTPHEADER => ['Host: weval-consulting.com']
|
||||
]);
|
||||
curl_exec($ch);
|
||||
$code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
||||
|
||||
@@ -1,281 +0,0 @@
|
||||
{
|
||||
"ts": "2026-04-21T07:40:01+00:00",
|
||||
"server": "s204",
|
||||
"s204": {
|
||||
"load": 2.84,
|
||||
"uptime": "2026-04-14 11:51:24",
|
||||
"ram_total_mb": 31335,
|
||||
"ram_used_mb": 12090,
|
||||
"ram_free_mb": 19244,
|
||||
"disk_total": "150G",
|
||||
"disk_used": "116G",
|
||||
"disk_free": "29G",
|
||||
"disk_pct": "81%",
|
||||
"fpm_workers": 141,
|
||||
"docker_containers": 19,
|
||||
"cpu_cores": 8
|
||||
},
|
||||
"s95": {
|
||||
"load": 0.17,
|
||||
"disk_pct": "81%",
|
||||
"status": "UP",
|
||||
"ram_total_mb": 15610,
|
||||
"ram_free_mb": 11922
|
||||
},
|
||||
"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": 1928,
|
||||
"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": 161733,
|
||||
"with_email": 110580,
|
||||
"with_phone": 155149,
|
||||
"gap_email": 51153,
|
||||
"pct_email": 68.4,
|
||||
"pct_phone": 95.9,
|
||||
"by_country": [
|
||||
{
|
||||
"country": "DZ",
|
||||
"hcps": 122337,
|
||||
"with_email": 78484,
|
||||
"with_tel": 119394,
|
||||
"pct_email": 64.2,
|
||||
"pct_tel": 97.6
|
||||
},
|
||||
{
|
||||
"country": "MA",
|
||||
"hcps": 19723,
|
||||
"with_email": 15074,
|
||||
"with_tel": 18737,
|
||||
"pct_email": 76.4,
|
||||
"pct_tel": 95
|
||||
},
|
||||
{
|
||||
"country": "TN",
|
||||
"hcps": 17794,
|
||||
"with_email": 15143,
|
||||
"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 5 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "mattermost-docker-mm-db-1",
|
||||
"status": "Up 5 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "mattermost-docker-mattermost-1",
|
||||
"status": "Up 5 days (healthy)",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "twenty",
|
||||
"status": "Up 4 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "twenty-redis",
|
||||
"status": "Up 5 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 32 hours (healthy)",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "vaultwarden",
|
||||
"status": "Up 6 days (healthy)",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "qdrant",
|
||||
"status": "Up 6 days",
|
||||
"ports": ""
|
||||
}
|
||||
],
|
||||
"crons": {
|
||||
"active": 35
|
||||
},
|
||||
"git": {
|
||||
"head": "4dd5f94e7 auto-sync-0940",
|
||||
"dirty": 4,
|
||||
"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": 3700,
|
||||
"health": {
|
||||
"score": 5,
|
||||
"max": 6,
|
||||
"pct": 83
|
||||
},
|
||||
"elapsed_ms": 11307
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"ok": true,
|
||||
"version": "V83-business-kpi",
|
||||
"ts": "2026-04-21T07:40:16+00:00",
|
||||
"ts": "2026-04-21T07:44:02+00:00",
|
||||
"summary": {
|
||||
"total_categories": 8,
|
||||
"total_kpis": 64,
|
||||
|
||||
Reference in New Issue
Block a user