Files
html/api/wevia-lean-toc.php
2026-04-12 22:57:03 +02:00

72 lines
4.7 KiB
PHP

<?php
header("Content-Type: application/json; charset=utf-8");
$action = $_GET["action"] ?? "status";
function metrics() {
$m = [];
$m["routes"] = intval(trim(shell_exec('grep -c "// Route" /var/www/html/api/weval-ia-fast.php 2>/dev/null') ?: '0'));
$m["lines"] = intval(trim(shell_exec('wc -l < /var/www/html/api/weval-ia-fast.php 2>/dev/null') ?: '0'));
$nr = json_decode(@file_get_contents('http://127.0.0.1/api/nonreg-api.php?cat=all') ?: '{}', true);
$m["nr_pass"] = $nr["pass"] ?? 0;
$m["nr_total"] = $nr["total"] ?? 0;
$m["nr_score"] = $nr["score"] ?? 0;
$l99 = json_decode(@file_get_contents('/var/www/html/api/l99-results.json') ?: '{}', true);
$m["l99_pass"] = $l99["pass"] ?? 0;
$m["l99_total"] = $l99["total"] ?? 0;
$m["l99_warn"] = $l99["warn"] ?? 0;
$gap = json_decode(@file_get_contents('/var/www/html/api/gap-detector.json') ?: '{}', true);
$m["gap_score"] = $gap["score"] ?? 0;
$m["gap_unwired"] = $gap["not_wired_count"] ?? 0;
$m["docker"] = intval(trim(shell_exec('docker ps -q 2>/dev/null | wc -l') ?: '0'));
$m["git_dirty"] = intval(trim(shell_exec('cd /var/www/html && git status -s 2>/dev/null | wc -l') ?: '0'));
$m["commits_today"] = intval(trim(shell_exec('cd /var/www/html && git log --oneline --since=today 2>/dev/null | wc -l') ?: '0'));
$m["crons"] = intval(trim(shell_exec('ls /etc/cron.d/weval-* 2>/dev/null | wc -l') ?: '0'));
$m["wiki"] = intval(trim(shell_exec('ls /opt/weval-l99/wiki/*.json 2>/dev/null | wc -l') ?: '0'));
$m["disk"] = intval(trim(shell_exec('df / --output=pcent | tail -1 | tr -dc 0-9') ?: '0'));
return $m;
}
switch ($action) {
case "status":
echo json_encode(["engine"=>"Lean 6s+TOC v1.0","status"=>"active"]);
break;
case "dmaic":
$m = metrics();
$analyze = [];
if ($m["nr_score"] < 100) $analyze[] = "NonReg ".$m["nr_pass"]."/".$m["nr_total"];
if ($m["gap_score"] < 80) $analyze[] = "Gap ".$m["gap_score"]."% < 80%";
if ($m["disk"] > 85) $analyze[] = "Disk ".$m["disk"]."%";
if ($m["l99_warn"] > 0) $analyze[] = "L99 ".$m["l99_warn"]." warnings";
echo json_encode(["dmaic"=>["define"=>"Zero regression, full coverage","measure"=>["nonreg"=>$m["nr_score"]."%","l99"=>$m["l99_pass"]."/".$m["l99_total"],"gap"=>$m["gap_score"]."%","commits"=>$m["commits_today"]],"analyze"=>$analyze?:["No bottlenecks"],"improve"=>["Wire ".$m["gap_unwired"]." tools","Enrich dataset"],"control"=>["CORTEX */4h","Gap */6h","L99 */30","NonReg 153/153","Archi */30","Pipeline 10-step"]]],JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE);
break;
case "toc":
$m = metrics();
$bottleneck = "None";
if ($m["disk"] > 85) $bottleneck = "Disk ".$m["disk"]."%";
elseif ($m["gap_score"] < 80) $bottleneck = "Gap ".$m["gap_score"]."%";
echo json_encode(["toc"=>["identify"=>$bottleneck,"exploit"=>"Max throughput without resources","subordinate"=>"All wait for fix","elevate"=>$m["disk"]>85?"docker prune":"Wire tools","repeat"=>"Re-run TOC"]],JSON_PRETTY_PRINT);
break;
case "lean_agile":
$m = metrics();
echo json_encode(["lean"=>["wip"=>$m["git_dirty"],"wip_target"=>5,"throughput"=>$m["commits_today"]." commits","quality"=>["nonreg"=>$m["nr_score"]."%","l99"=>$m["l99_pass"]."/".$m["l99_total"],"gap"=>$m["gap_score"]."%"],"waste"=>$m["gap_unwired"]." unwired tools","automation"=>$m["crons"]." crons"]],JSON_PRETTY_PRINT);
break;
case "auto_evolve":
$scripts = intval(trim(shell_exec('ls /opt/weval-l99/l99-*.py 2>/dev/null | wc -l') ?: '0'));
$new_apis = intval(trim(shell_exec('find /var/www/html/api -name "*.php" -newer /opt/weval-l99/l99-functional-test.py 2>/dev/null | wc -l') ?: '0'));
echo json_encode(["auto_evolve"=>["l99_scripts"=>$scripts,"new_apis"=>$new_apis,"needs_update"=>$new_apis>3,"suggestion"=>$new_apis>3?"Add $new_apis tests":"Up-to-date"]],JSON_PRETTY_PRINT);
break;
case "full_quality":
$m = metrics();
$sigma = 6;
if ($m["l99_total"] > 0) {
$defect = ($m["l99_total"]-$m["l99_pass"])/$m["l99_total"];
if ($defect > 0.067) $sigma = 3;
elseif ($defect > 0.006) $sigma = 4;
elseif ($defect > 0.0003) $sigma = 5;
}
echo json_encode(["quality"=>["sigma"=>$sigma,"nonreg"=>$m["nr_score"]."%","l99"=>$m["l99_pass"]."/".$m["l99_total"],"gap"=>$m["gap_score"]."%","bottleneck"=>$m["disk"]>85?"Disk":"Gap ".$m["gap_score"]."%","waste"=>$m["gap_unwired"],"crons"=>$m["crons"],"commits"=>$m["commits_today"]]],JSON_PRETTY_PRINT);
break;
default:
echo json_encode(["actions"=>["status","dmaic","toc","lean_agile","auto_evolve","full_quality"]]);
}