in pkg/systemstatsmonitor/cpu_collector_linux.go [54:113]
func (cc *cpuCollector) recordSystemStats() {
// don't collect the load metrics if the configs are not present.
if cc.mSystemCPUStat == nil && cc.mSystemInterruptsTotal == nil &&
cc.mSystemProcessesTotal == nil && cc.mSystemProcsBlocked == nil &&
cc.mSystemProcsRunning == nil {
return
}
fs, err := procfs.NewFS("/proc")
stats, err := fs.Stat()
if err != nil {
glog.Errorf("Failed to retrieve cpu/process stats: %v", err)
return
}
if cc.mSystemProcessesTotal != nil {
cc.mSystemProcessesTotal.Record(map[string]string{}, int64(stats.ProcessCreated))
}
if cc.mSystemProcsRunning != nil {
cc.mSystemProcsRunning.Record(map[string]string{}, int64(stats.ProcessesRunning))
}
if cc.mSystemProcsBlocked != nil {
cc.mSystemProcsBlocked.Record(map[string]string{}, int64(stats.ProcessesBlocked))
}
if cc.mSystemInterruptsTotal != nil {
cc.mSystemInterruptsTotal.Record(map[string]string{}, int64(stats.IRQTotal))
}
if cc.mSystemCPUStat != nil {
for i, c := range stats.CPU {
tags := map[string]string{}
tags[cpuLabel] = fmt.Sprintf("cpu%d", i)
tags[stageLabel] = "user"
cc.mSystemCPUStat.Record(tags, c.User)
tags[stageLabel] = "nice"
cc.mSystemCPUStat.Record(tags, c.Nice)
tags[stageLabel] = "system"
cc.mSystemCPUStat.Record(tags, c.System)
tags[stageLabel] = "idle"
cc.mSystemCPUStat.Record(tags, c.Idle)
tags[stageLabel] = "iowait"
cc.mSystemCPUStat.Record(tags, c.Iowait)
tags[stageLabel] = "iRQ"
cc.mSystemCPUStat.Record(tags, c.IRQ)
tags[stageLabel] = "softIRQ"
cc.mSystemCPUStat.Record(tags, c.SoftIRQ)
tags[stageLabel] = "steal"
cc.mSystemCPUStat.Record(tags, c.Steal)
tags[stageLabel] = "guest"
cc.mSystemCPUStat.Record(tags, c.Guest)
tags[stageLabel] = "guestNice"
cc.mSystemCPUStat.Record(tags, c.GuestNice)
}
}
}