From 41df7b7392a140a9f38e208760c637b1bd7202a2 Mon Sep 17 00:00:00 2001 From: Henry Dollman Date: Tue, 23 Jul 2024 19:51:35 -0400 Subject: [PATCH] update agent to use short container id --- agent/main.go | 29 +++++++++++++++-------------- agent/types.go | 1 + 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/agent/main.go b/agent/main.go index 7c2ddf7..ab9309f 100644 --- a/agent/main.go +++ b/agent/main.go @@ -188,7 +188,7 @@ func getDockerStats() ([]ContainerStats, error) { } defer resp.Body.Close() - var containers []Container + var containers []*Container if err := json.NewDecoder(resp.Body).Decode(&containers); err != nil { panic(err) } @@ -196,6 +196,7 @@ func getDockerStats() ([]ContainerStats, error) { var containerStats []ContainerStats for _, ctr := range containers { + ctr.IdShort = ctr.ID[:12] cstats, err := getContainerStats(ctr) if err != nil { // retry once @@ -208,22 +209,22 @@ func getDockerStats() ([]ContainerStats, error) { containerStats = append(containerStats, cstats) } - // clean up old containers from map - validNames := make(map[string]struct{}, len(containers)) + // clean up old container ids from map + validIds := make(map[string]struct{}, len(containers)) for _, ctr := range containers { - validNames[ctr.Names[0][1:]] = struct{}{} + validIds[ctr.IdShort] = struct{}{} } - for name := range containerCpuMap { - if _, exists := validNames[name]; !exists { - delete(containerCpuMap, name) + for id := range containerCpuMap { + if _, exists := validIds[id]; !exists { + delete(containerCpuMap, id) } } return containerStats, nil } -func getContainerStats(ctr Container) (ContainerStats, error) { - resp, err := client.Get("http://localhost/containers/" + ctr.ID + "/stats?stream=0&one-shot=1") +func getContainerStats(ctr *Container) (ContainerStats, error) { + resp, err := client.Get("http://localhost/containers/" + ctr.IdShort + "/stats?stream=0&one-shot=1") if err != nil { return ContainerStats{}, err } @@ -244,16 +245,16 @@ func getContainerStats(ctr Container) (ContainerStats, error) { // add default values to containerCpu if it doesn't exist // containerCpuMutex.Lock() // defer containerCpuMutex.Unlock() - if _, ok := containerCpuMap[name]; !ok { - containerCpuMap[name] = [2]uint64{0, 0} + if _, ok := containerCpuMap[ctr.IdShort]; !ok { + containerCpuMap[ctr.IdShort] = [2]uint64{0, 0} } - cpuDelta := statsJson.CPUStats.CPUUsage.TotalUsage - containerCpuMap[name][0] - systemDelta := statsJson.CPUStats.SystemUsage - containerCpuMap[name][1] + cpuDelta := statsJson.CPUStats.CPUUsage.TotalUsage - containerCpuMap[ctr.IdShort][0] + systemDelta := statsJson.CPUStats.SystemUsage - containerCpuMap[ctr.IdShort][1] cpuPct := float64(cpuDelta) / float64(systemDelta) * 100 if cpuPct > 100 { return ContainerStats{}, fmt.Errorf("%s cpu pct greater than 100: %+v", name, cpuPct) } - containerCpuMap[name] = [2]uint64{statsJson.CPUStats.CPUUsage.TotalUsage, statsJson.CPUStats.SystemUsage} + containerCpuMap[ctr.IdShort] = [2]uint64{statsJson.CPUStats.CPUUsage.TotalUsage, statsJson.CPUStats.SystemUsage} cStats := ContainerStats{ Name: name, diff --git a/agent/types.go b/agent/types.go index bd34eeb..9b6c447 100644 --- a/agent/types.go +++ b/agent/types.go @@ -4,6 +4,7 @@ import "time" type Container struct { ID string `json:"Id"` + IdShort string Names []string Image string ImageID string