12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- package daemon
- import (
- "github.com/docker/docker/api/types"
- "github.com/docker/libcontainer"
- "github.com/docker/libcontainer/cgroups"
- )
- // convertStatsToAPITypes converts the libcontainer.Stats to the api specific
- // structs. This is done to preserve API compatibility and versioning.
- func convertStatsToAPITypes(ls *libcontainer.Stats) *types.Stats {
- s := &types.Stats{}
- if ls.Interfaces != nil {
- s.Network = types.Network{}
- for _, iface := range ls.Interfaces {
- s.Network.RxBytes += iface.RxBytes
- s.Network.RxPackets += iface.RxPackets
- s.Network.RxErrors += iface.RxErrors
- s.Network.RxDropped += iface.RxDropped
- s.Network.TxBytes += iface.TxBytes
- s.Network.TxPackets += iface.TxPackets
- s.Network.TxErrors += iface.TxErrors
- s.Network.TxDropped += iface.TxDropped
- }
- }
- cs := ls.CgroupStats
- if cs != nil {
- s.BlkioStats = types.BlkioStats{
- IoServiceBytesRecursive: copyBlkioEntry(cs.BlkioStats.IoServiceBytesRecursive),
- IoServicedRecursive: copyBlkioEntry(cs.BlkioStats.IoServicedRecursive),
- IoQueuedRecursive: copyBlkioEntry(cs.BlkioStats.IoQueuedRecursive),
- IoServiceTimeRecursive: copyBlkioEntry(cs.BlkioStats.IoServiceTimeRecursive),
- IoWaitTimeRecursive: copyBlkioEntry(cs.BlkioStats.IoWaitTimeRecursive),
- IoMergedRecursive: copyBlkioEntry(cs.BlkioStats.IoMergedRecursive),
- IoTimeRecursive: copyBlkioEntry(cs.BlkioStats.IoTimeRecursive),
- SectorsRecursive: copyBlkioEntry(cs.BlkioStats.SectorsRecursive),
- }
- cpu := cs.CpuStats
- s.CpuStats = types.CpuStats{
- CpuUsage: types.CpuUsage{
- TotalUsage: cpu.CpuUsage.TotalUsage,
- PercpuUsage: cpu.CpuUsage.PercpuUsage,
- UsageInKernelmode: cpu.CpuUsage.UsageInKernelmode,
- UsageInUsermode: cpu.CpuUsage.UsageInUsermode,
- },
- ThrottlingData: types.ThrottlingData{
- Periods: cpu.ThrottlingData.Periods,
- ThrottledPeriods: cpu.ThrottlingData.ThrottledPeriods,
- ThrottledTime: cpu.ThrottlingData.ThrottledTime,
- },
- }
- mem := cs.MemoryStats
- s.MemoryStats = types.MemoryStats{
- Usage: mem.Usage,
- MaxUsage: mem.MaxUsage,
- Stats: mem.Stats,
- Failcnt: mem.Failcnt,
- }
- }
- return s
- }
- func copyBlkioEntry(entries []cgroups.BlkioStatEntry) []types.BlkioStatEntry {
- out := make([]types.BlkioStatEntry, len(entries))
- for i, re := range entries {
- out[i] = types.BlkioStatEntry{
- Major: re.Major,
- Minor: re.Minor,
- Op: re.Op,
- Value: re.Value,
- }
- }
- return out
- }
|