func getStatsV1()

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
}