diff --git a/Plugin/usr/local/emhttp/plugins/varaverk/api/monitor.php b/Plugin/usr/local/emhttp/plugins/varaverk/api/monitor.php index 6c6e8d6..318a745 100644 --- a/Plugin/usr/local/emhttp/plugins/varaverk/api/monitor.php +++ b/Plugin/usr/local/emhttp/plugins/varaverk/api/monitor.php @@ -4,6 +4,7 @@ require_once dirname(__DIR__) . '/include/monitor.php'; echo json_encode([ 'fallback' => vv_fallback_state(), + 'partner' => vv_partner_state(), 'resources' => vv_system_resources(), 'cpu' => vv_cpu_per_core(), 'mem' => vv_memory_breakdown(), diff --git a/Plugin/usr/local/emhttp/plugins/varaverk/include/monitor.php b/Plugin/usr/local/emhttp/plugins/varaverk/include/monitor.php index 9bb7645..6443dea 100644 --- a/Plugin/usr/local/emhttp/plugins/varaverk/include/monitor.php +++ b/Plugin/usr/local/emhttp/plugins/varaverk/include/monitor.php @@ -249,6 +249,45 @@ function vv_network_stats(): array { ]; } +function vv_partner_state(): array { + $vars = vv_conf_vars(); + $myName = trim(shell_exec('hostname -s') ?: ''); + + // Parse Tailscale peer status once + $tsData = json_decode(shell_exec('tailscale status --json 2>/dev/null') ?: '{}', true) ?? []; + $tsPeers = []; + foreach ($tsData['Peer'] ?? [] as $peer) { + // DNSName is "hostname.tailnet.ts.net." — take the first label (full, not truncated) + $dns = $peer['DNSName'] ?? ''; + $h = $dns ? strtolower(explode('.', $dns)[0]) : strtolower($peer['HostName'] ?? ''); + if ($h) $tsPeers[$h] = (bool)($peer['Online'] ?? false); + } + + $hosts = []; + foreach (['HOST1', 'HOST2', 'HOST3', 'HOST4'] as $id) { + $hostname = $vars[$id] ?? ''; + if (!$hostname) continue; + $isMe = strcasecmp($hostname, $myName) === 0; + $isOwner = strcasecmp($id, $vars['PARTNERSHIP_OWNER_HOST'] ?? '') === 0; + $online = $isMe ? true : ($tsPeers[strtolower($hostname)] ?? null); + $hosts[] = [ + 'id' => $id, + 'hostname' => $hostname, + 'owner' => $vars[$id . '_OWNER'] ?? '', + 'is_me' => $isMe, + 'is_owner' => $isOwner, + 'online' => $online, + ]; + } + + return [ + 'enabled' => ($vars['PARTNERSHIP_ENABLED'] ?? 'false') === 'true', + 'owner_host' => $vars['PARTNERSHIP_OWNER_HOST'] ?? '', + 'sync_min' => (int)($vars['PARTNERSHIP_SYNC_INTERVAL'] ?? 15), + 'hosts' => $hosts, + ]; +} + function vv_fallback_state(): array { // State file written by fallback.sh $stateFile = '/tmp/fallback_state.db'; diff --git a/Plugin/usr/local/emhttp/plugins/varaverk/pages/monitor.php b/Plugin/usr/local/emhttp/plugins/varaverk/pages/monitor.php index 168cc23..7944978 100644 --- a/Plugin/usr/local/emhttp/plugins/varaverk/pages/monitor.php +++ b/Plugin/usr/local/emhttp/plugins/varaverk/pages/monitor.php @@ -9,6 +9,11 @@
+