github.com/darciopacifico/docker@v1.9.0-rc1/daemon/stats_linux.go (about) 1 package daemon 2 3 import ( 4 "github.com/docker/docker/api/types" 5 "github.com/opencontainers/runc/libcontainer" 6 "github.com/opencontainers/runc/libcontainer/cgroups" 7 ) 8 9 // convertStatsToAPITypes converts the libcontainer.Stats to the api specific 10 // structs. This is done to preserve API compatibility and versioning. 11 func convertStatsToAPITypes(ls *libcontainer.Stats) *types.StatsJSON { 12 s := &types.StatsJSON{} 13 if ls.Interfaces != nil { 14 s.Networks = make(map[string]types.NetworkStats) 15 for _, iface := range ls.Interfaces { 16 // For API Version >= 1.21, the original data of network will 17 // be returned. 18 s.Networks[iface.Name] = types.NetworkStats{ 19 RxBytes: iface.RxBytes, 20 RxPackets: iface.RxPackets, 21 RxErrors: iface.RxErrors, 22 RxDropped: iface.RxDropped, 23 TxBytes: iface.TxBytes, 24 TxPackets: iface.TxPackets, 25 TxErrors: iface.TxErrors, 26 TxDropped: iface.TxDropped, 27 } 28 } 29 } 30 31 cs := ls.CgroupStats 32 if cs != nil { 33 s.BlkioStats = types.BlkioStats{ 34 IoServiceBytesRecursive: copyBlkioEntry(cs.BlkioStats.IoServiceBytesRecursive), 35 IoServicedRecursive: copyBlkioEntry(cs.BlkioStats.IoServicedRecursive), 36 IoQueuedRecursive: copyBlkioEntry(cs.BlkioStats.IoQueuedRecursive), 37 IoServiceTimeRecursive: copyBlkioEntry(cs.BlkioStats.IoServiceTimeRecursive), 38 IoWaitTimeRecursive: copyBlkioEntry(cs.BlkioStats.IoWaitTimeRecursive), 39 IoMergedRecursive: copyBlkioEntry(cs.BlkioStats.IoMergedRecursive), 40 IoTimeRecursive: copyBlkioEntry(cs.BlkioStats.IoTimeRecursive), 41 SectorsRecursive: copyBlkioEntry(cs.BlkioStats.SectorsRecursive), 42 } 43 cpu := cs.CpuStats 44 s.CPUStats = types.CPUStats{ 45 CPUUsage: types.CPUUsage{ 46 TotalUsage: cpu.CpuUsage.TotalUsage, 47 PercpuUsage: cpu.CpuUsage.PercpuUsage, 48 UsageInKernelmode: cpu.CpuUsage.UsageInKernelmode, 49 UsageInUsermode: cpu.CpuUsage.UsageInUsermode, 50 }, 51 ThrottlingData: types.ThrottlingData{ 52 Periods: cpu.ThrottlingData.Periods, 53 ThrottledPeriods: cpu.ThrottlingData.ThrottledPeriods, 54 ThrottledTime: cpu.ThrottlingData.ThrottledTime, 55 }, 56 } 57 mem := cs.MemoryStats 58 s.MemoryStats = types.MemoryStats{ 59 Usage: mem.Usage.Usage, 60 MaxUsage: mem.Usage.MaxUsage, 61 Stats: mem.Stats, 62 Failcnt: mem.Usage.Failcnt, 63 } 64 } 65 66 return s 67 } 68 69 func copyBlkioEntry(entries []cgroups.BlkioStatEntry) []types.BlkioStatEntry { 70 out := make([]types.BlkioStatEntry, len(entries)) 71 for i, re := range entries { 72 out[i] = types.BlkioStatEntry{ 73 Major: re.Major, 74 Minor: re.Minor, 75 Op: re.Op, 76 Value: re.Value, 77 } 78 } 79 return out 80 }