2018-01-23 23:51:04 +03:00
|
|
|
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)
|
2018-04-21 20:19:12 +03:00
|
|
|
GetHugeTLBPages(HugeTLBPages, error)
|
2018-01-23 23:51:04 +03:00
|
|
|
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
|
|
|
|
}
|
|
|
|
|
2018-04-21 20:19:12 +03:00
|
|
|
type HugeTLBPages struct {
|
|
|
|
Total uint64
|
|
|
|
Free uint64
|
|
|
|
Reserved uint64
|
|
|
|
Surplus uint64
|
|
|
|
DefaultSize uint64
|
|
|
|
TotalAllocatedSize uint64
|
|
|
|
}
|
|
|
|
|
2018-01-23 23:51:04 +03:00
|
|
|
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
|
|
|
|
}
|