github.com/akashshinde/docker@v1.9.1/api/types/stats.go (about)

     1  // Package types is used for API stability in the types and response to the
     2  // consumers of the API stats endpoint.
     3  package types
     4  
     5  import "time"
     6  
     7  // ThrottlingData stores CPU throttling stats of one running container
     8  type ThrottlingData struct {
     9  	// Number of periods with throttling active
    10  	Periods uint64 `json:"periods"`
    11  	// Number of periods when the container hit its throttling limit.
    12  	ThrottledPeriods uint64 `json:"throttled_periods"`
    13  	// Aggregate time the container was throttled for in nanoseconds.
    14  	ThrottledTime uint64 `json:"throttled_time"`
    15  }
    16  
    17  // CPUUsage stores All CPU stats aggregated since container inception.
    18  type CPUUsage struct {
    19  	// Total CPU time consumed.
    20  	// Units: nanoseconds.
    21  	TotalUsage uint64 `json:"total_usage"`
    22  	// Total CPU time consumed per core.
    23  	// Units: nanoseconds.
    24  	PercpuUsage []uint64 `json:"percpu_usage"`
    25  	// Time spent by tasks of the cgroup in kernel mode.
    26  	// Units: nanoseconds.
    27  	UsageInKernelmode uint64 `json:"usage_in_kernelmode"`
    28  	// Time spent by tasks of the cgroup in user mode.
    29  	// Units: nanoseconds.
    30  	UsageInUsermode uint64 `json:"usage_in_usermode"`
    31  }
    32  
    33  // CPUStats aggregates and wraps all CPU related info of container
    34  type CPUStats struct {
    35  	CPUUsage       CPUUsage       `json:"cpu_usage"`
    36  	SystemUsage    uint64         `json:"system_cpu_usage"`
    37  	ThrottlingData ThrottlingData `json:"throttling_data,omitempty"`
    38  }
    39  
    40  // MemoryStats aggregates All memory stats since container inception
    41  type MemoryStats struct {
    42  	// current res_counter usage for memory
    43  	Usage uint64 `json:"usage"`
    44  	// maximum usage ever recorded.
    45  	MaxUsage uint64 `json:"max_usage"`
    46  	// TODO(vishh): Export these as stronger types.
    47  	// all the stats exported via memory.stat.
    48  	Stats map[string]uint64 `json:"stats"`
    49  	// number of times memory usage hits limits.
    50  	Failcnt uint64 `json:"failcnt"`
    51  	Limit   uint64 `json:"limit"`
    52  }
    53  
    54  // BlkioStatEntry is one small entity to store a piece of Blkio stats
    55  // TODO Windows: This can be factored out
    56  type BlkioStatEntry struct {
    57  	Major uint64 `json:"major"`
    58  	Minor uint64 `json:"minor"`
    59  	Op    string `json:"op"`
    60  	Value uint64 `json:"value"`
    61  }
    62  
    63  // BlkioStats stores All IO service stats for data read and write
    64  // TODO Windows: This can be factored out
    65  type BlkioStats struct {
    66  	// number of bytes tranferred to and from the block device
    67  	IoServiceBytesRecursive []BlkioStatEntry `json:"io_service_bytes_recursive"`
    68  	IoServicedRecursive     []BlkioStatEntry `json:"io_serviced_recursive"`
    69  	IoQueuedRecursive       []BlkioStatEntry `json:"io_queue_recursive"`
    70  	IoServiceTimeRecursive  []BlkioStatEntry `json:"io_service_time_recursive"`
    71  	IoWaitTimeRecursive     []BlkioStatEntry `json:"io_wait_time_recursive"`
    72  	IoMergedRecursive       []BlkioStatEntry `json:"io_merged_recursive"`
    73  	IoTimeRecursive         []BlkioStatEntry `json:"io_time_recursive"`
    74  	SectorsRecursive        []BlkioStatEntry `json:"sectors_recursive"`
    75  }
    76  
    77  // NetworkStats aggregates All network stats of one container
    78  // TODO Windows: This will require refactoring
    79  type NetworkStats struct {
    80  	RxBytes   uint64 `json:"rx_bytes"`
    81  	RxPackets uint64 `json:"rx_packets"`
    82  	RxErrors  uint64 `json:"rx_errors"`
    83  	RxDropped uint64 `json:"rx_dropped"`
    84  	TxBytes   uint64 `json:"tx_bytes"`
    85  	TxPackets uint64 `json:"tx_packets"`
    86  	TxErrors  uint64 `json:"tx_errors"`
    87  	TxDropped uint64 `json:"tx_dropped"`
    88  }
    89  
    90  // Stats is Ultimate struct aggregating all types of stats of one container
    91  type Stats struct {
    92  	Read        time.Time   `json:"read"`
    93  	PreCPUStats CPUStats    `json:"precpu_stats,omitempty"`
    94  	CPUStats    CPUStats    `json:"cpu_stats,omitempty"`
    95  	MemoryStats MemoryStats `json:"memory_stats,omitempty"`
    96  	BlkioStats  BlkioStats  `json:"blkio_stats,omitempty"`
    97  }
    98  
    99  // StatsJSON is newly used Networks
   100  type StatsJSON struct {
   101  	Stats
   102  
   103  	// Networks request version >=1.21
   104  	Networks map[string]NetworkStats `json:"networks,omitempty"`
   105  }