// Convert libcontainer stats to info.ContainerStats. func toContainerStats(libcontainerStats *libcontainer.ContainerStats) *info.ContainerStats { s := libcontainerStats.CgroupStats ret := new(info.ContainerStats) ret.Timestamp = time.Now() if s != nil { ret.Cpu.Usage.User = s.CpuStats.CpuUsage.UsageInUsermode ret.Cpu.Usage.System = s.CpuStats.CpuUsage.UsageInKernelmode n := len(s.CpuStats.CpuUsage.PercpuUsage) ret.Cpu.Usage.PerCpu = make([]uint64, n) ret.Cpu.Usage.Total = 0 for i := 0; i < n; i++ { ret.Cpu.Usage.PerCpu[i] = s.CpuStats.CpuUsage.PercpuUsage[i] ret.Cpu.Usage.Total += s.CpuStats.CpuUsage.PercpuUsage[i] } ret.DiskIo.IoServiceBytes = DiskStatsCopy(s.BlkioStats.IoServiceBytesRecursive) ret.DiskIo.IoServiced = DiskStatsCopy(s.BlkioStats.IoServicedRecursive) ret.DiskIo.IoQueued = DiskStatsCopy(s.BlkioStats.IoQueuedRecursive) ret.DiskIo.Sectors = DiskStatsCopy(s.BlkioStats.SectorsRecursive) ret.DiskIo.IoServiceTime = DiskStatsCopy(s.BlkioStats.IoServiceTimeRecursive) ret.DiskIo.IoWaitTime = DiskStatsCopy(s.BlkioStats.IoWaitTimeRecursive) ret.DiskIo.IoMerged = DiskStatsCopy(s.BlkioStats.IoMergedRecursive) ret.DiskIo.IoTime = DiskStatsCopy(s.BlkioStats.IoTimeRecursive) ret.Memory.Usage = s.MemoryStats.Usage if v, ok := s.MemoryStats.Stats["pgfault"]; ok { ret.Memory.ContainerData.Pgfault = v ret.Memory.HierarchicalData.Pgfault = v } if v, ok := s.MemoryStats.Stats["pgmajfault"]; ok { ret.Memory.ContainerData.Pgmajfault = v ret.Memory.HierarchicalData.Pgmajfault = v } if v, ok := s.MemoryStats.Stats["total_inactive_anon"]; ok { ret.Memory.WorkingSet = ret.Memory.Usage - v if v, ok := s.MemoryStats.Stats["total_active_file"]; ok { ret.Memory.WorkingSet -= v } } } // TODO(vishh): Perform a deep copy or alias libcontainer network stats. if libcontainerStats.NetworkStats != nil { ret.Network = *(*info.NetworkStats)(libcontainerStats.NetworkStats) } return ret }
func (self *hyperContainerHandler) fakeStats() (*info.ContainerStats, error) { stats := info.ContainerStats{Timestamp: time.Now()} stats.Cpu = info.CpuStats{ Usage: info.CpuUsage{ Total: 24750780, PerCpu: []uint64{18354559, 6396221}, User: 0, System: 10000000, }, LoadAverage: 0, } stats.DiskIo = info.DiskIoStats{ IoServiceBytes: []info.PerDiskStats{ { Major: 253, Minor: 8, Stats: map[string]uint64{"Async": 5353472, "Read": 5353472, "Sync": 0, "Total": 5353472, "Write": 0}, }, }, } stats.Memory = info.MemoryStats{ Usage: 5763072, WorkingSet: 1871872, ContainerData: info.MemoryStatsMemoryData{ Pgfault: 3174, Pgmajfault: 12, }, HierarchicalData: info.MemoryStatsMemoryData{ Pgfault: 3174, Pgmajfault: 12, }, } stats.Network = info.NetworkStats{ InterfaceStats: info.InterfaceStats{ Name: "eth0", RxBytes: 123223, RxPackets: 128, TxBytes: 10240, TxPackets: 10, }, Interfaces: []info.InterfaceStats{ { Name: "eth0", RxBytes: 123223, RxPackets: 128, TxBytes: 10240, TxPackets: 10, }, }, } stats.Filesystem = []info.FsStats{} stats.TaskStats = info.LoadStats{} return &stats, nil }