in metric/system/cgroup/reader.go [291:330]
func getStatsV1(path ControllerPath, name string, stats *StatsV1) error {
id := filepath.Base(path.ControllerPath)
switch name {
case blkioStat:
stats.BlockIO = &cgv1.BlockIOSubsystem{}
err := stats.BlockIO.Get(path.FullPath)
if err != nil {
return fmt.Errorf("error fetching BlockIO stats: %w", err)
}
stats.BlockIO.ID = id
stats.BlockIO.Path = path.ControllerPath
case cpuStat:
stats.CPU = &cgv1.CPUSubsystem{}
err := stats.CPU.Get(path.FullPath)
if err != nil {
return fmt.Errorf("error fetching cpu stats: %w", err)
}
stats.CPU.ID = id
stats.CPU.Path = path.ControllerPath
case cpuAcctStat:
stats.CPUAccounting = &cgv1.CPUAccountingSubsystem{}
err := stats.CPUAccounting.Get(path.FullPath)
if err != nil {
return fmt.Errorf("error fetching cpuacct stats: %w", err)
}
stats.CPUAccounting.ID = id
stats.CPUAccounting.Path = path.ControllerPath
case memoryStat:
stats.Memory = &cgv1.MemorySubsystem{}
err := stats.Memory.Get(path.FullPath)
if err != nil {
return fmt.Errorf("error fetching memory stats: %w", err)
}
stats.Memory.ID = id
stats.Memory.Path = path.ControllerPath
}
return nil
}