|
|
@@ -4,6 +4,8 @@ import (
|
|
|
"context"
|
|
|
"fmt"
|
|
|
"log/slog"
|
|
|
+ "goseg/structs"
|
|
|
+ "encoding/json"
|
|
|
"os"
|
|
|
|
|
|
"github.com/docker/docker/api/types"
|
|
|
@@ -68,31 +70,28 @@ func GetContainerNetwork(name string) (string, error) {
|
|
|
return "", fmt.Errorf("container is not attached to any network")
|
|
|
}
|
|
|
|
|
|
-func GetContainerStats(containerName string) (*ContainerStats, error) {
|
|
|
+func GetContainerStats(containerName string) (*structs.ContainerStats, error) {
|
|
|
cli, err := client.NewClientWithOpts(client.FromEnv, client.WithAPIVersionNegotiation())
|
|
|
if err != nil {
|
|
|
return nil, err
|
|
|
}
|
|
|
defer cli.Close()
|
|
|
- stats, err := cli.ContainerStats(context.Background(), containerName, false)
|
|
|
+ statsResp, err := cli.ContainerStats(context.Background(), containerName, false)
|
|
|
if err != nil {
|
|
|
return nil, err
|
|
|
}
|
|
|
- defer stats.Body.Close()
|
|
|
-
|
|
|
+ defer statsResp.Body.Close()
|
|
|
var stat types.StatsJSON
|
|
|
- if err := stats.Decode(&stat); err != nil {
|
|
|
+ if err := json.NewDecoder(statsResp.Body).Decode(&stat); err != nil {
|
|
|
return nil, err
|
|
|
}
|
|
|
memUsage := stat.MemoryStats.Usage
|
|
|
- var diskUsage uint64
|
|
|
- for _, mount := range stat.Mounts {
|
|
|
- if mount.Name == "container_root" {
|
|
|
- diskUsage = mount.SizeRw
|
|
|
- break
|
|
|
- }
|
|
|
+ inspectResp, err := cli.ContainerInspect(context.Background(), containerName)
|
|
|
+ if err != nil {
|
|
|
+ return nil, err
|
|
|
}
|
|
|
- return &ContainerStats{
|
|
|
+ diskUsage := inspectResp.SizeRw
|
|
|
+ return &structs.ContainerStats{
|
|
|
MemoryUsage: memUsage,
|
|
|
DiskUsage: diskUsage,
|
|
|
}, nil
|