package gosigar import ( "time" ) type ErrNotImplemented struct { OS string } func (e ErrNotImplemented) Error() string { return "not implemented on " + e.OS } func IsNotImplemented(err error) bool { switch err.(type) { case ErrNotImplemented, *ErrNotImplemented: return true default: return false } } type Sigar interface { CollectCpuStats(collectionInterval time.Duration) (<-chan Cpu, chan<- struct{}) GetLoadAverage() (LoadAverage, error) GetMem() (Mem, error) GetSwap() (Swap, error) GetFileSystemUsage(string) (FileSystemUsage, error) GetFDUsage() (FDUsage, error) GetRusage(who int) (Rusage, error) } type Cpu struct { User uint64 Nice uint64 Sys uint64 Idle uint64 Wait uint64 Irq uint64 SoftIrq uint64 Stolen uint64 } func (cpu *Cpu) Total() uint64 { return cpu.User + cpu.Nice + cpu.Sys + cpu.Idle + cpu.Wait + cpu.Irq + cpu.SoftIrq + cpu.Stolen } func (cpu Cpu) Delta(other Cpu) Cpu { return Cpu{ User: cpu.User - other.User, Nice: cpu.Nice - other.Nice, Sys: cpu.Sys - other.Sys, Idle: cpu.Idle - other.Idle, Wait: cpu.Wait - other.Wait, Irq: cpu.Irq - other.Irq, SoftIrq: cpu.SoftIrq - other.SoftIrq, Stolen: cpu.Stolen - other.Stolen, } } type LoadAverage struct { One, Five, Fifteen float64 } type Uptime struct { Length float64 } type Mem struct { Total uint64 Used uint64 Free uint64 ActualFree uint64 ActualUsed uint64 } type Swap struct { Total uint64 Used uint64 Free uint64 } type CpuList struct { List []Cpu } type FDUsage struct { Open uint64 Unused uint64 Max uint64 } type FileSystem struct { DirName string DevName string TypeName string SysTypeName string Options string Flags uint32 } type FileSystemList struct { List []FileSystem } type FileSystemUsage struct { Total uint64 Used uint64 Free uint64 Avail uint64 Files uint64 FreeFiles uint64 } type ProcList struct { List []int } type RunState byte const ( RunStateSleep = 'S' RunStateRun = 'R' RunStateStop = 'T' RunStateZombie = 'Z' RunStateIdle = 'D' RunStateUnknown = '?' ) type ProcState struct { Name string Username string State RunState Ppid int Pgid int Tty int Priority int Nice int Processor int } type ProcMem struct { Size uint64 Resident uint64 Share uint64 MinorFaults uint64 MajorFaults uint64 PageFaults uint64 } type ProcTime struct { StartTime uint64 User uint64 Sys uint64 Total uint64 } type ProcArgs struct { List []string } type ProcEnv struct { Vars map[string]string } type ProcExe struct { Name string Cwd string Root string } type ProcFDUsage struct { Open uint64 SoftLimit uint64 HardLimit uint64 } type Rusage struct { Utime time.Duration Stime time.Duration Maxrss int64 Ixrss int64 Idrss int64 Isrss int64 Minflt int64 Majflt int64 Nswap int64 Inblock int64 Oublock int64 Msgsnd int64 Msgrcv int64 Nsignals int64 Nvcsw int64 Nivcsw int64 }