mirror of
https://github.com/fankes/beszel.git
synced 2025-10-19 01:39:34 +08:00
update agent to use short container id
This commit is contained in:
@@ -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,
|
||||||
|
@@ -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
|
||||||
|
Reference in New Issue
Block a user