From 0617d71557c4bddf3608974a84f041771864ad12 Mon Sep 17 00:00:00 2001 From: lufia Date: Tue, 12 Oct 2021 22:25:49 +0900 Subject: [PATCH] [v3][cpu] add plan9 support --- README.md | 4 +-- v3/cpu/cpu_fallback.go | 2 +- v3/cpu/cpu_plan9.go | 49 +++++++++++++++++++++++++ v3/cpu/cpu_plan9_test.go | 50 ++++++++++++++++++++++++++ v3/cpu/testdata/plan9/2cores/dev/cputype | 1 + v3/cpu/testdata/plan9/2cores/dev/sysstat | 2 ++ v3/cpu/testdata/plan9/2cores/dev/time | 1 + v3/cpu/testdata/plan9/2cores/proc/1/status | 1 + v3/cpu/testdata/plan9/2cores/proc/331/.gitkeep | 0 v3/cpu/testdata/plan9/2cores/proc/54384/status | 1 + v3/cpu/testdata/plan9/2cores/proc/54412/status | 1 + v3/cpu/testdata/plan9/2cores/proc/72/status | 1 + v3/go.mod | 3 +- v3/go.sum | 8 +++-- 14 files changed, 118 insertions(+), 6 deletions(-) create mode 100644 v3/cpu/cpu_plan9.go create mode 100644 v3/cpu/cpu_plan9_test.go create mode 100644 v3/cpu/testdata/plan9/2cores/dev/cputype create mode 100644 v3/cpu/testdata/plan9/2cores/dev/sysstat create mode 100644 v3/cpu/testdata/plan9/2cores/dev/time create mode 100644 v3/cpu/testdata/plan9/2cores/proc/1/status create mode 100644 v3/cpu/testdata/plan9/2cores/proc/331/.gitkeep create mode 100644 v3/cpu/testdata/plan9/2cores/proc/54384/status create mode 100644 v3/cpu/testdata/plan9/2cores/proc/54412/status create mode 100644 v3/cpu/testdata/plan9/2cores/proc/72/status diff --git a/README.md b/README.md index 4786cfa..e7d80f4 100644 --- a/README.md +++ b/README.md @@ -157,8 +157,8 @@ Some code is ported from Ohai. many thanks. |name |Linux |FreeBSD |OpenBSD |macOS |Windows |Solaris |Plan 9 | |----------------------|-------|---------|---------|--------|---------|---------|---------| -|cpu\_times |x |x |x |x |x | | | -|cpu\_count |x |x |x |x |x | | | +|cpu\_times |x |x |x |x |x | |b | +|cpu\_count |x |x |x |x |x | |x | |cpu\_percent |x |x |x |x |x | | | |cpu\_times\_percent |x |x |x |x |x | | | |virtual\_memory |x |x |x |x |x | b |x | diff --git a/v3/cpu/cpu_fallback.go b/v3/cpu/cpu_fallback.go index d659abe..1de597f 100644 --- a/v3/cpu/cpu_fallback.go +++ b/v3/cpu/cpu_fallback.go @@ -1,4 +1,4 @@ -// +build !darwin,!linux,!freebsd,!openbsd,!solaris,!windows,!dragonfly +// +build !darwin,!linux,!freebsd,!openbsd,!solaris,!windows,!dragonfly,!plan9 package cpu diff --git a/v3/cpu/cpu_plan9.go b/v3/cpu/cpu_plan9.go new file mode 100644 index 0000000..1729b85 --- /dev/null +++ b/v3/cpu/cpu_plan9.go @@ -0,0 +1,49 @@ +// +build plan9 + +package cpu + +import ( + "context" + "os" + "runtime" + + stats "github.com/lufia/plan9stats" + "github.com/shirou/gopsutil/v3/internal/common" +) + +func Times(percpu bool) ([]TimesStat, error) { + return TimesWithContext(context.Background(), percpu) +} + +func TimesWithContext(ctx context.Context, percpu bool) ([]TimesStat, error) { + // BUG: percpu flag is not supported yet. + root := os.Getenv("HOST_ROOT") + c, err := stats.ReadCPUType(ctx, stats.WithRootDir(root)) + if err != nil { + return nil, err + } + s, err := stats.ReadCPUStats(ctx, stats.WithRootDir(root)) + if err != nil { + return nil, err + } + return []TimesStat{ + { + CPU: c.Name, + User: s.User.Seconds(), + System: s.Sys.Seconds(), + Idle: s.Idle.Seconds(), + }, + }, nil +} + +func Info() ([]InfoStat, error) { + return InfoWithContext(context.Background()) +} + +func InfoWithContext(ctx context.Context) ([]InfoStat, error) { + return []InfoStat{}, common.ErrNotImplementedError +} + +func CountsWithContext(ctx context.Context, logical bool) (int, error) { + return runtime.NumCPU(), nil +} diff --git a/v3/cpu/cpu_plan9_test.go b/v3/cpu/cpu_plan9_test.go new file mode 100644 index 0000000..4f585f9 --- /dev/null +++ b/v3/cpu/cpu_plan9_test.go @@ -0,0 +1,50 @@ +// +build plan9 + +package cpu + +import ( + "os" + "path/filepath" + "testing" + + "github.com/google/go-cmp/cmp" + "github.com/google/go-cmp/cmp/cmpopts" +) + +var timesTests = []struct { + mockedRootFS string + stats []TimesStat +}{ + { + "2cores", + []TimesStat{ + { + CPU: "Core i7/Xeon", + User: 2780.0 / 1000.0, + System: 30020.0 / 1000.0, + Idle: (1412961713341830*2)/1000000000.0 - 2.78 - 30.02, + }, + }, + }, +} + +func TestTimesPlan9(t *testing.T) { + origRoot := os.Getenv("HOST_ROOT") + t.Cleanup(func() { + os.Setenv("HOST_ROOT", origRoot) + }) + for _, tt := range timesTests { + t.Run(tt.mockedRootFS, func(t *testing.T) { + os.Setenv("HOST_ROOT", filepath.Join("testdata/plan9", tt.mockedRootFS)) + stats, err := Times(false) + skipIfNotImplementedErr(t, err) + if err != nil { + t.Errorf("error %v", err) + } + eps := cmpopts.EquateApprox(0, 0.00000001) + if !cmp.Equal(stats, tt.stats, eps) { + t.Errorf("got: %+v\nwant: %+v", stats, tt.stats) + } + }) + } +} diff --git a/v3/cpu/testdata/plan9/2cores/dev/cputype b/v3/cpu/testdata/plan9/2cores/dev/cputype new file mode 100644 index 0000000..5542d44 --- /dev/null +++ b/v3/cpu/testdata/plan9/2cores/dev/cputype @@ -0,0 +1 @@ +Core i7/Xeon 2403 diff --git a/v3/cpu/testdata/plan9/2cores/dev/sysstat b/v3/cpu/testdata/plan9/2cores/dev/sysstat new file mode 100644 index 0000000..470f89d --- /dev/null +++ b/v3/cpu/testdata/plan9/2cores/dev/sysstat @@ -0,0 +1,2 @@ + 0 59251106 37524162 1208203 65907 0 0 7 100 0 + 1 219155408 28582838 5017097 1002072 0 0 0 98 1 diff --git a/v3/cpu/testdata/plan9/2cores/dev/time b/v3/cpu/testdata/plan9/2cores/dev/time new file mode 100644 index 0000000..311974e --- /dev/null +++ b/v3/cpu/testdata/plan9/2cores/dev/time @@ -0,0 +1 @@ + 1633882064 1633882064926300833 2825920097745864 1999997644 \ No newline at end of file diff --git a/v3/cpu/testdata/plan9/2cores/proc/1/status b/v3/cpu/testdata/plan9/2cores/proc/1/status new file mode 100644 index 0000000..04b58ac --- /dev/null +++ b/v3/cpu/testdata/plan9/2cores/proc/1/status @@ -0,0 +1 @@ +init bootes Await 10 20 1404307210 110 20 0 116 10 10 \ No newline at end of file diff --git a/v3/cpu/testdata/plan9/2cores/proc/331/.gitkeep b/v3/cpu/testdata/plan9/2cores/proc/331/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/v3/cpu/testdata/plan9/2cores/proc/54384/status b/v3/cpu/testdata/plan9/2cores/proc/54384/status new file mode 100644 index 0000000..d9fe006 --- /dev/null +++ b/v3/cpu/testdata/plan9/2cores/proc/54384/status @@ -0,0 +1 @@ +rc lufia Await 0 0 589160 8770 3260 0 248 10 10 \ No newline at end of file diff --git a/v3/cpu/testdata/plan9/2cores/proc/54412/status b/v3/cpu/testdata/plan9/2cores/proc/54412/status new file mode 100644 index 0000000..b5db744 --- /dev/null +++ b/v3/cpu/testdata/plan9/2cores/proc/54412/status @@ -0,0 +1 @@ +git-remote-https lufia Semacquire 390 310 370670 0 0 0 98368 10 10 \ No newline at end of file diff --git a/v3/cpu/testdata/plan9/2cores/proc/72/status b/v3/cpu/testdata/plan9/2cores/proc/72/status new file mode 100644 index 0000000..a54d62a --- /dev/null +++ b/v3/cpu/testdata/plan9/2cores/proc/72/status @@ -0,0 +1 @@ +httpd none Open 2380 29690 1404804330 0 0 0 23616 10 10 \ No newline at end of file diff --git a/v3/go.mod b/v3/go.mod index de49de4..ed885a7 100644 --- a/v3/go.mod +++ b/v3/go.mod @@ -4,7 +4,8 @@ go 1.15 require ( github.com/StackExchange/wmi v1.2.1 - github.com/lufia/plan9stats v0.0.0-20211008203909-9b7c2b47d7c3 + github.com/google/go-cmp v0.5.6 + github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 github.com/stretchr/testify v1.7.0 github.com/tklauser/go-sysconf v0.3.9 golang.org/x/sys v0.0.0-20210816074244-15123e1e1f71 diff --git a/v3/go.sum b/v3/go.sum index c9a43f1..cf73ffb 100644 --- a/v3/go.sum +++ b/v3/go.sum @@ -5,9 +5,13 @@ github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs github.com/go-ole/go-ole v1.2.5 h1:t4MGB5xEDZvXI+0rMjjsfBsD7yAgp/s9ZDkL1JndXwY= github.com/go-ole/go-ole v1.2.5/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/google/go-cmp v0.5.6 h1:BKbKCqvP6I+rmFHt06ZmyQtvB8xAkWdhFyr0ZUNZcxQ= +github.com/google/go-cmp v0.5.6 h1:BKbKCqvP6I+rmFHt06ZmyQtvB8xAkWdhFyr0ZUNZcxQ= +github.com/google/go-cmp v0.5.6 h1:BKbKCqvP6I+rmFHt06ZmyQtvB8xAkWdhFyr0ZUNZcxQ= +github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/lufia/plan9stats v0.0.0-20211008203909-9b7c2b47d7c3 h1:zvvlSubuP3jgjD69jAfrprCEKZkjn0D9FpZ168E1rDc= -github.com/lufia/plan9stats v0.0.0-20211008203909-9b7c2b47d7c3/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I= +github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 h1:6E+4a0GO5zZEnZ81pIr0yLvtUWk2if982qA3F3QD6H4= +github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=