api/types/stats.go
91e197d6
 // Package types is used for API stability in the types and response to the
 // consumers of the API stats endpoint.
 package types
 
 import "time"
 
340e5233
 // ThrottlingData stores CPU throttling stats of one running container.
 // Not used on Windows.
91e197d6
 type ThrottlingData struct {
 	// Number of periods with throttling active
 	Periods uint64 `json:"periods"`
 	// Number of periods when the container hits its throttling limit.
 	ThrottledPeriods uint64 `json:"throttled_periods"`
 	// Aggregate time the container was throttled for in nanoseconds.
 	ThrottledTime uint64 `json:"throttled_time"`
 }
 
 // CPUUsage stores All CPU stats aggregated since container inception.
 type CPUUsage struct {
 	// Total CPU time consumed.
340e5233
 	// Units: nanoseconds (Linux)
 	// Units: 100's of nanoseconds (Windows)
91e197d6
 	TotalUsage uint64 `json:"total_usage"`
340e5233
 
 	// Total CPU time consumed per core (Linux). Not used on Windows.
91e197d6
 	// Units: nanoseconds.
340e5233
 	PercpuUsage []uint64 `json:"percpu_usage,omitempty"`
 
 	// Time spent by tasks of the cgroup in kernel mode (Linux).
 	// Time spent by all container processes in kernel mode (Windows).
 	// Units: nanoseconds (Linux).
 	// Units: 100's of nanoseconds (Windows). Not populated for Hyper-V Containers.
91e197d6
 	UsageInKernelmode uint64 `json:"usage_in_kernelmode"`
340e5233
 
 	// Time spent by tasks of the cgroup in user mode (Linux).
 	// Time spent by all container processes in user mode (Windows).
 	// Units: nanoseconds (Linux).
 	// Units: 100's of nanoseconds (Windows). Not populated for Hyper-V Containers
91e197d6
 	UsageInUsermode uint64 `json:"usage_in_usermode"`
 }
 
 // CPUStats aggregates and wraps all CPU related info of container
 type CPUStats struct {
340e5233
 	// CPU Usage. Linux and Windows.
 	CPUUsage CPUUsage `json:"cpu_usage"`
 
 	// System Usage. Linux only.
 	SystemUsage uint64 `json:"system_cpu_usage,omitempty"`
 
115f91d7
 	// Online CPUs. Linux only.
 	OnlineCPUs uint32 `json:"online_cpus,omitempty"`
 
340e5233
 	// Throttling Data. Linux only.
91e197d6
 	ThrottlingData ThrottlingData `json:"throttling_data,omitempty"`
 }
 
340e5233
 // MemoryStats aggregates all memory stats since container inception on Linux.
 // Windows returns stats for commit and private working set only.
91e197d6
 type MemoryStats struct {
340e5233
 	// Linux Memory Stats
 
91e197d6
 	// current res_counter usage for memory
340e5233
 	Usage uint64 `json:"usage,omitempty"`
91e197d6
 	// maximum usage ever recorded.
340e5233
 	MaxUsage uint64 `json:"max_usage,omitempty"`
91e197d6
 	// TODO(vishh): Export these as stronger types.
 	// all the stats exported via memory.stat.
340e5233
 	Stats map[string]uint64 `json:"stats,omitempty"`
91e197d6
 	// number of times memory usage hits limits.
340e5233
 	Failcnt uint64 `json:"failcnt,omitempty"`
 	Limit   uint64 `json:"limit,omitempty"`
 
 	// Windows Memory Stats
 	// See https://technet.microsoft.com/en-us/magazine/ff382715.aspx
 
 	// committed bytes
 	Commit uint64 `json:"commitbytes,omitempty"`
 	// peak committed bytes
 	CommitPeak uint64 `json:"commitpeakbytes,omitempty"`
 	// private working set
 	PrivateWorkingSet uint64 `json:"privateworkingset,omitempty"`
91e197d6
 }
 
 // BlkioStatEntry is one small entity to store a piece of Blkio stats
340e5233
 // Not used on Windows.
91e197d6
 type BlkioStatEntry struct {
 	Major uint64 `json:"major"`
 	Minor uint64 `json:"minor"`
 	Op    string `json:"op"`
 	Value uint64 `json:"value"`
 }
 
340e5233
 // BlkioStats stores All IO service stats for data read and write.
 // This is a Linux specific structure as the differences between expressing
 // block I/O on Windows and Linux are sufficiently significant to make
 // little sense attempting to morph into a combined structure.
91e197d6
 type BlkioStats struct {
 	// number of bytes transferred to and from the block device
 	IoServiceBytesRecursive []BlkioStatEntry `json:"io_service_bytes_recursive"`
 	IoServicedRecursive     []BlkioStatEntry `json:"io_serviced_recursive"`
 	IoQueuedRecursive       []BlkioStatEntry `json:"io_queue_recursive"`
 	IoServiceTimeRecursive  []BlkioStatEntry `json:"io_service_time_recursive"`
 	IoWaitTimeRecursive     []BlkioStatEntry `json:"io_wait_time_recursive"`
 	IoMergedRecursive       []BlkioStatEntry `json:"io_merged_recursive"`
 	IoTimeRecursive         []BlkioStatEntry `json:"io_time_recursive"`
 	SectorsRecursive        []BlkioStatEntry `json:"sectors_recursive"`
 }
 
340e5233
 // StorageStats is the disk I/O stats for read/write on Windows.
 type StorageStats struct {
 	ReadCountNormalized  uint64 `json:"read_count_normalized,omitempty"`
 	ReadSizeBytes        uint64 `json:"read_size_bytes,omitempty"`
 	WriteCountNormalized uint64 `json:"write_count_normalized,omitempty"`
 	WriteSizeBytes       uint64 `json:"write_size_bytes,omitempty"`
 }
 
 // NetworkStats aggregates the network stats of one container
91e197d6
 type NetworkStats struct {
340e5233
 	// Bytes received. Windows and Linux.
 	RxBytes uint64 `json:"rx_bytes"`
 	// Packets received. Windows and Linux.
91e197d6
 	RxPackets uint64 `json:"rx_packets"`
340e5233
 	// Received errors. Not used on Windows. Note that we dont `omitempty` this
 	// field as it is expected in the >=v1.21 API stats structure.
 	RxErrors uint64 `json:"rx_errors"`
 	// Incoming packets dropped. Windows and Linux.
91e197d6
 	RxDropped uint64 `json:"rx_dropped"`
340e5233
 	// Bytes sent. Windows and Linux.
 	TxBytes uint64 `json:"tx_bytes"`
 	// Packets sent. Windows and Linux.
91e197d6
 	TxPackets uint64 `json:"tx_packets"`
340e5233
 	// Sent errors. Not used on Windows. Note that we dont `omitempty` this
 	// field as it is expected in the >=v1.21 API stats structure.
 	TxErrors uint64 `json:"tx_errors"`
 	// Outgoing packets dropped. Windows and Linux.
91e197d6
 	TxDropped uint64 `json:"tx_dropped"`
340e5233
 	// Endpoint ID. Not used on Linux.
 	EndpointID string `json:"endpoint_id,omitempty"`
 	// Instance ID. Not used on Linux.
 	InstanceID string `json:"instance_id,omitempty"`
91e197d6
 }
 
 // PidsStats contains the stats of a container's pids
 type PidsStats struct {
 	// Current is the number of pids in the cgroup
 	Current uint64 `json:"current,omitempty"`
 	// Limit is the hard limit on the number of pids in the cgroup.
 	// A "Limit" of 0 means that there is no limit.
 	Limit uint64 `json:"limit,omitempty"`
 }
 
 // Stats is Ultimate struct aggregating all types of stats of one container
 type Stats struct {
340e5233
 	// Common stats
 	Read    time.Time `json:"read"`
 	PreRead time.Time `json:"preread"`
 
 	// Linux specific stats, not populated on Windows.
 	PidsStats  PidsStats  `json:"pids_stats,omitempty"`
 	BlkioStats BlkioStats `json:"blkio_stats,omitempty"`
 
 	// Windows specific stats, not populated on Linux.
 	NumProcs     uint32       `json:"num_procs"`
 	StorageStats StorageStats `json:"storage_stats,omitempty"`
 
 	// Shared stats
91e197d6
 	CPUStats    CPUStats    `json:"cpu_stats,omitempty"`
340e5233
 	PreCPUStats CPUStats    `json:"precpu_stats,omitempty"` // "Pre"="Previous"
91e197d6
 	MemoryStats MemoryStats `json:"memory_stats,omitempty"`
 }
 
 // StatsJSON is newly used Networks
 type StatsJSON struct {
 	Stats
 
ef915fd0
 	Name string `json:"name,omitempty"`
 	ID   string `json:"id,omitempty"`
 
91e197d6
 	// Networks request version >=1.21
 	Networks map[string]NetworkStats `json:"networks,omitempty"`
 }