caddy-log-exporter/vendor/github.com/power-devops/perfstat/lvmstat.go

73 lines
1.8 KiB
Go

// +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 LogicalVolumeStat() ([]LogicalVolume, error) {
var lv *C.perfstat_logicalvolume_t
var lvname C.perfstat_id_t
numlvs := C.perfstat_logicalvolume(nil, nil, C.sizeof_perfstat_logicalvolume_t, 0)
if numlvs <= 0 {
return nil, fmt.Errorf("perfstat_logicalvolume() error")
}
lv_len := C.sizeof_perfstat_logicalvolume_t * C.ulong(numlvs)
lv = (*C.perfstat_logicalvolume_t)(C.malloc(lv_len))
defer C.free(unsafe.Pointer(lv))
C.strcpy(&lvname.name[0], C.CString(""))
r := C.perfstat_logicalvolume(&lvname, lv, C.sizeof_perfstat_logicalvolume_t, numlvs)
if r < 0 {
return nil, fmt.Errorf("perfstat_logicalvolume() error")
}
lvs := make([]LogicalVolume, r)
for i := 0; i < int(r); i++ {
l := C.get_logicalvolume_stat(lv, C.int(i))
if l != nil {
lvs[i] = perfstatlogicalvolume2logicalvolume(l)
}
}
return lvs, nil
}
func VolumeGroupStat() ([]VolumeGroup, error) {
var vg *C.perfstat_volumegroup_t
var vgname C.perfstat_id_t
numvgs := C.perfstat_volumegroup(nil, nil, C.sizeof_perfstat_volumegroup_t, 0)
if numvgs <= 0 {
return nil, fmt.Errorf("perfstat_volumegroup() error")
}
vg_len := C.sizeof_perfstat_volumegroup_t * C.ulong(numvgs)
vg = (*C.perfstat_volumegroup_t)(C.malloc(vg_len))
defer C.free(unsafe.Pointer(vg))
C.strcpy(&vgname.name[0], C.CString(""))
r := C.perfstat_volumegroup(&vgname, vg, C.sizeof_perfstat_volumegroup_t, numvgs)
if r < 0 {
return nil, fmt.Errorf("perfstat_volumegroup() error")
}
vgs := make([]VolumeGroup, r)
for i := 0; i < int(r); i++ {
v := C.get_volumegroup_stat(vg, C.int(i))
if v != nil {
vgs[i] = perfstatvolumegroup2volumegroup(v)
}
}
return vgs, nil
}