summaryrefslogtreecommitdiff
path: root/vendor/github.com/power-devops/perfstat/procstat.go
diff options
context:
space:
mode:
authormo khan <mo@mokhan.ca>2025-05-11 21:12:57 -0600
committermo khan <mo@mokhan.ca>2025-05-11 21:12:57 -0600
commit60440f90dca28e99a31dd328c5f6d5dc0f9b6a2e (patch)
tree2f54adf55086516f162f0a55a5347e6b25f7f176 /vendor/github.com/power-devops/perfstat/procstat.go
parent05ca9b8d3a9c7203a3a3b590beaa400900bd9007 (diff)
chore: vendor go dependencies
Diffstat (limited to 'vendor/github.com/power-devops/perfstat/procstat.go')
-rw-r--r--vendor/github.com/power-devops/perfstat/procstat.go75
1 files changed, 75 insertions, 0 deletions
diff --git a/vendor/github.com/power-devops/perfstat/procstat.go b/vendor/github.com/power-devops/perfstat/procstat.go
new file mode 100644
index 0000000..ecafebd
--- /dev/null
+++ b/vendor/github.com/power-devops/perfstat/procstat.go
@@ -0,0 +1,75 @@
+// +build aix
+
+package perfstat
+
+/*
+#cgo LDFLAGS: -lperfstat
+
+#include <libperfstat.h>
+#include <string.h>
+#include <stdlib.h>
+
+#include "c_helpers.h"
+*/
+import "C"
+
+import (
+ "fmt"
+ "unsafe"
+)
+
+func ProcessStat() ([]Process, error) {
+ var proc *C.perfstat_process_t
+ var first C.perfstat_id_t
+
+ numproc := C.perfstat_process(nil, nil, C.sizeof_perfstat_process_t, 0)
+ if numproc < 1 {
+ return nil, fmt.Errorf("perfstat_process() error")
+ }
+
+ plen := C.sizeof_perfstat_process_t * C.ulong(numproc)
+ proc = (*C.perfstat_process_t)(C.malloc(plen))
+ defer C.free(unsafe.Pointer(proc))
+ C.strcpy(&first.name[0], C.CString(""))
+ r := C.perfstat_process(&first, proc, C.sizeof_perfstat_process_t, numproc)
+ if r < 0 {
+ return nil, fmt.Errorf("perfstat_process() error")
+ }
+
+ ps := make([]Process, r)
+ for i := 0; i < int(r); i++ {
+ p := C.get_process_stat(proc, C.int(i))
+ if p != nil {
+ ps[i] = perfstatprocess2process(p)
+ }
+ }
+ return ps, nil
+}
+
+func ThreadStat() ([]Thread, error) {
+ var thread *C.perfstat_thread_t
+ var first C.perfstat_id_t
+
+ numthr := C.perfstat_thread(nil, nil, C.sizeof_perfstat_thread_t, 0)
+ if numthr < 1 {
+ return nil, fmt.Errorf("perfstat_thread() error")
+ }
+
+ thlen := C.sizeof_perfstat_thread_t * C.ulong(numthr)
+ thread = (*C.perfstat_thread_t)(C.malloc(thlen))
+ defer C.free(unsafe.Pointer(thread))
+ C.strcpy(&first.name[0], C.CString(""))
+ r := C.perfstat_thread(&first, thread, C.sizeof_perfstat_thread_t, numthr)
+ if r < 0 {
+ return nil, fmt.Errorf("perfstat_thread() error")
+ }
+
+ th := make([]Thread, r)
+ for i := 0; i < int(r); i++ {
+ t := C.get_thread_stat(thread, C.int(i))
+ if t != nil {
+ th[i] = perfstatthread2thread(t)
+ }
+ }
+ return th, nil
+}