From d26900de91acbdf5f188f7273c8a429459842a75 Mon Sep 17 00:00:00 2001 From: Tom Barker Date: Thu, 19 Aug 2021 11:01:42 -0400 Subject: [PATCH 1/5] Copy ProcessCreated field from v2 to v3. --- v3/load/load.go | 1 + v3/load/load_linux.go | 2 ++ v3/load/load_test.go | 3 ++- 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/v3/load/load.go b/v3/load/load.go index 6e87f2e69..0da50904e 100644 --- a/v3/load/load.go +++ b/v3/load/load.go @@ -21,6 +21,7 @@ func (l AvgStat) String() string { type MiscStat struct { ProcsTotal int `json:"procsTotal"` + ProcsCreated int `json:"procsCreated"` ProcsRunning int `json:"procsRunning"` ProcsBlocked int `json:"procsBlocked"` Ctxt int `json:"ctxt"` diff --git a/v3/load/load_linux.go b/v3/load/load_linux.go index e4014e2ab..c981d99ba 100644 --- a/v3/load/load_linux.go +++ b/v3/load/load_linux.go @@ -92,6 +92,8 @@ func MiscWithContext(ctx context.Context) (*MiscStat, error) { continue } switch fields[0] { + case "processes": + ret.ProcsCreated = int(v) case "procs_running": ret.ProcsRunning = int(v) case "procs_blocked": diff --git a/v3/load/load_test.go b/v3/load/load_test.go index e9dac0f75..a5d28667a 100644 --- a/v3/load/load_test.go +++ b/v3/load/load_test.go @@ -57,11 +57,12 @@ func TestMisc(t *testing.T) { func TestMiscStatString(t *testing.T) { v := MiscStat{ ProcsTotal: 4, + ProcsCreated: 5, ProcsRunning: 1, ProcsBlocked: 2, Ctxt: 3, } - e := `{"procsTotal":4,"procsRunning":1,"procsBlocked":2,"ctxt":3}` + e := `{"procsTotal":4,"procsCreated":5,"procsRunning":1,"procsBlocked":2,"ctxt":3}` if e != fmt.Sprintf("%v", v) { t.Errorf("TestMiscString string is invalid: %v", v) } From bf1ba0373691a3395d4a421d7d67041dc64b0d32 Mon Sep 17 00:00:00 2001 From: Punya Biswal Date: Fri, 1 Oct 2021 14:22:36 -0400 Subject: [PATCH 2/5] Copy BSD implementation to v3 --- v3/load/load_bsd.go | 13 +++++++++++++ v3/load/load_freebsd.go | 7 +++++++ v3/load/load_openbsd.go | 17 +++++++++++++++++ 3 files changed, 37 insertions(+) create mode 100644 v3/load/load_freebsd.go create mode 100644 v3/load/load_openbsd.go diff --git a/v3/load/load_bsd.go b/v3/load/load_bsd.go index dfac10c42..5c610a54e 100644 --- a/v3/load/load_bsd.go +++ b/v3/load/load_bsd.go @@ -1,3 +1,4 @@ +//go:build freebsd || openbsd // +build freebsd openbsd package load @@ -37,6 +38,12 @@ func AvgWithContext(ctx context.Context) (*AvgStat, error) { return ret, nil } +type forkstat struct { + forks int + vforks int + __tforks int +} + // Misc returns miscellaneous host-wide statistics. // darwin use ps command to get process running/blocked count. // Almost same as Darwin implementation, but state is different. @@ -64,5 +71,11 @@ func MiscWithContext(ctx context.Context) (*MiscStat, error) { } } + f, err := getForkStat() + if err != nil { + return nil, err + } + ret.ProcsCreated = f.forks + return &ret, nil } diff --git a/v3/load/load_freebsd.go b/v3/load/load_freebsd.go new file mode 100644 index 000000000..bee8f554d --- /dev/null +++ b/v3/load/load_freebsd.go @@ -0,0 +1,7 @@ +// +build freebsd + +package load + +func getForkStat() (forkstat, error) { + return forkstat{}, nil +} diff --git a/v3/load/load_openbsd.go b/v3/load/load_openbsd.go new file mode 100644 index 000000000..b299f582f --- /dev/null +++ b/v3/load/load_openbsd.go @@ -0,0 +1,17 @@ +// +build openbsd + +package load + +import ( + "unsafe" + + "golang.org/x/sys/unix" +) + +func getForkStat() (forkstat, error) { + b, err := unix.SysctlRaw("kern.forkstat") + if err != nil { + return forkstat{}, err + } + return *(*forkstat)(unsafe.Pointer((&b[0]))), nil +} From 7b10596d956f61de0e49c8631584dd7043315c0c Mon Sep 17 00:00:00 2001 From: Punya Biswal Date: Mon, 4 Oct 2021 12:23:07 -0400 Subject: [PATCH 3/5] Poke CI From a8969d01e8ba1633538dc780a4d5c199b359b3cf Mon Sep 17 00:00:00 2001 From: Punya Biswal Date: Wed, 6 Oct 2021 14:53:29 -0400 Subject: [PATCH 4/5] Poke CI From 1a0c514676df7bbe3ec661f3751206bc00482926 Mon Sep 17 00:00:00 2001 From: Punya Biswal Date: Wed, 6 Oct 2021 15:55:38 -0400 Subject: [PATCH 5/5] Poke CI