Files
html/api/wevaltech-catalog.php
2026-04-20 22:45:01 +02:00

98 lines
3.8 KiB
PHP

<?php
// V94 WEVALTECH Catalog API - auto-discovery all pages
// Returns categorized HTML pages from /var/www/html for WTP hub
// ZERO hardcode, auto-refresh, no duplicate
header("Content-Type: application/json");
header("Cache-Control: max-age=60");
$ROOT = "/var/www/html";
$PATTERNS = array(
"core" => array("wevia-master", "wevia-autonomous", "wevia-chat", "weval-master"),
"dashboards" => array("dashboard", "kpi", "visual-management", "analytics", "lean6sigma"),
"agents" => array("agents-", "agent-", "blade-agent"),
"blade_ops" => array("blade-", "ops-", "command-center", "cyber-monitor", "crons"),
"products" => array("enterprise", "ethica", "medreach", "reachhcp", "pharma", "suite", "arsenal"),
"crm_sales" => array("crm", "sales", "deal", "pipeline", "leads", "contacts"),
"business" => array("erp", "business-", "value-", "vsm", "dmaic"),
"ai" => array("ai-", "ai.html", "claude-", "deepseek", "anthropic", "gemini"),
"admin_sec" => array("admin", "config", "settings", "secret", "credentials", "vault"),
"wiki_docs" => array("wiki", "docs", "guide", "faq", "tutorial", "help"),
);
$TAG_LEGACY = array("legacy", "-dead", "-old", "-v0", "-v1", "-v2", "-v3", "-test", "-bak");
function classify($basename) {
global $PATTERNS;
foreach ($PATTERNS as $cat => $pats) {
foreach ($pats as $p) {
if (stripos($basename, $p) !== false) return $cat;
}
}
return "other";
}
function is_legacy($basename) {
global $TAG_LEGACY;
foreach ($TAG_LEGACY as $t) if (stripos($basename, $t) !== false) return true;
return false;
}
$files = glob("$ROOT/*.html") ?: array();
$catalog = array();
$stats = array("total" => 0, "legacy" => 0, "by_cat" => array());
foreach ($files as $f) {
$base = basename($f);
if (preg_match('/\.(gold|GOLD|bak|pre-|20\d{6})/', $base)) continue;
$size = @filesize($f);
$mtime = @filemtime($f);
$legacy = is_legacy($base);
$cat = $legacy ? "legacy" : classify($base);
$catalog[] = array(
"file" => $base,
"url" => "/$base",
"size_kb" => intval($size / 1024),
"updated" => date("Y-m-d", $mtime),
"category" => $cat,
"legacy" => $legacy,
);
$stats["total"]++;
if ($legacy) $stats["legacy"]++;
$stats["by_cat"][$cat] = ($stats["by_cat"][$cat] ?? 0) + 1;
}
// Read live KPIs from V83 for header
$kpi = @json_decode(@file_get_contents("http://127.0.0.1/api/wevia-v83-business-kpi.php?action=summary"), true);
if (!$kpi) {
// fallback fetch with host
$ch = curl_init("http://127.0.0.1/api/wevia-v83-business-kpi.php?action=summary");
curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 3, CURLOPT_HTTPHEADER => ["Host: weval-consulting.com"]]);
$kpi = @json_decode(curl_exec($ch), true);
curl_close($ch);
}
$tools_registry = @json_decode(@file_get_contents("$ROOT/api/wevia-tool-registry.json"), true);
$nonreg = @json_decode(@file_get_contents("$ROOT/api/nonreg-latest.json"), true);
$out = array(
"ok" => true,
"version" => "V94-wevaltech-catalog",
"ts" => date("c"),
"catalog" => $catalog,
"stats" => $stats,
"live_state" => array(
"kpi_ok" => $kpi["summary"]["ok"] ?? 0,
"kpi_warn" => $kpi["summary"]["warn"] ?? 0,
"kpi_fail" => $kpi["summary"]["fail"] ?? 0,
"completeness_pct" => $kpi["summary"]["data_completeness_pct"] ?? 0,
"tools_total" => count($tools_registry["tools"] ?? array()),
"tools_exec" => count(array_filter($tools_registry["tools"] ?? array(), function($t){ return !empty($t["exec"]); })),
"l99_score" => $nonreg["score"] ?? 0,
"l99_pass" => $nonreg["pass"] ?? 0,
"l99_total" => $nonreg["total"] ?? 0,
"l99_ts" => $nonreg["ts"] ?? "",
),
);
echo json_encode($out, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);