|
@@ -4,7 +4,8 @@ package types
|
|
|
|
|
|
import "time"
|
|
|
|
|
|
-// ThrottlingData stores CPU throttling stats of one running container
|
|
|
+// ThrottlingData stores CPU throttling stats of one running container.
|
|
|
+// Not used on Windows.
|
|
|
type ThrottlingData struct {
|
|
|
// Number of periods with throttling active
|
|
|
Periods uint64 `json:"periods"`
|
|
@@ -17,42 +18,68 @@ type ThrottlingData struct {
|
|
|
// CPUUsage stores All CPU stats aggregated since container inception.
|
|
|
type CPUUsage struct {
|
|
|
// Total CPU time consumed.
|
|
|
- // Units: nanoseconds.
|
|
|
+ // Units: nanoseconds (Linux)
|
|
|
+ // Units: 100's of nanoseconds (Windows)
|
|
|
TotalUsage uint64 `json:"total_usage"`
|
|
|
- // Total CPU time consumed per core.
|
|
|
- // Units: nanoseconds.
|
|
|
- PercpuUsage []uint64 `json:"percpu_usage"`
|
|
|
- // Time spent by tasks of the cgroup in kernel mode.
|
|
|
+
|
|
|
+ // Total CPU time consumed per core (Linux). Not used on Windows.
|
|
|
// Units: nanoseconds.
|
|
|
+ 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.
|
|
|
UsageInKernelmode uint64 `json:"usage_in_kernelmode"`
|
|
|
- // Time spent by tasks of the cgroup in user mode.
|
|
|
- // Units: nanoseconds.
|
|
|
+
|
|
|
+ // 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
|
|
|
UsageInUsermode uint64 `json:"usage_in_usermode"`
|
|
|
}
|
|
|
|
|
|
// CPUStats aggregates and wraps all CPU related info of container
|
|
|
type CPUStats struct {
|
|
|
- CPUUsage CPUUsage `json:"cpu_usage"`
|
|
|
- SystemUsage uint64 `json:"system_cpu_usage"`
|
|
|
+ // CPU Usage. Linux and Windows.
|
|
|
+ CPUUsage CPUUsage `json:"cpu_usage"`
|
|
|
+
|
|
|
+ // System Usage. Linux only.
|
|
|
+ SystemUsage uint64 `json:"system_cpu_usage,omitempty"`
|
|
|
+
|
|
|
+ // Throttling Data. Linux only.
|
|
|
ThrottlingData ThrottlingData `json:"throttling_data,omitempty"`
|
|
|
}
|
|
|
|
|
|
-// MemoryStats aggregates All memory stats since container inception
|
|
|
+// MemoryStats aggregates all memory stats since container inception on Linux.
|
|
|
+// Windows returns stats for commit and private working set only.
|
|
|
type MemoryStats struct {
|
|
|
+ // Linux Memory Stats
|
|
|
+
|
|
|
// current res_counter usage for memory
|
|
|
- Usage uint64 `json:"usage"`
|
|
|
+ Usage uint64 `json:"usage,omitempty"`
|
|
|
// maximum usage ever recorded.
|
|
|
- MaxUsage uint64 `json:"max_usage"`
|
|
|
+ MaxUsage uint64 `json:"max_usage,omitempty"`
|
|
|
// TODO(vishh): Export these as stronger types.
|
|
|
// all the stats exported via memory.stat.
|
|
|
- Stats map[string]uint64 `json:"stats"`
|
|
|
+ Stats map[string]uint64 `json:"stats,omitempty"`
|
|
|
// number of times memory usage hits limits.
|
|
|
- Failcnt uint64 `json:"failcnt"`
|
|
|
- Limit uint64 `json:"limit"`
|
|
|
+ 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"`
|
|
|
}
|
|
|
|
|
|
// BlkioStatEntry is one small entity to store a piece of Blkio stats
|
|
|
-// TODO Windows: This can be factored out
|
|
|
+// Not used on Windows.
|
|
|
type BlkioStatEntry struct {
|
|
|
Major uint64 `json:"major"`
|
|
|
Minor uint64 `json:"minor"`
|
|
@@ -60,8 +87,10 @@ type BlkioStatEntry struct {
|
|
|
Value uint64 `json:"value"`
|
|
|
}
|
|
|
|
|
|
-// BlkioStats stores All IO service stats for data read and write
|
|
|
-// TODO Windows: This can be factored out
|
|
|
+// 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.
|
|
|
type BlkioStats struct {
|
|
|
// number of bytes transferred to and from the block device
|
|
|
IoServiceBytesRecursive []BlkioStatEntry `json:"io_service_bytes_recursive"`
|
|
@@ -74,17 +103,38 @@ type BlkioStats struct {
|
|
|
SectorsRecursive []BlkioStatEntry `json:"sectors_recursive"`
|
|
|
}
|
|
|
|
|
|
-// NetworkStats aggregates All network stats of one container
|
|
|
-// TODO Windows: This will require refactoring
|
|
|
+// 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
|
|
|
type NetworkStats struct {
|
|
|
- RxBytes uint64 `json:"rx_bytes"`
|
|
|
+ // Bytes received. Windows and Linux.
|
|
|
+ RxBytes uint64 `json:"rx_bytes"`
|
|
|
+ // Packets received. Windows and Linux.
|
|
|
RxPackets uint64 `json:"rx_packets"`
|
|
|
- RxErrors uint64 `json:"rx_errors"`
|
|
|
+ // 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.
|
|
|
RxDropped uint64 `json:"rx_dropped"`
|
|
|
- TxBytes uint64 `json:"tx_bytes"`
|
|
|
+ // Bytes sent. Windows and Linux.
|
|
|
+ TxBytes uint64 `json:"tx_bytes"`
|
|
|
+ // Packets sent. Windows and Linux.
|
|
|
TxPackets uint64 `json:"tx_packets"`
|
|
|
- TxErrors uint64 `json:"tx_errors"`
|
|
|
+ // 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.
|
|
|
TxDropped uint64 `json:"tx_dropped"`
|
|
|
+ // Endpoint ID. Not used on Linux.
|
|
|
+ EndpointID string `json:"endpoint_id,omitempty"`
|
|
|
+ // Instance ID. Not used on Linux.
|
|
|
+ InstanceID string `json:"instance_id,omitempty"`
|
|
|
}
|
|
|
|
|
|
// PidsStats contains the stats of a container's pids
|
|
@@ -98,12 +148,22 @@ type PidsStats struct {
|
|
|
|
|
|
// Stats is Ultimate struct aggregating all types of stats of one container
|
|
|
type Stats struct {
|
|
|
- Read time.Time `json:"read"`
|
|
|
- PreCPUStats CPUStats `json:"precpu_stats,omitempty"`
|
|
|
+ // 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
|
|
|
CPUStats CPUStats `json:"cpu_stats,omitempty"`
|
|
|
+ PreCPUStats CPUStats `json:"precpu_stats,omitempty"` // "Pre"="Previous"
|
|
|
MemoryStats MemoryStats `json:"memory_stats,omitempty"`
|
|
|
- BlkioStats BlkioStats `json:"blkio_stats,omitempty"`
|
|
|
- PidsStats PidsStats `json:"pids_stats,omitempty"`
|
|
|
}
|
|
|
|
|
|
// StatsJSON is newly used Networks
|