Files
html/api/sync-exec.php
opus 13ca9fe048
Some checks failed
WEVAL NonReg / nonreg (push) Has been cancelled
auto-sync-20260416-1935
2026-04-16 21:35:49 +02:00

80 lines
3.1 KiB
PHP

<?php
// PHASE4-SYNC-EXEC v1 — Real execution engine for "sync tout"
// Called by fast-path intent sync_tout
// Returns JSON with real results
header("Content-Type: application/json");
$results = [];
$errors = 0;
$ts = date("H:i:s");
// 1) Git sync
chdir("/var/www/html");
$git_status = trim(shell_exec("git status --porcelain 2>/dev/null | wc -l"));
if ((int)$git_status > 0) {
shell_exec("git add -A 2>/dev/null");
$commit = trim(shell_exec("git commit -m 'auto-sync-" . date("Ymd-Hi") . "' -q 2>&1"));
$results["git_commit"] = $commit ?: "committed";
} else {
$results["git_commit"] = "clean";
}
$push_origin = trim(shell_exec("git push origin main -q 2>&1"));
$push_gitea = trim(shell_exec("git push gitea main -q 2>&1"));
$results["git_push_origin"] = $push_origin ?: "ok";
$results["git_push_gitea"] = $push_gitea ?: "ok";
$results["git_hash"] = trim(shell_exec("git rev-parse --short HEAD 2>/dev/null"));
if (strpos($push_origin, "error") !== false) $errors++;
if (strpos($push_gitea, "error") !== false) $errors++;
// 2) L99 state update
$l99_out = trim(shell_exec("cd /opt/weval-l99 && python3 l99-state-updater.py 2>&1 | tail -3"));
$results["l99_update"] = $l99_out ?: "done";
// Read L99 state
$l99_state = json_decode(file_get_contents("/opt/weval-l99/l99-state.json") ?: "{}", true);
$results["l99_score"] = ($l99_state["pass"] ?? "?") . "/" . ($l99_state["total"] ?? "?");
$results["l99_warn"] = $l99_state["warn"] ?? -1;
// 3) Wiki count
$wiki_count = (int)trim(shell_exec("find /opt/weval-l99/wiki -name '*.md' 2>/dev/null | wc -l"));
$results["wiki_count"] = $wiki_count;
// 4) Vault count
$vault_count = (int)trim(shell_exec("ls /opt/wevads/vault/ 2>/dev/null | wc -l"));
$results["vault_count"] = $vault_count;
// 5) NonReg quick check
$nr = json_decode(trim(shell_exec("curl -sk https://www.weval-consulting.com/api/nonreg-api.php?cat=all 2>/dev/null | head -c 500")), true);
$results["nonreg"] = ($nr["pass"] ?? "?") . "/" . ($nr["total"] ?? "?");
// 6) Consistency check
$dirty = (int)trim(shell_exec("cd /var/www/html && git status --porcelain 2>/dev/null | wc -l"));
$results["consistency"] = [
"git_dirty" => $dirty,
"l99_warn" => $results["l99_warn"],
"wiki_ok" => $wiki_count > 0,
"vault_ok" => $vault_count > 0
];
$consistent = ($dirty == 0 && $results["l99_warn"] == 0 && $wiki_count > 0 && $vault_count > 0);
$results["consistent"] = $consistent;
// 7) Telegram alert if errors
if ($errors > 0) {
$fail_file = "/tmp/sync-fail-count";
$prev = (int)@file_get_contents($fail_file);
$total = $prev + 1;
file_put_contents($fail_file, $total);
if ($total >= 3) {
$msg = urlencode("SYNC-ALL: {$total} echecs consecutifs. Git={$results['git_hash']} L99={$results['l99_score']}");
@file_get_contents("https://api.telegram.org/bot8544624912:AAG_placeholder/sendMessage?chat_id=7605775322&text=$msg");
$results["telegram_alert"] = true;
}
} else {
@file_put_contents("/tmp/sync-fail-count", "0");
}
$results["errors"] = $errors;
$results["ts"] = $ts;
$results["version"] = "phase4-sync-exec-v1";
echo json_encode($results, JSON_PRETTY_PRINT);