作者:avalent
项目:gopsuti
// stolen from https://github.com/cloudfoundry/gosigar
func getCPUTotalTimes() (*CPUTimesStat, error) {
var count C.mach_msg_type_number_t = C.HOST_CPU_LOAD_INFO_COUNT
var cpuload C.host_cpu_load_info_data_t
status := C.host_statistics(C.host_t(C.mach_host_self()),
C.HOST_CPU_LOAD_INFO,
C.host_info_t(unsafe.Pointer(&cpuload)),
&count)
if status != C.KERN_SUCCESS {
return nil, fmt.Errorf("host_statistics error=%d", status)
}
cpu := CPUTimesStat{
CPU: "total"}
var cpu_ticks = make([]uint32, len(cpuload.cpu_ticks))
for i := range cpuload.cpu_ticks {
cpu_ticks[i] = uint32(cpuload.cpu_ticks[i])
}
fillCPUStats(cpu_ticks, &cpu)
return &cpu, nil
}
作者:jnshilan
项目:proden
func (s *CPUStat) Collect() {
// collect CPU stats for All cpus aggregated
var cpuinfo C.host_cpu_load_info_data_t
count := C.mach_msg_type_number_t(C.HOST_CPU_LOAD_INFO_COUNT)
host := C.mach_host_self()
ret := C.host_statistics(C.host_t(host), C.HOST_CPU_LOAD_INFO,
C.host_info_t(unsafe.Pointer(&cpuinfo)), &count)
if ret != C.KERN_SUCCESS {
return
}
s.All.User.Set(uint64(cpuinfo.cpu_ticks[C.CPU_STATE_USER]))
s.All.UserLowPrio.Set(uint64(cpuinfo.cpu_ticks[C.CPU_STATE_NICE]))
s.All.System.Set(uint64(cpuinfo.cpu_ticks[C.CPU_STATE_SYSTEM]))
s.All.Idle.Set(uint64(cpuinfo.cpu_ticks[C.CPU_STATE_IDLE]))
s.All.Total.Set(uint64(cpuinfo.cpu_ticks[C.CPU_STATE_USER]) +
uint64(cpuinfo.cpu_ticks[C.CPU_STATE_SYSTEM]) +
uint64(cpuinfo.cpu_ticks[C.CPU_STATE_NICE]) +
uint64(cpuinfo.cpu_ticks[C.CPU_STATE_IDLE]))
}
作者:tylernisonof
项目:telegra
func allCPUTimes() ([]CPUTimesStat, error) {
var count C.mach_msg_type_number_t = C.HOST_CPU_LOAD_INFO_COUNT
var cpuload C.host_cpu_load_info_data_t
status := C.host_statistics(C.host_t(C.mach_host_self()),
C.HOST_CPU_LOAD_INFO,
C.host_info_t(unsafe.Pointer(&cpuload)),
&count)
if status != C.KERN_SUCCESS {
return nil, fmt.Errorf("host_statistics error=%d", status)
}
c := CPUTimesStat{
CPU: "cpu-total",
User: float64(cpuload.cpu_ticks[C.CPU_STATE_USER]) / ClocksPerSec,
System: float64(cpuload.cpu_ticks[C.CPU_STATE_SYSTEM]) / ClocksPerSec,
Nice: float64(cpuload.cpu_ticks[C.CPU_STATE_NICE]) / ClocksPerSec,
Idle: float64(cpuload.cpu_ticks[C.CPU_STATE_IDLE]) / ClocksPerSec,
Iowait: -1,
Irq: -1,
Softirq: -1,
Steal: -1,
Guest: -1,
GuestNice: -1,
Stolen: -1,
}
return []CPUTimesStat{c}, nil
}
作者:heavilessros
项目:gopro
func cpuTimeTotal() int {
selfHost := C.mach_host_self()
hostInfo := C.malloc(C.size_t(C.HOST_CPU_LOAD_INFO_COUNT))
count := C.mach_msg_type_number_t(C.HOST_CPU_LOAD_INFO_COUNT)
err := C.host_statistics(C.host_t(selfHost), C.HOST_CPU_LOAD_INFO, C.host_info_t(hostInfo), &count)
defer C.free(hostInfo)
if err != C.kern_return_t(C.KERN_SUCCESS) {
return 0
}
return -1
}
作者:nkt
项目:golang-devops-stuf
func vm_info(vmstat *C.vm_statistics_data_t) error {
var count C.mach_msg_type_number_t = C.HOST_VM_INFO_COUNT
status := C.host_statistics(
C.host_t(C.mach_host_self()),
C.HOST_VM_INFO,
C.host_info_t(unsafe.Pointer(vmstat)),
&count)
if status != C.KERN_SUCCESS {
return fmt.Errorf("host_statistics=%d", status)
}
return nil
}
作者:sdolan9
项目:inspec
// Collect populates various cpu performance statistics - use MACH interface
func (s *CPUStat) Collect() {
// collect CPU stats for All cpus aggregated
var cpuinfo C.host_cpu_load_info_data_t
var hostinfo C.host_basic_info_data_t
cpuloadnumber := C.mach_msg_type_number_t(C.HOST_CPU_LOAD_INFO_COUNT)
hostnumber := C.mach_msg_type_number_t(C.HOST_BASIC_INFO_COUNT)
host := C.mach_host_self()
ret := C.host_statistics(C.host_t(host), C.HOST_CPU_LOAD_INFO,
C.host_info_t(unsafe.Pointer(&cpuinfo)), &cpuloadnumber)
if ret != C.KERN_SUCCESS {
return
}
ret = C.host_info(C.host_t(host), C.HOST_BASIC_INFO,
C.host_info_t(unsafe.Pointer(&hostinfo)), &hostnumber)
if ret != C.KERN_SUCCESS {
return
}
s.All.User.Set(uint64(cpuinfo.cpu_ticks[C.CPU_STATE_USER]))
s.All.UserLowPrio.Set(uint64(cpuinfo.cpu_ticks[C.CPU_STATE_NICE]))
s.All.System.Set(uint64(cpuinfo.cpu_ticks[C.CPU_STATE_SYSTEM]))
s.All.Idle.Set(uint64(cpuinfo.cpu_ticks[C.CPU_STATE_IDLE]))
s.All.Total.Set(uint64(cpuinfo.cpu_ticks[C.CPU_STATE_USER]) +
uint64(cpuinfo.cpu_ticks[C.CPU_STATE_SYSTEM]) +
uint64(cpuinfo.cpu_ticks[C.CPU_STATE_NICE]) +
uint64(cpuinfo.cpu_ticks[C.CPU_STATE_IDLE]))
s.All.UsageCount.Set(s.All.Usage())
s.All.UserSpaceCount.Set(s.All.UserSpace())
s.All.KernelCount.Set(s.All.Kernel())
s.All.TotalCount.Set(float64(hostinfo.logical_cpu_max))
}
作者:entuert
项目:sysmo
func HostStatisticsCpuLoadInfo() (*HostCpuLoadInfoData, error) {
var (
count C.mach_msg_type_number_t = C.HOST_CPU_LOAD_INFO_COUNT
cpuload C.host_cpu_load_info_data_t
)
status := C.host_statistics(
C.host_t(C.mach_host_self()),
C.HOST_CPU_LOAD_INFO,
C.host_info_t(unsafe.Pointer(&cpuload)),
&count)
if status != C.KERN_SUCCESS {
return nil, fmt.Errorf("host_statistics error=%d", status)
}
return (*HostCpuLoadInfoData)(&cpuload), nil
}
作者:sdolan9
项目:inspec
// Collect uses mach interface to populate various memory usage
// metrics
func (s *MemStat) Collect() {
var meminfo C.vm_statistics64_data_t
count := C.mach_msg_type_number_t(C.HOST_VM_INFO64_COUNT)
host := C.mach_host_self()
ret := C.host_statistics64(C.host_t(host), C.HOST_VM_INFO64,
C.host_info_t(unsafe.Pointer(&meminfo)), &count)
if ret != C.KERN_SUCCESS {
return
}
s.RawFree.Set(float64(meminfo.free_count) * float64(s.Pagesize))
s.Active.Set(float64(meminfo.active_count) * float64(s.Pagesize))
s.Inactive.Set(float64(meminfo.inactive_count) * float64(s.Pagesize))
s.Wired.Set(float64(meminfo.wire_count) * float64(s.Pagesize))
s.Purgeable.Set(float64(meminfo.purgeable_count) * float64(s.Pagesize))
s.RawTotal.Set(float64(C.get_phys_memory()))
}
作者:nkt
项目:golang-devops-stuf
func (self *Cpu) Get() error {
var count C.mach_msg_type_number_t = C.HOST_CPU_LOAD_INFO_COUNT
var cpuload C.host_cpu_load_info_data_t
status := C.host_statistics(C.host_t(C.mach_host_self()),
C.HOST_CPU_LOAD_INFO,
C.host_info_t(unsafe.Pointer(&cpuload)),
&count)
if status != C.KERN_SUCCESS {
return fmt.Errorf("host_statistics error=%d", status)
}
self.User = uint64(cpuload.cpu_ticks[C.CPU_STATE_USER])
self.Sys = uint64(cpuload.cpu_ticks[C.CPU_STATE_SYSTEM])
self.Idle = uint64(cpuload.cpu_ticks[C.CPU_STATE_IDLE])
self.Nice = uint64(cpuload.cpu_ticks[C.CPU_STATE_NICE])
return nil
}
作者:ChongFen
项目:beat
// VirtualMemory returns VirtualmemoryStat.
func VirtualMemory() (*VirtualMemoryStat, error) {
count := C.mach_msg_type_number_t(C.HOST_VM_INFO_COUNT)
var vmstat C.vm_statistics_data_t
status := C.host_statistics(C.host_t(C.mach_host_self()),
C.HOST_VM_INFO,
C.host_info_t(unsafe.Pointer(&vmstat)),
&count)
if status != C.KERN_SUCCESS {
return nil, fmt.Errorf("host_statistics error=%d", status)
}
pageSize := uint64(syscall.Getpagesize())
total, err := getHwMemsize()
if err != nil {
return nil, err
}
totalCount := C.natural_t(total / pageSize)
availableCount := vmstat.inactive_count + vmstat.free_count
usedPercent := 100 * float64(totalCount-availableCount) / float64(totalCount)
usedCount := totalCount - availableCount
return &VirtualMemoryStat{
Total: total,
Available: pageSize * uint64(availableCount),
Used: pageSize * uint64(usedCount),
UsedPercent: usedPercent,
Free: pageSize * uint64(vmstat.free_count),
Active: pageSize * uint64(vmstat.active_count),
Inactive: pageSize * uint64(vmstat.inactive_count),
Wired: pageSize * uint64(vmstat.wire_count),
}, nil
}