use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use std::net::IpAddr;
use super::entity_id::{EntityId, MacAddress};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct StatReport {
pub interval: String,
pub entries: Vec<StatEntry>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct StatEntry {
pub timestamp: DateTime<Utc>,
pub wan_tx_bytes: Option<u64>,
pub wan_rx_bytes: Option<u64>,
pub num_sta: Option<u32>,
pub lan_num_sta: Option<u32>,
pub wlan_num_sta: Option<u32>,
pub latency: Option<f64>,
pub extra: serde_json::Value,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SystemInfo {
pub controller_name: Option<String>,
pub version: String,
pub build: Option<String>,
pub hostname: Option<String>,
pub ip: Option<IpAddr>,
pub uptime_secs: Option<u64>,
pub update_available: Option<bool>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct HealthSummary {
pub subsystem: String,
pub status: String,
pub num_adopted: Option<u32>,
pub num_sta: Option<u32>,
pub tx_bytes_r: Option<u64>,
pub rx_bytes_r: Option<u64>,
pub latency: Option<f64>,
pub wan_ip: Option<String>,
pub gateways: Option<Vec<String>>,
pub extra: serde_json::Value,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SysInfo {
pub timezone: Option<String>,
pub autobackup: Option<bool>,
pub hostname: Option<String>,
pub ip_addrs: Vec<String>,
pub live_chat: Option<String>,
pub data_retention_days: Option<u32>,
pub extra: serde_json::Value,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Backup {
pub filename: String,
pub size_bytes: u64,
pub created_at: Option<DateTime<Utc>>,
pub version: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Admin {
pub id: EntityId,
pub name: String,
pub email: Option<String>,
pub role: String,
pub is_super: bool,
pub last_login: Option<DateTime<Utc>>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Country {
pub code: String,
pub name: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DpiApplication {
pub id: u32,
pub name: String,
pub category_id: u32,
pub tx_bytes: u64,
pub rx_bytes: u64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DpiCategory {
pub id: u32,
pub name: String,
pub tx_bytes: u64,
pub rx_bytes: u64,
pub apps: Vec<DpiApplication>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum StatsInterval {
FiveMinutes,
Hourly,
Daily,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SiteStatsSample {
pub timestamp: DateTime<Utc>,
pub wan_tx_bytes: Option<u64>,
pub wan_rx_bytes: Option<u64>,
pub num_sta: Option<u32>,
pub lan_num_sta: Option<u32>,
pub wlan_num_sta: Option<u32>,
pub latency: Option<f64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DeviceStatsSample {
pub timestamp: DateTime<Utc>,
pub mac: MacAddress,
pub tx_bytes: Option<u64>,
pub rx_bytes: Option<u64>,
pub num_sta: Option<u32>,
pub cpu: Option<f64>,
pub mem: Option<f64>,
}