80 lines
3.1 KiB
PHP
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);
|