From 9aa2d5ccd8cfa8facea962c5e21efeee7f695c97 Mon Sep 17 00:00:00 2001 From: Meier Lukas Date: Sat, 18 Oct 2025 20:29:11 +0200 Subject: [PATCH] fix(docker): stats not working (#4311) --- packages/request-handler/src/docker.ts | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/packages/request-handler/src/docker.ts b/packages/request-handler/src/docker.ts index 3e30aa1a6..cd82688d3 100644 --- a/packages/request-handler/src/docker.ts +++ b/packages/request-handler/src/docker.ts @@ -61,7 +61,17 @@ async function getContainersWithStatsAsync() { })?.url ?? null, cpuUsage: calculateCpuUsage(stats), // memory usage by default includes cache, which should not be shown as it is also not shown with docker stats command - memoryUsage: stats.memory_stats.usage - stats.memory_stats.stats.cache, + // The below type is probably wrong, sometimes stats can be undefined + // See https://docs.docker.com/reference/cli/docker/container/stats/ how it is / was calculated + memoryUsage: + stats.memory_stats.usage - + // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition + (stats.memory_stats.stats?.cache ?? + // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition + stats.memory_stats.stats?.total_inactive_file ?? + // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition + stats.memory_stats.stats?.inactive_file ?? + 0), image: container.Image, ports: container.Ports, }; @@ -71,11 +81,10 @@ async function getContainersWithStatsAsync() { } function calculateCpuUsage(stats: ContainerStats): number { - const cpuDelta = stats.cpu_stats.cpu_usage.total_usage - stats.precpu_stats.cpu_usage.total_usage; - const systemDelta = stats.cpu_stats.system_cpu_usage - stats.precpu_stats.system_cpu_usage; const numberOfCpus = stats.cpu_stats.online_cpus || 1; - if (systemDelta === 0) return 0; + const usage = stats.cpu_stats.system_cpu_usage; + if (usage === 0) return 0; - return (cpuDelta / systemDelta) * numberOfCpus * 100; + return (stats.cpu_stats.cpu_usage.total_usage / usage) * numberOfCpus * 100; }