Added other stats and json serialization
parent
67233fa2be
commit
cca4180972
@ -1,43 +1,100 @@
|
||||
package main
|
||||
|
||||
// #cgo LDFLAGS: -lstatgrab
|
||||
// #include <statgrab.h>
|
||||
import "C"
|
||||
import "time"
|
||||
import (
|
||||
"log"
|
||||
|
||||
var mainfunc = make(chan func())
|
||||
"github.com/mackerelio/go-osstat/cpu"
|
||||
"github.com/mackerelio/go-osstat/disk"
|
||||
"github.com/mackerelio/go-osstat/loadavg"
|
||||
"github.com/mackerelio/go-osstat/memory"
|
||||
"github.com/mackerelio/go-osstat/network"
|
||||
)
|
||||
|
||||
func do(f func()) {
|
||||
done := make(chan bool, 1)
|
||||
mainfunc <- func() {
|
||||
f()
|
||||
done <- true
|
||||
func (m *Metric) getMemory() error {
|
||||
memory, err := memory.Get()
|
||||
if err != nil {
|
||||
log.Printf("Cannot get memory: %s\n", err)
|
||||
return err
|
||||
}
|
||||
<-done
|
||||
m.MemMetrics.FreeMem = memory.Free
|
||||
m.MemMetrics.TotalMem = memory.Total
|
||||
m.MemMetrics.UsedMem = memory.Used
|
||||
m.MemMetrics.BuffersMem = memory.Buffers
|
||||
m.MemMetrics.CachedMem = memory.Cached
|
||||
m.MemMetrics.AvailableMem = memory.Available
|
||||
m.MemMetrics.ActiveMem = memory.Active
|
||||
m.MemMetrics.InactiveMem = memory.Inactive
|
||||
m.MemMetrics.SwapTotal = memory.SwapTotal
|
||||
m.MemMetrics.SwapUsed = memory.SwapUsed
|
||||
m.MemMetrics.SwapCached = memory.SwapCached
|
||||
m.MemMetrics.SwapFree = memory.SwapFree
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *Stat) CPUStats() *CPUStats {
|
||||
s.Lock()
|
||||
defer s.Unlock()
|
||||
func (m *Metric) getLoadAvg() error {
|
||||
loadAvg, err := loadavg.Get()
|
||||
if err != nil {
|
||||
log.Printf("Cannot get loadAvg(): %s\n", err)
|
||||
return err
|
||||
}
|
||||
m.LoadMetrics.Load1m = loadAvg.Loadavg1
|
||||
m.LoadMetrics.Load5m = loadAvg.Loadavg5
|
||||
m.LoadMetrics.Load15m = loadAvg.Loadavg15
|
||||
return nil
|
||||
}
|
||||
|
||||
var cpu *CPUStats
|
||||
func (m *Metric) getCpuMetric() error {
|
||||
cpu, err := cpu.Get()
|
||||
if err != nil {
|
||||
log.Printf("Cannot get cpu(): %s\n", err)
|
||||
return err
|
||||
}
|
||||
m.CPUMetrics.User = cpu.User
|
||||
m.CPUMetrics.Nice = cpu.Nice
|
||||
m.CPUMetrics.System = cpu.System
|
||||
m.CPUMetrics.Idle = cpu.Idle
|
||||
m.CPUMetrics.Iowait = cpu.Iowait
|
||||
m.CPUMetrics.Irq = cpu.Irq
|
||||
m.CPUMetrics.Softirq = cpu.Softirq
|
||||
m.CPUMetrics.Steal = cpu.Steal
|
||||
m.CPUMetrics.Guest = cpu.Guest
|
||||
m.CPUMetrics.GuestNice = cpu.GuestNice
|
||||
m.CPUMetrics.Total = cpu.Total
|
||||
m.CPUMetrics.CPUCount = cpu.CPUCount
|
||||
m.CPUMetrics.StatCount = cpu.StatCount
|
||||
return nil
|
||||
}
|
||||
|
||||
do(func() {
|
||||
cpup := C.sg_get_cpu_percents_of(C.sg_new_diff_cpu_percent, nil)
|
||||
loadStat := C.sg_get_load_stats(nil)
|
||||
cpu = &CPUStats{
|
||||
User: float64(cpup.user),
|
||||
Kernel: float64(cpup.kernel),
|
||||
Idle: float64(cpup.idle),
|
||||
IOWait: float64(cpup.iowait),
|
||||
Swap: float64(cpup.swap),
|
||||
Nice: float64(cpup.nice),
|
||||
LoadMin1: float64(loadStat.min1),
|
||||
LoadMin5: float64(loadStat.min5),
|
||||
LoadMin15: float64(loadStat.min15),
|
||||
Period: time.Duration(int(cpup.time_taken)) * time.Second,
|
||||
TimeTaken: time.Now(),
|
||||
func (m *Metric) getDiskMetrics() error {
|
||||
disk, err := disk.Get()
|
||||
if err != nil {
|
||||
log.Printf("Cannot get disk(): %s\n", err)
|
||||
return err
|
||||
}
|
||||
for i, _ := range disk {
|
||||
tmpM := DiskMetric{
|
||||
Name: disk[i].Name,
|
||||
WritesCompleted: disk[i].WritesCompleted,
|
||||
ReadsCompleted: disk[i].ReadsCompleted,
|
||||
}
|
||||
})
|
||||
return cpu
|
||||
m.DiskMetrics = append(m.DiskMetrics, tmpM)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (m *Metric) getNetworkMetrics() error {
|
||||
network, err := network.Get()
|
||||
if err != nil {
|
||||
log.Printf("Cannot get network(): %s\n", err)
|
||||
return err
|
||||
}
|
||||
for i, _ := range network {
|
||||
tmpM := NetworkMetric{
|
||||
Name: network[i].Name,
|
||||
TxBytes: network[i].TxBytes,
|
||||
RxBytes: network[i].RxBytes,
|
||||
}
|
||||
m.NetworkMetrics = append(m.NetworkMetrics, tmpM)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
Loading…
Reference in New Issue