use std::collections::HashMap;
use serde::{Deserialize, Serialize};
use typeshare::typeshare;
use crate::entities::U64;
#[typeshare]
#[derive(
Debug, Clone, Default, PartialEq, Serialize, Deserialize,
)]
#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
pub struct FullContainerStats {
pub name: String,
pub id: Option<String>,
pub read: Option<String>,
pub preread: Option<String>,
pub pids_stats: Option<ContainerPidsStats>,
pub blkio_stats: Option<ContainerBlkioStats>,
pub num_procs: Option<u32>,
#[serde(rename = "storage_stats")]
#[serde(skip_serializing_if = "Option::is_none")]
pub storage_stats: Option<ContainerStorageStats>,
#[serde(rename = "cpu_stats")]
#[serde(skip_serializing_if = "Option::is_none")]
pub cpu_stats: Option<ContainerCpuStats>,
#[serde(rename = "precpu_stats")]
#[serde(skip_serializing_if = "Option::is_none")]
pub precpu_stats: Option<ContainerCpuStats>,
#[serde(rename = "memory_stats")]
#[serde(skip_serializing_if = "Option::is_none")]
pub memory_stats: Option<ContainerMemoryStats>,
#[serde(rename = "networks")]
#[serde(skip_serializing_if = "Option::is_none")]
pub networks: Option<HashMap<String, ContainerNetworkStats>>,
}
#[typeshare]
#[derive(
Debug, Clone, Default, PartialEq, Serialize, Deserialize,
)]
#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
pub struct ContainerPidsStats {
pub current: Option<U64>,
pub limit: Option<U64>,
}
#[typeshare]
#[derive(
Debug, Clone, Default, PartialEq, Serialize, Deserialize,
)]
#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
pub struct ContainerBlkioStats {
#[serde(rename = "io_service_bytes_recursive")]
#[serde(skip_serializing_if = "Option::is_none")]
pub io_service_bytes_recursive:
Option<Vec<ContainerBlkioStatEntry>>,
#[serde(rename = "io_serviced_recursive")]
#[serde(skip_serializing_if = "Option::is_none")]
pub io_serviced_recursive: Option<Vec<ContainerBlkioStatEntry>>,
#[serde(rename = "io_queue_recursive")]
#[serde(skip_serializing_if = "Option::is_none")]
pub io_queue_recursive: Option<Vec<ContainerBlkioStatEntry>>,
#[serde(rename = "io_service_time_recursive")]
#[serde(skip_serializing_if = "Option::is_none")]
pub io_service_time_recursive: Option<Vec<ContainerBlkioStatEntry>>,
#[serde(rename = "io_wait_time_recursive")]
#[serde(skip_serializing_if = "Option::is_none")]
pub io_wait_time_recursive: Option<Vec<ContainerBlkioStatEntry>>,
#[serde(rename = "io_merged_recursive")]
#[serde(skip_serializing_if = "Option::is_none")]
pub io_merged_recursive: Option<Vec<ContainerBlkioStatEntry>>,
#[serde(rename = "io_time_recursive")]
#[serde(skip_serializing_if = "Option::is_none")]
pub io_time_recursive: Option<Vec<ContainerBlkioStatEntry>>,
#[serde(rename = "sectors_recursive")]
#[serde(skip_serializing_if = "Option::is_none")]
pub sectors_recursive: Option<Vec<ContainerBlkioStatEntry>>,
}
#[typeshare]
#[derive(
Debug, Clone, Default, PartialEq, Serialize, Deserialize,
)]
#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
pub struct ContainerBlkioStatEntry {
pub major: Option<U64>,
pub minor: Option<U64>,
pub op: Option<String>,
pub value: Option<U64>,
}
#[typeshare]
#[derive(
Debug, Clone, Default, PartialEq, Serialize, Deserialize,
)]
#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
pub struct ContainerStorageStats {
pub read_count_normalized: Option<U64>,
pub read_size_bytes: Option<U64>,
pub write_count_normalized: Option<U64>,
pub write_size_bytes: Option<U64>,
}
#[typeshare]
#[derive(
Debug, Clone, Default, PartialEq, Serialize, Deserialize,
)]
#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
pub struct ContainerCpuStats {
pub cpu_usage: Option<ContainerCpuUsage>,
pub system_cpu_usage: Option<U64>,
pub online_cpus: Option<u32>,
pub throttling_data: Option<ContainerThrottlingData>,
}
#[typeshare]
#[derive(
Debug, Clone, Default, PartialEq, Serialize, Deserialize,
)]
#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
pub struct ContainerCpuUsage {
pub total_usage: Option<U64>,
pub percpu_usage: Option<Vec<U64>>,
pub usage_in_kernelmode: Option<U64>,
pub usage_in_usermode: Option<U64>,
}
#[typeshare]
#[derive(
Debug, Clone, Default, PartialEq, Serialize, Deserialize,
)]
#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
pub struct ContainerThrottlingData {
pub periods: Option<U64>,
pub throttled_periods: Option<U64>,
pub throttled_time: Option<U64>,
}
#[typeshare]
#[derive(
Debug, Clone, Default, PartialEq, Serialize, Deserialize,
)]
#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
pub struct ContainerMemoryStats {
pub usage: Option<U64>,
pub max_usage: Option<U64>,
pub stats: Option<HashMap<String, U64>>,
pub failcnt: Option<U64>,
pub limit: Option<U64>,
pub commitbytes: Option<U64>,
pub commitpeakbytes: Option<U64>,
pub privateworkingset: Option<U64>,
}
#[typeshare]
#[derive(
Debug, Clone, Default, PartialEq, Serialize, Deserialize,
)]
#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
pub struct ContainerNetworkStats {
pub rx_bytes: Option<U64>,
pub rx_packets: Option<U64>,
pub rx_errors: Option<U64>,
pub rx_dropped: Option<U64>,
pub tx_bytes: Option<U64>,
pub tx_packets: Option<U64>,
pub tx_errors: Option<U64>,
pub tx_dropped: Option<U64>,
pub endpoint_id: Option<String>,
pub instance_id: Option<String>,
}