From ec6156bec1c42adeb39269efc974a11868c30911 Mon Sep 17 00:00:00 2001 From: Saad Date: Mon, 19 Jan 2026 11:54:33 +0900 Subject: [PATCH] Add CPU details and player count from WebSocket handshake - Handle new Handshake message with system info (cpu_model, cpu_cores, cpu_threads) and config (max_players) - Display CPU model and core/thread count in System Resources panel - Use player_count from Metric messages for online players Co-Authored-By: Claude Opus 4.5 --- src/lib/stores/telemetry.svelte.ts | 47 ++++++++++++++++++++++++++++-- src/routes/+page.svelte | 7 ++++- 2 files changed, 51 insertions(+), 3 deletions(-) diff --git a/src/lib/stores/telemetry.svelte.ts b/src/lib/stores/telemetry.svelte.ts index 61b25e9..053a65c 100644 --- a/src/lib/stores/telemetry.svelte.ts +++ b/src/lib/stores/telemetry.svelte.ts @@ -16,6 +16,9 @@ export interface TelemetryData { ramUsage: number; totalRam: number; cpuUsage: number; + cpuModel: string; + cpuCores: number; + cpuThreads: number; uptime: number; onlinePlayers: number; maxPlayers: number; @@ -45,9 +48,12 @@ function createTelemetryStore() { ramUsage: 0, totalRam: 0, cpuUsage: 0, + cpuModel: 'Unknown', + cpuCores: 0, + cpuThreads: 0, uptime: 0, onlinePlayers: 0, - maxPlayers: 100, + maxPlayers: 0, tps: 20, storageUsed: undefined, tpsHistory: [] @@ -92,7 +98,10 @@ function createTelemetryStore() { socket.onmessage = (event) => { try { const payload = JSON.parse(event.data); - if (payload.type === 'Metric') { + if (payload.type === 'Handshake') { + // Handshake: one-time system info and config + updateHandshake(payload.data); + } else if (payload.type === 'Metric') { updateMetrics(payload.data); } } catch (e) { @@ -113,6 +122,36 @@ function createTelemetryStore() { }; } + function updateHandshake(data: { + system?: { + cpu_model?: string; + cpu_cores?: number; + cpu_threads?: number; + }; + config?: { + max_players?: number; + }; + }) { + // System info + if (data.system) { + if (data.system.cpu_model !== undefined) { + state.data.cpuModel = data.system.cpu_model; + } + if (data.system.cpu_cores !== undefined) { + state.data.cpuCores = data.system.cpu_cores; + } + if (data.system.cpu_threads !== undefined) { + state.data.cpuThreads = data.system.cpu_threads; + } + } + // Config + if (data.config) { + if (data.config.max_players !== undefined) { + state.data.maxPlayers = data.config.max_players; + } + } + } + function updateMetrics(data: { ram_usage?: number; total_ram?: number; @@ -120,6 +159,7 @@ function createTelemetryStore() { uptime?: number; online_players?: number; max_players?: number; + player_count?: number; tps?: number; storage_used?: number; disk_type?: string; @@ -136,6 +176,9 @@ function createTelemetryStore() { if (data.uptime !== undefined) { state.data.uptime = data.uptime; } + if (data.player_count !== undefined) { + state.data.onlinePlayers = data.player_count; + } if (data.online_players !== undefined) { state.data.onlinePlayers = data.online_players; } diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index cd36f90..57c8783 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -284,7 +284,12 @@ style="width: {cpuPercent}%" > -

System CPU

+

+ {telemetry.data.cpuModel} +

+

+ {telemetry.data.cpuCores} cores / {telemetry.data.cpuThreads} threads +