0 ? (int)round($ramUsedMb / $ramTotalMb * 100) : 0; // Fallback state (fast file read, no exec) $fbRaw = @file_get_contents(STATE_DIR . '/fallback_state.db') ?: ''; $fbData = vv_parse_kv_db($fbRaw); $fallbackState = $fbData['state'] ?? 'UNKNOWN'; // Partner $partner = vv_partner_state(); $peers = array_values(array_filter($partner['hosts'], fn($h) => !$h['is_me'])); // Media sessions — cached 30s so the HTTP calls don't hold up every snapshot poll $mediaCache = vv_cache_read('snap_media', 30); if (!$mediaCache) { $media = vv_media_sessions(); $mediaCache = [ 'stream_count' => count($media['sessions']), 'transcode_count' => count(array_filter($media['sessions'], fn($s) => !empty($s['is_tc']))), ]; vv_cache_write('snap_media', $mediaCache); } $streamCount = (int)($mediaCache['stream_count'] ?? 0); $transcodeCount = (int)($mediaCache['transcode_count'] ?? 0); echo json_encode([ 'cpu_pct' => $cpuPct, 'ram_pct' => $ramPct, 'ram_used_mb' => $ramUsedMb, 'ram_total_mb' => $ramTotalMb, 'fallback' => $fallbackState, 'partner_enabled' => $partner['enabled'], 'peers' => $peers, 'stream_count' => $streamCount, 'transcode_count' => $transcodeCount, ]);