diff --git a/v3/docker/docker_linux.go b/v3/docker/docker_linux.go index a84738d7..650f7a25 100644 --- a/v3/docker/docker_linux.go +++ b/v3/docker/docker_linux.go @@ -89,7 +89,7 @@ func GetDockerIDListWithContext(ctx context.Context) ([]string, error) { // containerID is same as docker id if you use docker. // If you use container via systemd.slice, you could use // containerID = docker-.scope and base=/sys/fs/cgroup/cpuacct/system.slice/ -func CgroupCPU(containerID string, base string) (*cpu.TimesStat, error) { +func CgroupCPU(containerID string, base string) (*CgroupCPUStat, error) { return CgroupCPUWithContext(context.Background(), containerID, base) } @@ -101,7 +101,7 @@ func CgroupCPUUsage(containerID string, base string) (float64, error) { return CgroupCPUUsageWithContext(context.Background(), containerID, base) } -func CgroupCPUWithContext(ctx context.Context, containerID string, base string) (*cpu.TimesStat, error) { +func CgroupCPUWithContext(ctx context.Context, containerID string, base string) (*CgroupCPUStat, error) { statfile := getCgroupFilePath(containerID, base, "cpuacct", "cpuacct.stat") lines, err := common.ReadLines(statfile) if err != nil { @@ -111,7 +111,9 @@ func CgroupCPUWithContext(ctx context.Context, containerID string, base string) if len(containerID) == 0 { containerID = "all" } - ret := &cpu.TimesStat{CPU: containerID} + + ret := &CgroupCPUStat{} + ret.CPU = containerID for _, line := range lines { fields := strings.Split(line, " ") if fields[0] == "user" { @@ -127,6 +129,11 @@ func CgroupCPUWithContext(ctx context.Context, containerID string, base string) } } } + usage, err := CgroupCPUUsageWithContext(ctx, containerID, base) + if err != nil { + return nil, err + } + ret.Usage = usage return ret, nil } @@ -145,7 +152,7 @@ func CgroupCPUUsageWithContext(ctx context.Context, containerID, base string) (f return ns / nanoseconds, nil } -func CgroupCPUDocker(containerid string) (*cpu.TimesStat, error) { +func CgroupCPUDocker(containerid string) (*CgroupCPUStat, error) { return CgroupCPUDockerWithContext(context.Background(), containerid) } @@ -153,7 +160,7 @@ func CgroupCPUUsageDocker(containerid string) (float64, error) { return CgroupCPUDockerUsageWithContext(context.Background(), containerid) } -func CgroupCPUDockerWithContext(ctx context.Context, containerid string) (*cpu.TimesStat, error) { +func CgroupCPUDockerWithContext(ctx context.Context, containerid string) (*CgroupCPUStat, error) { return CgroupCPU(containerid, common.HostSys("fs/cgroup/cpuacct/docker")) } diff --git a/v3/docker/docker_notlinux.go b/v3/docker/docker_notlinux.go index f44a94c3..8df6a7c7 100644 --- a/v3/docker/docker_notlinux.go +++ b/v3/docker/docker_notlinux.go @@ -5,7 +5,6 @@ package docker import ( "context" - cpu "github.com/shirou/gopsutil/v3/cpu" "github.com/shirou/gopsutil/v3/internal/common" ) @@ -33,19 +32,19 @@ func GetDockerIDListWithContext(ctx context.Context) ([]string, error) { // containerid is same as docker id if you use docker. // If you use container via systemd.slice, you could use // containerid = docker-.scope and base=/sys/fs/cgroup/cpuacct/system.slice/ -func CgroupCPU(containerid string, base string) (*cpu.TimesStat, error) { +func CgroupCPU(containerid string, base string) (*CgroupCPUStat, error) { return CgroupCPUWithContext(context.Background(), containerid, base) } -func CgroupCPUWithContext(ctx context.Context, containerid string, base string) (*cpu.TimesStat, error) { +func CgroupCPUWithContext(ctx context.Context, containerid string, base string) (*CgroupCPUStat, error) { return nil, ErrCgroupNotAvailable } -func CgroupCPUDocker(containerid string) (*cpu.TimesStat, error) { +func CgroupCPUDocker(containerid string) (*CgroupCPUStat, error) { return CgroupCPUDockerWithContext(context.Background(), containerid) } -func CgroupCPUDockerWithContext(ctx context.Context, containerid string) (*cpu.TimesStat, error) { +func CgroupCPUDockerWithContext(ctx context.Context, containerid string) (*CgroupCPUStat, error) { return CgroupCPU(containerid, common.HostSys("fs/cgroup/cpuacct/docker")) }