| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- // +build aix
- package perfstat
- /*
- #cgo LDFLAGS: -lperfstat
- #include <libperfstat.h>
- #include <stdlib.h>
- #include <string.h>
- #include "c_helpers.h"
- */
- import "C"
- import (
- "fmt"
- "runtime"
- "time"
- "unsafe"
- )
- func CpuStat() ([]CPU, error) {
- var cpustat *C.perfstat_cpu_t
- var cpu C.perfstat_id_t
- ncpu := runtime.NumCPU()
- cpustat_len := C.sizeof_perfstat_cpu_t * C.ulong(ncpu)
- cpustat = (*C.perfstat_cpu_t)(C.malloc(cpustat_len))
- defer C.free(unsafe.Pointer(cpustat))
- C.strcpy(&cpu.name[0], C.CString(C.FIRST_CPU))
- r := C.perfstat_cpu(&cpu, cpustat, C.sizeof_perfstat_cpu_t, C.int(ncpu))
- if r <= 0 {
- return nil, fmt.Errorf("error perfstat_cpu()")
- }
- c := make([]CPU, r)
- for i := 0; i < int(r); i++ {
- n := C.get_cpu_stat(cpustat, C.int(i))
- if n != nil {
- c[i] = perfstatcpu2cpu(n)
- }
- }
- return c, nil
- }
- func CpuTotalStat() (*CPUTotal, error) {
- var cpustat *C.perfstat_cpu_total_t
- cpustat = (*C.perfstat_cpu_total_t)(C.malloc(C.sizeof_perfstat_cpu_total_t))
- defer C.free(unsafe.Pointer(cpustat))
- r := C.perfstat_cpu_total(nil, cpustat, C.sizeof_perfstat_cpu_total_t, 1)
- if r <= 0 {
- return nil, fmt.Errorf("error perfstat_cpu_total()")
- }
- c := perfstatcputotal2cputotal(cpustat)
- return &c, nil
- }
- func CpuUtilStat(intvl time.Duration) (*CPUUtil, error) {
- var cpuutil *C.perfstat_cpu_util_t
- var newt *C.perfstat_cpu_total_t
- var oldt *C.perfstat_cpu_total_t
- var data C.perfstat_rawdata_t
- oldt = (*C.perfstat_cpu_total_t)(C.malloc(C.sizeof_perfstat_cpu_total_t))
- newt = (*C.perfstat_cpu_total_t)(C.malloc(C.sizeof_perfstat_cpu_total_t))
- cpuutil = (*C.perfstat_cpu_util_t)(C.malloc(C.sizeof_perfstat_cpu_util_t))
- defer C.free(unsafe.Pointer(oldt))
- defer C.free(unsafe.Pointer(newt))
- defer C.free(unsafe.Pointer(cpuutil))
- r := C.perfstat_cpu_total(nil, oldt, C.sizeof_perfstat_cpu_total_t, 1)
- if r <= 0 {
- return nil, fmt.Errorf("error perfstat_cpu_total()")
- }
- time.Sleep(intvl)
- r = C.perfstat_cpu_total(nil, newt, C.sizeof_perfstat_cpu_total_t, 1)
- if r <= 0 {
- return nil, fmt.Errorf("error perfstat_cpu_total()")
- }
- data._type = C.UTIL_CPU_TOTAL
- data.curstat = unsafe.Pointer(newt)
- data.prevstat = unsafe.Pointer(oldt)
- data.sizeof_data = C.sizeof_perfstat_cpu_total_t
- data.cur_elems = 1
- data.prev_elems = 1
- r = C.perfstat_cpu_util(&data, cpuutil, C.sizeof_perfstat_cpu_util_t, 1)
- if r <= 0 {
- return nil, fmt.Errorf("error perfstat_cpu_util()")
- }
- u := perfstatcpuutil2cpuutil(cpuutil)
- return &u, nil
- }
|