sigar/go_bindings/gotoc/mem.go

93 lines
1.8 KiB
Go

package gotoc
import (
"fmt"
"github.com/vmware/leap/util"
)
/*
#include "../../../../../Include/sigar.h"
*/
import "C"
type Mem struct {
Ram uint64
Total uint64
Used uint64
Free uint64
ActualUsed uint64
ActualFree uint64
UsedPerecent float64
FreePerecent float64
}
func (this *Mem) String() string {
return fmt.Sprintf("Mem: %vK av, %vK used, %vK free", (this.Total / 1024),(this.Used / 1024), (this.Free / 1024))
}
type Swap struct {
Total uint64
Used uint64
Free uint64
PageIn uint64
PageOut uint64
}
func (this *Swap) String() string {
return fmt.Sprintf("Swap: %vK av, %vK used, %vK free", (this.Total / 1024),(this.Used / 1024), (this.Free / 1024))
}
type MemInfo struct {
Mem *Mem
Swap *Swap
}
func GetTotalMem() (total uint64,err error) {
defer util.Panic2Error(&err)
var sigar *C.sigar_t=GetSigarHandle()
var mem C.sigar_mem_t
status := int(C.sigar_mem_get(sigar, &mem))
if status != SIGAR_OK {
return 0,fmt.Errorf("Failed to rertieve sys mem info with error: %v", status)
}
return uint64(mem.total),nil
}
func GetMemInfo() (result *MemInfo,err error){
defer util.Panic2Error(&err)
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 : &Mem{
Ram : uint64(mem.ram),
Total : uint64(mem.total),
Used : uint64(mem.used),
Free : uint64(mem.free),
ActualUsed : uint64(mem.actual_used),
ActualFree : uint64(mem.actual_free),
UsedPerecent : float64(mem.used_percent),
FreePerecent : float64(mem.free_percent),
},
Swap : &Swap{
Total : uint64(swap.total),
Used : uint64(swap.used),
Free : uint64(swap.free),
PageIn : uint64(swap.page_in),
PageOut : uint64(swap.page_out),
},
},nil
}