package util9 import ( "io" "os" "strconv" "strings") type Sysstat struct { Cpu uint64 ContextSwitches uint64 Interrupts uint64 SystemCalls uint64 PageFaults uint64 TLBFaults uint64 TLBPurges uint64 LoadAverage uint64 IdleTime uint64 InterruptTime uint64} var devsysstat io.ReaderAtvar devsysstaterror error func init() { dstat, err := os.Open("/dev/sysstat") if err != nil { devsysstaterror = err return } devsysstat = dstat} func ReadSysstat() ([]Sysstat, error) { if devsysstat == nil { return nil, devsysstaterror } buf := make([]byte, 8192) n, err := devsysstat.ReadAt(buf, 0) if n <= 0 && err != nil { return nil, err } buf = buf[:n] spl := strings.Split(string(buf), "\n") var stats []Sysstat for _, l := range spl { splnum := strings.Fields(l) if len(splnum) != 10 { continue } stat := Sysstat{} stat.Cpu = atoi(splnum[0]) stat.ContextSwitches = atoi(splnum[1]) stat.Interrupts = atoi(splnum[2]) stat.SystemCalls = atoi(splnum[3]) stat.PageFaults = atoi(splnum[4]) stat.TLBFaults = atoi(splnum[5]) stat.TLBPurges = atoi(splnum[6]) stat.LoadAverage = atoi(splnum[7]) stat.IdleTime = atoi(splnum[8]) stat.InterruptTime = atoi(splnum[9]) stats = append(stats, stat) } return stats, nil} func atoi(n string) uint64 { v, _ := strconv.ParseUint(n, 10, 64) return v}
package util9
import (
"io"
"os"
"strconv"
"strings"
)
type Sysstat struct {
Cpu uint64
ContextSwitches uint64
Interrupts uint64
SystemCalls uint64
PageFaults uint64
TLBFaults uint64
TLBPurges uint64
LoadAverage uint64
IdleTime uint64
InterruptTime uint64
}
var devsysstat io.ReaderAt
var devsysstaterror error
func init() {
dstat, err := os.Open("/dev/sysstat")
if err != nil {
devsysstaterror = err
return
}
devsysstat = dstat
}
func ReadSysstat() ([]Sysstat, error) {
if devsysstat == nil {
return nil, devsysstaterror
}
buf := make([]byte, 8192)
n, err := devsysstat.ReadAt(buf, 0)
if n <= 0 && err != nil {
return nil, err
}
buf = buf[:n]
spl := strings.Split(string(buf), "\n")
var stats []Sysstat
for _, l := range spl {
splnum := strings.Fields(l)
if len(splnum) != 10 {
continue
}
stat := Sysstat{}
stat.Cpu = atoi(splnum[0])
stat.ContextSwitches = atoi(splnum[1])
stat.Interrupts = atoi(splnum[2])
stat.SystemCalls = atoi(splnum[3])
stat.PageFaults = atoi(splnum[4])
stat.TLBFaults = atoi(splnum[5])
stat.TLBPurges = atoi(splnum[6])
stat.LoadAverage = atoi(splnum[7])
stat.IdleTime = atoi(splnum[8])
stat.InterruptTime = atoi(splnum[9])
stats = append(stats, stat)
}
return stats, nil
}
func atoi(n string) uint64 {
v, _ := strconv.ParseUint(n, 10, 64)
return v
}