mirror of
https://gitlab.com/pulsechaincom/prysm-pulse.git
synced 2025-01-08 18:51:19 +00:00
84ff4c5b14
Upstream changes from ethereum/go-ethereum Former-commit-id: b40212f60d4e0a11e783a362886c7db8fb9c54f9 [formerly a2112a830d4047afa18c31243c2a506f80d4de12] Former-commit-id: 4c9a4d5662038dd26bda5d3343f231795c702b02
84 lines
1.6 KiB
Go
84 lines
1.6 KiB
Go
package gosigar
|
|
|
|
import (
|
|
"time"
|
|
)
|
|
|
|
type ConcreteSigar struct{}
|
|
|
|
func (c *ConcreteSigar) CollectCpuStats(collectionInterval time.Duration) (<-chan Cpu, chan<- struct{}) {
|
|
// samplesCh is buffered to 1 value to immediately return first CPU sample
|
|
samplesCh := make(chan Cpu, 1)
|
|
|
|
stopCh := make(chan struct{})
|
|
|
|
go func() {
|
|
var cpuUsage Cpu
|
|
|
|
// Immediately provide non-delta value.
|
|
// samplesCh is buffered to 1 value, so it will not block.
|
|
cpuUsage.Get()
|
|
samplesCh <- cpuUsage
|
|
|
|
ticker := time.NewTicker(collectionInterval)
|
|
|
|
for {
|
|
select {
|
|
case <-ticker.C:
|
|
previousCpuUsage := cpuUsage
|
|
|
|
cpuUsage.Get()
|
|
|
|
select {
|
|
case samplesCh <- cpuUsage.Delta(previousCpuUsage):
|
|
default:
|
|
// Include default to avoid channel blocking
|
|
}
|
|
|
|
case <-stopCh:
|
|
return
|
|
}
|
|
}
|
|
}()
|
|
|
|
return samplesCh, stopCh
|
|
}
|
|
|
|
func (c *ConcreteSigar) GetLoadAverage() (LoadAverage, error) {
|
|
l := LoadAverage{}
|
|
err := l.Get()
|
|
return l, err
|
|
}
|
|
|
|
func (c *ConcreteSigar) GetMem() (Mem, error) {
|
|
m := Mem{}
|
|
err := m.Get()
|
|
return m, err
|
|
}
|
|
|
|
func (c *ConcreteSigar) GetSwap() (Swap, error) {
|
|
s := Swap{}
|
|
err := s.Get()
|
|
return s, err
|
|
}
|
|
|
|
func (c *ConcreteSigar) GetFileSystemUsage(path string) (FileSystemUsage, error) {
|
|
f := FileSystemUsage{}
|
|
err := f.Get(path)
|
|
return f, err
|
|
}
|
|
|
|
func (c *ConcreteSigar) GetFDUsage() (FDUsage, error) {
|
|
fd := FDUsage{}
|
|
err := fd.Get()
|
|
return fd, err
|
|
}
|
|
|
|
// GetRusage return the resource usage of the process
|
|
// Possible params: 0 = RUSAGE_SELF, 1 = RUSAGE_CHILDREN, 2 = RUSAGE_THREAD
|
|
func (c *ConcreteSigar) GetRusage(who int) (Rusage, error) {
|
|
r := Rusage{}
|
|
err := r.Get(who)
|
|
return r, err
|
|
}
|