198 lines
3.1 KiB
Go
198 lines
3.1 KiB
Go
|
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
|
||
|
}
|