98 lines
3.8 KiB
PHP
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);
|