parent
0f0dbe34ce
commit
9158290982
|
@ -0,0 +1,29 @@
|
|||
package gotoc
|
||||
|
||||
import (
|
||||
|
||||
|
||||
|
||||
)
|
||||
/*
|
||||
|
||||
#include "../../../../../Include/sigar.h"
|
||||
|
||||
|
||||
|
||||
*/
|
||||
import "C"
|
||||
|
||||
func Avg()C.sigar_loadavg_t{
|
||||
|
||||
var sigar *C.sigar_t=GetSigarHandle()
|
||||
|
||||
var avg C.sigar_loadavg_t
|
||||
|
||||
|
||||
C.sigar_loadavg_get(sigar, &avg)
|
||||
|
||||
|
||||
return avg
|
||||
|
||||
}
|
|
@ -0,0 +1,52 @@
|
|||
package gotoc
|
||||
|
||||
|
||||
import (
|
||||
|
||||
|
||||
"unsafe"
|
||||
)
|
||||
|
||||
|
||||
//#include "../../../../../Include/sigar.h"
|
||||
import "C"
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
func Cpu() (C.sigar_cpu_list_t,[]C.sigar_cpu_t){
|
||||
|
||||
|
||||
|
||||
var sigar *C.sigar_t=GetSigarHandle()
|
||||
|
||||
var cpulists C.sigar_cpu_list_t
|
||||
|
||||
C.sigar_cpu_list_get(sigar, &cpulists)
|
||||
|
||||
var length int=int(cpulists.number)
|
||||
|
||||
|
||||
usp:=GetGoSlice(length, unsafe.Pointer(cpulists.data))
|
||||
|
||||
var goCpu []C.sigar_cpu_t
|
||||
goCpu = *(*[]C.sigar_cpu_t)(unsafe.Pointer(&usp))
|
||||
|
||||
|
||||
C.sigar_cpu_list_destroy(sigar, &cpulists)
|
||||
|
||||
|
||||
|
||||
return cpulists, goCpu
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,68 @@
|
|||
package gotoc
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"unsafe"
|
||||
)
|
||||
/*
|
||||
|
||||
#include "../../../../../Include/sigar.h"
|
||||
|
||||
|
||||
|
||||
*/
|
||||
import "C"
|
||||
|
||||
type CpuInfo struct{
|
||||
Vendor string
|
||||
Model string
|
||||
Mhz int
|
||||
MhzMax int
|
||||
MhzMin int
|
||||
CacheSize uint
|
||||
TotalSockets int
|
||||
TotalCores int
|
||||
CorePerSocket int
|
||||
}
|
||||
|
||||
func GetCpuInfo()(result []*CpuInfo, err error){
|
||||
|
||||
defer func() {
|
||||
if r := recover() ; r != nil {
|
||||
err = fmt.Errorf("Failed to rertieve cpu info due to: %v", err)
|
||||
}
|
||||
}()
|
||||
var sigar *C.sigar_t=GetSigarHandle()
|
||||
|
||||
var cpuInfoList C.sigar_cpu_info_list_t
|
||||
|
||||
C.sigar_cpu_info_list_get(sigar, &cpuInfoList)
|
||||
|
||||
var length int=int(cpuInfoList.number)
|
||||
|
||||
cCpuInfo:=GetGoSlice(length, unsafe.Pointer(cpuInfoList.data))
|
||||
|
||||
var goCpuInfo []C.sigar_cpu_info_t
|
||||
goCpuInfo= *(*[]C.sigar_cpu_info_t)(unsafe.Pointer(&cCpuInfo))
|
||||
|
||||
C.sigar_cpu_info_list_destroy(sigar,&cpuInfoList)
|
||||
|
||||
result = make([]*CpuInfo, len(goCpuInfo))
|
||||
for i,sigarCpuinfo := range goCpuInfo {
|
||||
|
||||
result[i] = &CpuInfo{
|
||||
Vendor : C.GoString(&sigarCpuinfo.vendor[0]),
|
||||
Model : C.GoString(&sigarCpuinfo.model[0]),
|
||||
Mhz : int(sigarCpuinfo.mhz),
|
||||
MhzMax : int(sigarCpuinfo.mhz_max),
|
||||
MhzMin : int(sigarCpuinfo.mhz_min),
|
||||
CacheSize : uint(sigarCpuinfo.cache_size),
|
||||
TotalSockets : int(sigarCpuinfo.total_sockets),
|
||||
TotalCores : int(sigarCpuinfo.total_cores),
|
||||
CorePerSocket : int(sigarCpuinfo.cores_per_socket),
|
||||
}
|
||||
}
|
||||
|
||||
return result,nil
|
||||
|
||||
}
|
|
@ -0,0 +1,45 @@
|
|||
package gotoc
|
||||
|
||||
|
||||
import (
|
||||
|
||||
|
||||
"unsafe"
|
||||
)
|
||||
/*
|
||||
#include "../../../../../Include/sigar.h"
|
||||
|
||||
|
||||
|
||||
*/
|
||||
import "C"
|
||||
|
||||
|
||||
func FileInfo() []C.sigar_file_system_t{
|
||||
|
||||
var sigar *C.sigar_t=GetSigarHandle()
|
||||
var fileSystemList C.sigar_file_system_list_t
|
||||
//C.fileInfo(sigar,&fileSystemList)
|
||||
C.sigar_file_system_list_get(sigar, &fileSystemList);
|
||||
|
||||
var length int=int(fileSystemList.number)
|
||||
|
||||
|
||||
cFs:=GetGoSlice(length, unsafe.Pointer(fileSystemList.data))
|
||||
|
||||
var goFs []C.sigar_file_system_t
|
||||
goFs = *(*[]C.sigar_file_system_t)(unsafe.Pointer(&cFs))
|
||||
|
||||
//fmt.Printf("%v\n", C.GoString(&goFs[1].dir_name[0]))
|
||||
C.sigar_file_system_list_destroy(sigar, &fileSystemList);
|
||||
|
||||
return goFs
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,58 @@
|
|||
package gotoc
|
||||
|
||||
import (
|
||||
|
||||
"fmt"
|
||||
"reflect"
|
||||
"unsafe"
|
||||
|
||||
)
|
||||
|
||||
/*
|
||||
#include "../../../../../Include/sigar.h"
|
||||
|
||||
*/
|
||||
import "C"
|
||||
|
||||
var sigar *C.sigar_t=nil
|
||||
func GetSigarHandle()*C.sigar_t{
|
||||
|
||||
if(sigar!=nil){
|
||||
return sigar
|
||||
}
|
||||
sigar=new (C.sigar_t)
|
||||
ret:=C.sigar_open(&sigar)
|
||||
if(ret!=C.SIGAR_OK){
|
||||
return nil
|
||||
}
|
||||
return sigar
|
||||
|
||||
}
|
||||
|
||||
func CloseSigarHandle(sigar *C.sigar_t) {
|
||||
|
||||
if(sigar!=nil){
|
||||
C.sigar_close(sigar)
|
||||
return
|
||||
}
|
||||
fmt.Println("Trying to close a nil handel, ignoring")
|
||||
}
|
||||
|
||||
|
||||
func GetGoSlice(number int, pointer unsafe.Pointer ) reflect.SliceHeader{
|
||||
var length int=int(number)
|
||||
|
||||
|
||||
cObj := reflect.SliceHeader{
|
||||
Data: uintptr(pointer),
|
||||
Len: length,
|
||||
Cap: length,
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
return cObj
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
package gotoc
|
||||
|
||||
import (
|
||||
|
||||
)
|
||||
|
||||
func main(){
|
||||
|
||||
|
||||
NetInfo()
|
||||
}
|
|
@ -0,0 +1,48 @@
|
|||
package gotoc
|
||||
|
||||
|
||||
import (
|
||||
|
||||
|
||||
|
||||
)
|
||||
/*
|
||||
|
||||
#include "../../../../../Include/sigar.h"
|
||||
|
||||
|
||||
|
||||
*/
|
||||
import "C"
|
||||
|
||||
type Info struct {
|
||||
Free int64
|
||||
}
|
||||
|
||||
type MemInfo struct {
|
||||
Mem *Info
|
||||
Swap *Info
|
||||
}
|
||||
|
||||
func GetMemInfo() (*MemInfo, error){
|
||||
|
||||
var sigar *C.sigar_t=GetSigarHandle()
|
||||
var mem C.sigar_mem_t
|
||||
var swap C.sigar_swap_t
|
||||
|
||||
C.sigar_mem_get( sigar, &mem)
|
||||
C.sigar_swap_get(sigar, &swap);
|
||||
|
||||
return &MemInfo{
|
||||
Mem : &Info{ Free : int64(mem.free)},
|
||||
Swap : &Info{ Free : int64(swap.free)},
|
||||
},nil
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,107 @@
|
|||
package gotoc
|
||||
|
||||
|
||||
import (
|
||||
|
||||
"unsafe"
|
||||
|
||||
|
||||
)
|
||||
/*
|
||||
|
||||
#include "../../../../../Include/sigar.h"
|
||||
#include<stdlib.h>
|
||||
#include <stdio.h>
|
||||
typedef unsigned char byte;
|
||||
void translateNetConfig(sigar_t *sigar){
|
||||
|
||||
|
||||
|
||||
|
||||
sigar_net_interface_config_t config;
|
||||
|
||||
|
||||
|
||||
|
||||
sigar_net_interface_config_get(sigar, "eth10", &config);
|
||||
sigar_uint32_t a=config.address.addr.in;
|
||||
|
||||
|
||||
char buf[180];
|
||||
unsigned char* ucp = (unsigned char *)&a;
|
||||
sprintf(buf, "%d.%d.%d.%d", ucp[0] & 0xff, ucp[1] & 0xff, ucp[2] & 0xff, ucp[3] & 0xff);
|
||||
printf("%s\n",buf);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
*/
|
||||
import "C"
|
||||
|
||||
|
||||
func GetNetConfig()(C.sigar_net_interface_config_t,[]C.sigar_net_interface_config_t,[]C.sigar_net_interface_stat_t){
|
||||
|
||||
var sigar *C.sigar_t=GetSigarHandle()
|
||||
var netlistconf C.sigar_net_interface_list_t
|
||||
var netconfPrimary C.sigar_net_interface_config_t
|
||||
|
||||
C.sigar_net_interface_config_primary_get(sigar, &netconfPrimary)
|
||||
|
||||
C.sigar_net_interface_list_get(sigar, &netlistconf)
|
||||
|
||||
var length int=int(netlistconf.number)
|
||||
|
||||
goInterfacesNames := ((*[1 << 30]*C.char)(unsafe.Pointer(netlistconf.data)))[:length]
|
||||
|
||||
//cinteraces:=GetGoSlice(length, unsafe.Pointer(netlistconf.data))
|
||||
//goInterfacesNames := *(*[]C.char)(unsafe.Pointer(&cinteraces))
|
||||
|
||||
var netconf =make([]C.sigar_net_interface_config_t,length)
|
||||
var netstat =make([]C.sigar_net_interface_stat_t,length)
|
||||
|
||||
for i:=0;i<length;i++{
|
||||
|
||||
C.sigar_net_interface_config_get(sigar, goInterfacesNames[i],
|
||||
&netconf[i])
|
||||
|
||||
C.sigar_net_interface_stat_get(sigar, goInterfacesNames[i],
|
||||
&netstat[i])
|
||||
}
|
||||
|
||||
C.sigar_net_interface_list_destroy(sigar, &netlistconf)
|
||||
|
||||
return netconfPrimary, netconf, netstat
|
||||
}
|
||||
|
||||
func GetNetInterfaceConfig(){
|
||||
|
||||
|
||||
//_,netconf,_:=GetNetConfig()
|
||||
|
||||
|
||||
var sigar *C.sigar_t=GetSigarHandle()
|
||||
C.translateNetConfig(sigar)
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
type NetworkService struct {
|
||||
name string
|
||||
RawIdentifier string
|
||||
Id string
|
||||
Broadcast string
|
||||
Address string
|
||||
NetMask string
|
||||
Flags string
|
||||
Mtu string
|
||||
Mac string
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,50 @@
|
|||
package gotoc
|
||||
|
||||
|
||||
import (
|
||||
|
||||
|
||||
"unsafe"
|
||||
|
||||
)
|
||||
/*
|
||||
|
||||
#include "../../../../../Include/sigar.h"
|
||||
|
||||
|
||||
|
||||
*/
|
||||
import "C"
|
||||
|
||||
|
||||
|
||||
func NetConections(flags int)(C.sigar_net_connection_list_t,
|
||||
[]C.sigar_net_connection_t){
|
||||
|
||||
var sigar *C.sigar_t=GetSigarHandle()
|
||||
var netlistconn C.sigar_net_connection_list_t
|
||||
|
||||
|
||||
|
||||
C.sigar_net_connection_list_get(sigar, &netlistconn, C.int(flags))
|
||||
|
||||
var length int=int(netlistconn.number)
|
||||
|
||||
cconnection:=GetGoSlice(length, unsafe.Pointer(netlistconn.data))
|
||||
var goConnections []C.sigar_net_connection_t
|
||||
goConnections = *(*[]C.sigar_net_connection_t)(unsafe.Pointer(&cconnection))
|
||||
|
||||
|
||||
|
||||
C.sigar_net_connection_list_destroy(sigar, &netlistconn)
|
||||
|
||||
|
||||
|
||||
|
||||
return netlistconn, goConnections
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
package gotoc
|
||||
|
||||
|
||||
import (
|
||||
|
||||
|
||||
|
||||
)
|
||||
/*
|
||||
|
||||
#include "../../../../../Include/sigar.h"
|
||||
|
||||
|
||||
|
||||
*/
|
||||
import "C"
|
||||
|
||||
func NetInfo() C.sigar_net_info_t{
|
||||
|
||||
var sigar *C.sigar_t=GetSigarHandle()
|
||||
var netInfo C.sigar_net_info_t
|
||||
C.sigar_net_info_get(sigar, &netInfo)
|
||||
|
||||
|
||||
|
||||
return netInfo
|
||||
|
||||
}
|
|
@ -0,0 +1,57 @@
|
|||
package gotoc
|
||||
|
||||
|
||||
import (
|
||||
|
||||
|
||||
"unsafe"
|
||||
|
||||
|
||||
|
||||
)
|
||||
/*
|
||||
#include "../../../../../Include/sigar.h"
|
||||
|
||||
|
||||
|
||||
*/
|
||||
import "C"
|
||||
|
||||
|
||||
|
||||
func NetRoute() (C.sigar_net_route_list_t ,
|
||||
[]C.sigar_net_route_t){
|
||||
|
||||
|
||||
sigar:=GetSigarHandle()
|
||||
|
||||
var netlist C.sigar_net_route_list_t
|
||||
|
||||
|
||||
|
||||
C.sigar_net_route_list_get(sigar, &netlist)
|
||||
var length int=int(netlist.number)
|
||||
|
||||
var goNetRoute =make([]C.sigar_net_route_t, length)
|
||||
|
||||
|
||||
|
||||
|
||||
croute:=GetGoSlice(length, unsafe.Pointer(netlist.data))
|
||||
|
||||
goNetRoute = *(*[]C.sigar_net_route_t)(unsafe.Pointer(&croute))
|
||||
|
||||
|
||||
C.sigar_net_route_list_destroy(sigar, &netlist)
|
||||
|
||||
|
||||
return netlist, goNetRoute
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,45 @@
|
|||
package gotoc
|
||||
|
||||
|
||||
import (
|
||||
|
||||
|
||||
|
||||
|
||||
)
|
||||
/*
|
||||
|
||||
#include "../../../../../Include/sigar.h"
|
||||
|
||||
|
||||
|
||||
*/
|
||||
import "C"
|
||||
|
||||
func NetUtils(flags int)(C.sigar_net_stat_t,
|
||||
C.sigar_tcp_t,
|
||||
C.sigar_nfs_client_v2_t,
|
||||
C.sigar_nfs_server_v2_t,
|
||||
C.sigar_nfs_client_v3_t,
|
||||
C.sigar_nfs_server_v3_t){
|
||||
|
||||
var sigar *C.sigar_t=GetSigarHandle()
|
||||
var netstat C.sigar_net_stat_t
|
||||
var tcp C.sigar_tcp_t
|
||||
var nfs2 C.sigar_nfs_client_v2_t
|
||||
var nfsServer2 C.sigar_nfs_server_v2_t
|
||||
var nfs3 C.sigar_nfs_client_v3_t
|
||||
var nfsServer3 C.sigar_nfs_server_v3_t
|
||||
|
||||
C.sigar_net_stat_get( sigar,&netstat,C.int(flags))
|
||||
|
||||
C.sigar_tcp_get(sigar,&tcp)
|
||||
|
||||
C.sigar_nfs_client_v2_get(sigar, &nfs2)
|
||||
C.sigar_nfs_server_v2_get (sigar, &nfsServer2)
|
||||
C.sigar_nfs_client_v3_get(sigar, &nfs3)
|
||||
C.sigar_nfs_server_v3_get (sigar, &nfsServer3)
|
||||
return netstat, tcp, nfs2,nfsServer2, nfs3,nfsServer3
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,107 @@
|
|||
package gotoc
|
||||
|
||||
|
||||
import (
|
||||
|
||||
|
||||
"unsafe"
|
||||
|
||||
|
||||
|
||||
)
|
||||
/*
|
||||
|
||||
#include "../../../../../Include/sigar.h"
|
||||
|
||||
|
||||
|
||||
*/
|
||||
import "C"
|
||||
|
||||
|
||||
|
||||
func Ps() ([]C.sigar_proc_state_t ,
|
||||
[]C.sigar_proc_time_t,
|
||||
[]C.sigar_proc_mem_t,
|
||||
[]C.sigar_proc_disk_io_t,
|
||||
[]C.sigar_proc_cumulative_disk_io_t,
|
||||
[]C.sigar_proc_cred_t,
|
||||
[]C.sigar_proc_cred_name_t,
|
||||
[]C.sigar_proc_cpu_t,
|
||||
[]C.sigar_proc_args_t,
|
||||
[]C.sigar_proc_fd_t,
|
||||
[]C.sigar_proc_exe_t){
|
||||
|
||||
|
||||
sigar:=GetSigarHandle()
|
||||
|
||||
var procList C.sigar_proc_list_t
|
||||
|
||||
|
||||
|
||||
C.sigar_proc_list_get(sigar, &procList)
|
||||
var length int=int(procList.number)
|
||||
|
||||
var pstate =make([]C.sigar_proc_state_t, length)
|
||||
var ptime =make([]C.sigar_proc_time_t,length)
|
||||
var pmem =make([]C.sigar_proc_mem_t,length)
|
||||
var pdiskio =make([]C.sigar_proc_disk_io_t,length)
|
||||
var pcumdiskio =make([]C.sigar_proc_cumulative_disk_io_t,length)
|
||||
var pcred =make([]C.sigar_proc_cred_t,length)
|
||||
var pcredname =make([]C.sigar_proc_cred_name_t,length)
|
||||
var pcpu =make([]C.sigar_proc_cpu_t,length)
|
||||
var pargs =make([]C.sigar_proc_args_t,length)
|
||||
var pfd =make([]C.sigar_proc_fd_t,length)
|
||||
var pexe =make([]C.sigar_proc_exe_t,length)
|
||||
|
||||
|
||||
|
||||
cpid:=GetGoSlice(length, unsafe.Pointer(procList.data))
|
||||
var goPid []C.sigar_pid_t
|
||||
goPid = *(*[]C.sigar_pid_t)(unsafe.Pointer(&cpid))
|
||||
|
||||
for i:=0;i<length;i++{
|
||||
|
||||
|
||||
C.sigar_proc_state_get(sigar, goPid[i], &pstate[i])
|
||||
C.sigar_proc_time_get(sigar, goPid[i], &ptime[i])
|
||||
C.sigar_proc_mem_get(sigar, goPid[i], &pmem[i])
|
||||
C.sigar_proc_disk_io_get(sigar, goPid[i], &pdiskio[i])
|
||||
C.sigar_proc_cumulative_disk_io_get(sigar, goPid[i], &pcumdiskio[i])
|
||||
C.sigar_proc_cred_get(sigar, goPid[i], &pcred[i])
|
||||
C.sigar_proc_cred_name_get(sigar, goPid[i], &pcredname[i])
|
||||
C.sigar_proc_cpu_get(sigar, goPid[i], &pcpu[i])
|
||||
C.sigar_proc_fd_get(sigar, goPid[i], &pfd[i])
|
||||
C.sigar_proc_exe_get(sigar, goPid[i], &pexe[i])
|
||||
|
||||
|
||||
C.sigar_proc_args_get(sigar, goPid[i], &pargs[i])
|
||||
C.sigar_proc_args_destroy(sigar, &pargs[i])
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
C.sigar_proc_list_destroy(sigar, &procList)
|
||||
|
||||
return pstate,
|
||||
ptime,
|
||||
pmem,
|
||||
pdiskio,
|
||||
pcumdiskio,
|
||||
pcred,
|
||||
pcredname,
|
||||
pcpu,
|
||||
pargs,
|
||||
pfd,
|
||||
pexe
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
package gotoc
|
||||
|
||||
import (
|
||||
|
||||
|
||||
|
||||
)
|
||||
/*
|
||||
#include "../../../../../Include/sigar.h"
|
||||
|
||||
|
||||
|
||||
*/
|
||||
import "C"
|
||||
|
||||
func Resources()C.sigar_resource_limit_t{
|
||||
|
||||
var resources C.sigar_resource_limit_t
|
||||
|
||||
C.sigar_resource_limit_get(sigar, &resources)
|
||||
|
||||
|
||||
return resources
|
||||
|
||||
}
|
|
@ -0,0 +1,55 @@
|
|||
package gotoc
|
||||
|
||||
import (
|
||||
|
||||
|
||||
"unsafe"
|
||||
)
|
||||
|
||||
/*
|
||||
|
||||
#include "../../../../../Include/sigar.h"
|
||||
|
||||
|
||||
|
||||
#cgo CFLAGS: -I../../../../../Include
|
||||
#cgo LDFLAGS: C:/Users/iuriel/workspace/vmeerkat/leap-project/Include/sigar-amd64-winnt.dll
|
||||
|
||||
|
||||
*/
|
||||
import "C"
|
||||
|
||||
func SysInfo() (C.sigar_sys_info_t, []C.sigar_who_t) {
|
||||
|
||||
var sigar *C.sigar_t=GetSigarHandle()
|
||||
|
||||
var sysInfo C.sigar_sys_info_t
|
||||
|
||||
var wholist C.sigar_who_list_t
|
||||
|
||||
|
||||
C.sigar_sys_info_get(sigar, &sysInfo)
|
||||
|
||||
C.sigar_who_list_get(sigar,&wholist)
|
||||
|
||||
var length int=int(wholist.number)
|
||||
|
||||
var goWho =make([]C.sigar_who_t, length)
|
||||
|
||||
|
||||
|
||||
|
||||
cwho:=GetGoSlice(length, unsafe.Pointer(wholist.data))
|
||||
|
||||
goWho = *(*[]C.sigar_who_t)(unsafe.Pointer(&cwho))
|
||||
|
||||
|
||||
C.sigar_who_list_destroy(sigar , &wholist)
|
||||
|
||||
|
||||
return sysInfo, goWho
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,33 @@
|
|||
package gotoc
|
||||
|
||||
import (
|
||||
|
||||
|
||||
|
||||
)
|
||||
/*
|
||||
|
||||
#include "../../../../../Include/sigar.h"
|
||||
|
||||
|
||||
|
||||
*/
|
||||
import "C"
|
||||
|
||||
func Threads(id int64)C.sigar_thread_cpu_t{
|
||||
|
||||
var threadCpu C.sigar_thread_cpu_t
|
||||
|
||||
var sigar *C.sigar_t=GetSigarHandle()
|
||||
|
||||
C.sigar_thread_cpu_get(sigar , C.sigar_uint64_t(id) ,&threadCpu)
|
||||
|
||||
return threadCpu
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
package gotoc
|
||||
|
||||
import (
|
||||
|
||||
|
||||
|
||||
)
|
||||
/*
|
||||
|
||||
#include "../../../../../Include/sigar.h"
|
||||
|
||||
|
||||
*/
|
||||
import "C"
|
||||
|
||||
func UpTime()C.sigar_uptime_t{
|
||||
|
||||
var sigar *C.sigar_t=GetSigarHandle()
|
||||
|
||||
var uptime C.sigar_uptime_t
|
||||
|
||||
C.sigar_uptime_get(sigar, &uptime)
|
||||
|
||||
|
||||
return uptime
|
||||
|
||||
}
|
|
@ -0,0 +1,123 @@
|
|||
package gotoc
|
||||
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"unsafe"
|
||||
)
|
||||
/*
|
||||
#include <stdlib.h>
|
||||
#include "../../../../../Include/sigar.h"
|
||||
*/
|
||||
import "C"
|
||||
|
||||
type sigar_file_system_usage_t struct {
|
||||
UsedPct float64
|
||||
Total int64
|
||||
Free int64
|
||||
Used int64
|
||||
Avail int64
|
||||
Files int64
|
||||
FreeFiles int64
|
||||
}
|
||||
|
||||
type FsUsage struct {
|
||||
UsedPct float64
|
||||
Total int64
|
||||
Free int64
|
||||
Used int64
|
||||
Avail int64
|
||||
Files int64
|
||||
FreeFiles int64
|
||||
}
|
||||
|
||||
func (this *FsUsage) String() string { return fmt.Sprintf("used: %v, total: %v, free: %v, used: %v, avail: %v, files: %v, freeFiles: %v", this.UsedPct, this.Total, this.Free, this.Used, this.Avail, this.Files, this.FreeFiles) }
|
||||
|
||||
type DiskUsage struct {
|
||||
Reads int64
|
||||
Writes int64
|
||||
WriteBytes int64
|
||||
ReadBytes int64
|
||||
Rtime int64
|
||||
Wtime int64
|
||||
Qtime int64
|
||||
Time int64
|
||||
SnapTime int64
|
||||
ServiceTime float64
|
||||
Queue float64
|
||||
}
|
||||
|
||||
type FsUsageInfo struct {
|
||||
Fs *FsUsage
|
||||
Disk *DiskUsage
|
||||
}
|
||||
|
||||
func GetFsUsageInfo(dirName string, diskName string)(fsUsageInfo *FsUsageInfo,err error){
|
||||
|
||||
var sigar *C.sigar_t=GetSigarHandle()
|
||||
//TODO: noticed that sigar_file_system_usage_t contains a sigar_disk_usage_t member, should there be two invocations?
|
||||
fsUsage, err := _getFsUsage(dirName, sigar)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
diskUsage, err := _getDiskUsage(diskName, sigar) ;
|
||||
if err != nil {
|
||||
return nil,err
|
||||
}
|
||||
|
||||
|
||||
return &FsUsageInfo {fsUsage, diskUsage}, err
|
||||
}
|
||||
|
||||
|
||||
func GetFsUsage(dirName string) (*FsUsage, error) {
|
||||
return _getFsUsage(dirName, GetSigarHandle())
|
||||
}
|
||||
|
||||
func _getFsUsage(dirName string, sigar *C.sigar_t) (out *FsUsage, err error) {
|
||||
var fsusage C.sigar_file_system_usage_t
|
||||
|
||||
dir:=C.CString(dirName)
|
||||
|
||||
C.free(unsafe.Pointer(dir))
|
||||
|
||||
C.sigar_file_system_usage_get(sigar , dir, &fsusage)
|
||||
|
||||
out = &FsUsage{
|
||||
float64(fsusage.use_percent),
|
||||
int64(fsusage.total),
|
||||
int64(fsusage.free),
|
||||
int64(fsusage.used),
|
||||
int64(fsusage.avail),
|
||||
int64(fsusage.files),
|
||||
int64(fsusage.free_files),
|
||||
}
|
||||
|
||||
fmt.Printf("Fs usage for dir %v is %v", dirName, out)
|
||||
return out,nil
|
||||
}
|
||||
|
||||
func GetDiskUsage(diskName string) (*DiskUsage, error) {
|
||||
return _getDiskUsage(diskName, GetSigarHandle())
|
||||
}
|
||||
|
||||
func _getDiskUsage(diskName string, sigar *C.sigar_t) (*DiskUsage, error) {
|
||||
var diskusage C.sigar_disk_usage_t
|
||||
disk:=C.CString(diskName)
|
||||
defer C.free(unsafe.Pointer(disk))
|
||||
C.sigar_disk_usage_get(sigar , disk, &diskusage)
|
||||
return &DiskUsage {
|
||||
int64(diskusage.reads),
|
||||
int64(diskusage.writes),
|
||||
int64(diskusage.write_bytes),
|
||||
int64(diskusage.read_bytes),
|
||||
int64(diskusage.rtime),
|
||||
int64(diskusage.wtime),
|
||||
int64(diskusage.qtime),
|
||||
int64(diskusage.time),
|
||||
int64(diskusage.snaptime),
|
||||
float64(diskusage.service_time),
|
||||
float64(diskusage.queue),
|
||||
},nil
|
||||
}
|
|
@ -0,0 +1,20 @@
|
|||
package gotoc
|
||||
|
||||
import (
|
||||
|
||||
"unsafe"
|
||||
)
|
||||
|
||||
|
||||
//#include <stdlib.h>
|
||||
import "C"
|
||||
|
||||
|
||||
func SigarStringToGoString(cstring *C.char) string{
|
||||
|
||||
var theString string = C.GoString(cstring)
|
||||
|
||||
defer C.free(unsafe.Pointer(cstring))
|
||||
return theString
|
||||
|
||||
}
|
Loading…
Reference in New Issue