Add Rsync page, upgrade monitor rsync card, partnership overhaul, API key periodic check, docker watchdog manual-stop detection
This commit is contained in:
@@ -30,6 +30,27 @@ function vv_pt_config(): array {
|
||||
}
|
||||
|
||||
// ── Mirror sync health — the partnership's actual job (rsync orchestrators) ──────
|
||||
|
||||
function vv_pt_sync_summary(string $logFile): string {
|
||||
if (!file_exists($logFile)) return '';
|
||||
$tail = array_filter(array_slice(file($logFile, FILE_IGNORE_NEW_LINES), -30), 'strlen');
|
||||
foreach (array_reverse(array_values($tail)) as $raw) {
|
||||
// Strip emoji / Unicode decoration for regex matching
|
||||
$line = trim(preg_replace('/[\x{1F000}-\x{1FFFF}\x{2600}-\x{27BF}\x{FE0F}]/u', '', $raw));
|
||||
$line = preg_replace('/\s+/', ' ', $line);
|
||||
// "Critical sync complete — HOST1 — 1m39s — 2 share(s)"
|
||||
if (preg_match('/Critical sync complete\s*—\s*\S+\s*—\s*([\w]+)\s*—\s*(.+)/i', $line, $m))
|
||||
return trim($m[2]) . ' in ' . $m[1];
|
||||
// "Status: all complete — 0 share(s) synced, 11 job(s) run"
|
||||
if (preg_match('/Status:\s*all complete\s*—\s*(.+)/i', $line, $m))
|
||||
return trim($m[1]);
|
||||
// "Status: X failure(s)" or "Failures: N"
|
||||
if (preg_match('/Failures:\s*(\d+)/i', $line, $m) && (int)$m[1] > 0)
|
||||
return (int)$m[1] . ' failure(s)';
|
||||
}
|
||||
return '';
|
||||
}
|
||||
|
||||
function vv_pt_sync(): array {
|
||||
$jobs = [
|
||||
'critical' => 'Orchestrators/critical_sync_maintenance',
|
||||
@@ -39,14 +60,17 @@ function vv_pt_sync(): array {
|
||||
$out = ['jobs' => []];
|
||||
foreach ($jobs as $key => $base) {
|
||||
$statFile = LOG_DIR . '/' . $base . '.json';
|
||||
$logFile = LOG_DIR . '/' . $base . '.log';
|
||||
$s = file_exists($statFile) ? json_decode(@file_get_contents($statFile), true) : null;
|
||||
$out['jobs'][$key] = is_array($s) ? [
|
||||
'status' => $s['status'] ?? 'unknown',
|
||||
'start' => isset($s['start']) ? (int)$s['start'] : null,
|
||||
'end' => isset($s['end']) ? (int)$s['end'] : null,
|
||||
'status' => $s['status'] ?? 'unknown',
|
||||
'start' => isset($s['start']) ? (int)$s['start'] : null,
|
||||
'end' => isset($s['end']) ? (int)$s['end'] : null,
|
||||
'summary' => vv_pt_sync_summary($logFile),
|
||||
] : null;
|
||||
}
|
||||
$v = vv_conf_vars();
|
||||
$out['interval_min'] = (int)($v['PARTNERSHIP_SYNC_INTERVAL'] ?? 30);
|
||||
// Rsync gate flags (master.conf) — global Tier 1 + per-tier Tier 2.
|
||||
$out['gates'] = [
|
||||
'global' => ['var' => 'RSYNC_ENABLED', 'on' => ($v['RSYNC_ENABLED'] ?? 'true') === 'true'],
|
||||
|
||||
Reference in New Issue
Block a user