use std::collections::HashMap;
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use super::config::QuotaConfig;
use crate::shard::PeerId;
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct QuotaStatus {
pub config: QuotaConfig,
pub usage: QuotaUsage,
#[serde(skip_serializing_if = "Option::is_none")]
pub peers: Option<HashMap<PeerId, PeerQuotaUsage>>,
}
#[derive(Debug, Clone, Copy, Serialize, Deserialize, JsonSchema)]
pub struct PeerQuotaUsage {
#[serde(flatten)]
pub usage: QuotaUsage,
pub exceeded: bool,
}
#[derive(Debug, Clone, Copy, Serialize, Deserialize, JsonSchema)]
pub struct QuotaTelemetry {
pub config: QuotaConfig,
pub exceeded: QuotaExceeded,
}
#[derive(Debug, Clone, Copy, Default, Serialize, Deserialize, JsonSchema)]
pub struct QuotaExceeded {
pub resident_memory: Option<bool>,
pub disk_usage: Option<bool>,
}
impl QuotaExceeded {
pub fn any(&self) -> bool {
let Self {
resident_memory,
disk_usage,
} = self;
resident_memory.unwrap_or(false) || disk_usage.unwrap_or(false)
}
}
#[derive(Debug, Clone, Copy, Serialize, Deserialize, JsonSchema)]
pub struct QuotaUsage {
pub resident_memory_percent: Option<u8>,
pub disk_usage_percent: Option<u8>,
}