update agent to use short container id

This commit is contained in:
Henry Dollman
2024-07-23 19:51:35 -04:00
parent 52c77dd361
commit 41df7b7392
2 changed files with 16 additions and 14 deletions

View File

@@ -188,7 +188,7 @@ func getDockerStats() ([]ContainerStats, error) {
} }
defer resp.Body.Close() defer resp.Body.Close()
var containers []Container var containers []*Container
if err := json.NewDecoder(resp.Body).Decode(&containers); err != nil { if err := json.NewDecoder(resp.Body).Decode(&containers); err != nil {
panic(err) panic(err)
} }
@@ -196,6 +196,7 @@ func getDockerStats() ([]ContainerStats, error) {
var containerStats []ContainerStats var containerStats []ContainerStats
for _, ctr := range containers { for _, ctr := range containers {
ctr.IdShort = ctr.ID[:12]
cstats, err := getContainerStats(ctr) cstats, err := getContainerStats(ctr)
if err != nil { if err != nil {
// retry once // retry once
@@ -208,22 +209,22 @@ func getDockerStats() ([]ContainerStats, error) {
containerStats = append(containerStats, cstats) containerStats = append(containerStats, cstats)
} }
// clean up old containers from map // clean up old container ids from map
validNames := make(map[string]struct{}, len(containers)) validIds := make(map[string]struct{}, len(containers))
for _, ctr := range containers { for _, ctr := range containers {
validNames[ctr.Names[0][1:]] = struct{}{} validIds[ctr.IdShort] = struct{}{}
} }
for name := range containerCpuMap { for id := range containerCpuMap {
if _, exists := validNames[name]; !exists { if _, exists := validIds[id]; !exists {
delete(containerCpuMap, name) delete(containerCpuMap, id)
} }
} }
return containerStats, nil return containerStats, nil
} }
func getContainerStats(ctr Container) (ContainerStats, error) { func getContainerStats(ctr *Container) (ContainerStats, error) {
resp, err := client.Get("http://localhost/containers/" + ctr.ID + "/stats?stream=0&one-shot=1") resp, err := client.Get("http://localhost/containers/" + ctr.IdShort + "/stats?stream=0&one-shot=1")
if err != nil { if err != nil {
return ContainerStats{}, err return ContainerStats{}, err
} }
@@ -244,16 +245,16 @@ func getContainerStats(ctr Container) (ContainerStats, error) {
// add default values to containerCpu if it doesn't exist // add default values to containerCpu if it doesn't exist
// containerCpuMutex.Lock() // containerCpuMutex.Lock()
// defer containerCpuMutex.Unlock() // defer containerCpuMutex.Unlock()
if _, ok := containerCpuMap[name]; !ok { if _, ok := containerCpuMap[ctr.IdShort]; !ok {
containerCpuMap[name] = [2]uint64{0, 0} containerCpuMap[ctr.IdShort] = [2]uint64{0, 0}
} }
cpuDelta := statsJson.CPUStats.CPUUsage.TotalUsage - containerCpuMap[name][0] cpuDelta := statsJson.CPUStats.CPUUsage.TotalUsage - containerCpuMap[ctr.IdShort][0]
systemDelta := statsJson.CPUStats.SystemUsage - containerCpuMap[name][1] systemDelta := statsJson.CPUStats.SystemUsage - containerCpuMap[ctr.IdShort][1]
cpuPct := float64(cpuDelta) / float64(systemDelta) * 100 cpuPct := float64(cpuDelta) / float64(systemDelta) * 100
if cpuPct > 100 { if cpuPct > 100 {
return ContainerStats{}, fmt.Errorf("%s cpu pct greater than 100: %+v", name, cpuPct) 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{ cStats := ContainerStats{
Name: name, Name: name,

View File

@@ -4,6 +4,7 @@ import "time"
type Container struct { type Container struct {
ID string `json:"Id"` ID string `json:"Id"`
IdShort string
Names []string Names []string
Image string Image string
ImageID string ImageID string