From 115b01cee37f4d77b52e51011b117d75605903e6 Mon Sep 17 00:00:00 2001 From: Chaim Lev-Ari Date: Wed, 17 Jan 2024 22:30:12 +0700 Subject: [PATCH] fix(docker): include healthy containers in running [EE-6264] (#10746) --- .../test_data/output_24_to_latest.json | 1 + api/docker/snapshot.go | 8 ++++++-- api/portainer.go | 1 + .../docker/DashboardView/ContainerStatus.tsx | 17 +++++++++++------ app/react/docker/snapshots/types/index.ts | 1 + .../EnvironmentItem/EnvironmentStatsDocker.tsx | 10 ++++++---- 6 files changed, 26 insertions(+), 12 deletions(-) diff --git a/api/datastore/test_data/output_24_to_latest.json b/api/datastore/test_data/output_24_to_latest.json index 873dee304..2a326c0c2 100644 --- a/api/datastore/test_data/output_24_to_latest.json +++ b/api/datastore/test_data/output_24_to_latest.json @@ -669,6 +669,7 @@ "snapshots": [ { "Docker": { + "ContainerCount": 0, "DockerSnapshotRaw": { "Containers": null, "Images": null, diff --git a/api/docker/snapshot.go b/api/docker/snapshot.go index 66cfcb3cc..57e338d74 100644 --- a/api/docker/snapshot.go +++ b/api/docker/snapshot.go @@ -201,9 +201,12 @@ func snapshotContainers(snapshot *portainer.DockerSnapshot, cli *client.Client) } } - if strings.Contains(container.Status, "(healthy)") { + if container.State == "healthy" { + runningContainers++ healthyContainers++ - } else if strings.Contains(container.Status, "(unhealthy)") { + } + + if container.State == "unhealthy" { unhealthyContainers++ } @@ -222,6 +225,7 @@ func snapshotContainers(snapshot *portainer.DockerSnapshot, cli *client.Client) snapshot.GpuUseAll = gpuUseAll snapshot.GpuUseList = gpuUseList + snapshot.ContainerCount = len(containers) snapshot.RunningContainerCount = runningContainers snapshot.StoppedContainerCount = stoppedContainers snapshot.HealthyContainerCount = healthyContainers diff --git a/api/portainer.go b/api/portainer.go index 7a6653e57..628a8b7df 100644 --- a/api/portainer.go +++ b/api/portainer.go @@ -215,6 +215,7 @@ type ( Swarm bool `json:"Swarm"` TotalCPU int `json:"TotalCPU"` TotalMemory int64 `json:"TotalMemory"` + ContainerCount int `json:"ContainerCount"` RunningContainerCount int `json:"RunningContainerCount"` StoppedContainerCount int `json:"StoppedContainerCount"` HealthyContainerCount int `json:"HealthyContainerCount"` diff --git a/app/react/docker/DashboardView/ContainerStatus.tsx b/app/react/docker/DashboardView/ContainerStatus.tsx index 600999235..d6e552459 100644 --- a/app/react/docker/DashboardView/ContainerStatus.tsx +++ b/app/react/docker/DashboardView/ContainerStatus.tsx @@ -2,7 +2,10 @@ import { Heart, Power } from 'lucide-react'; import { Icon } from '@/react/components/Icon'; -import { DockerContainer } from '../containers/types'; +import { + DockerContainer, + ContainerStatus as Status, +} from '../containers/types'; interface Props { containers: DockerContainer[]; @@ -40,20 +43,22 @@ export function ContainerStatus({ containers }: Props) { } function runningContainersFilter(containers: DockerContainer[]) { - return containers.filter((container) => container.Status === 'running') - .length; + return containers.filter( + (container) => + container.Status === Status.Running || container.Status === Status.Healthy + ).length; } function stoppedContainersFilter(containers: DockerContainer[]) { return containers.filter( (container) => - container.Status === 'exited' || container.Status === 'stopped' + container.Status === Status.Exited || container.Status === Status.Stopped ).length; } function healthyContainersFilter(containers: DockerContainer[]) { - return containers.filter((container) => container.Status === 'healthy') + return containers.filter((container) => container.Status === Status.Healthy) .length; } function unhealthyContainersFilter(containers: DockerContainer[]) { - return containers.filter((container) => container.Status === 'unhealthy') + return containers.filter((container) => container.Status === Status.Unhealthy) .length; } diff --git a/app/react/docker/snapshots/types/index.ts b/app/react/docker/snapshots/types/index.ts index 185a57e90..d7fcdc1a0 100644 --- a/app/react/docker/snapshots/types/index.ts +++ b/app/react/docker/snapshots/types/index.ts @@ -15,6 +15,7 @@ export interface DockerSnapshot { NodeCount: number; ImageCount: number; VolumeCount: number; + ContainerCount: number; RunningContainerCount: number; StoppedContainerCount: number; HealthyContainerCount: number; diff --git a/app/react/portainer/HomeView/EnvironmentList/EnvironmentItem/EnvironmentStatsDocker.tsx b/app/react/portainer/HomeView/EnvironmentList/EnvironmentItem/EnvironmentStatsDocker.tsx index f6a23110a..d3b5759c4 100644 --- a/app/react/portainer/HomeView/EnvironmentList/EnvironmentItem/EnvironmentStatsDocker.tsx +++ b/app/react/portainer/HomeView/EnvironmentList/EnvironmentItem/EnvironmentStatsDocker.tsx @@ -41,6 +41,7 @@ export function EnvironmentStatsDocker({ snapshot }: Props) { )} - {containersCount > 0 && ( + + {actualTotal > 0 && ( <>