use std::collections::HashMap;
use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use serde_json::Value;
#[derive(Debug, Serialize, Deserialize)]
pub struct NetworkErrorByClass {
#[serde(rename = "4xx")]
pub client_errors: Option<u64>,
#[serde(rename = "5xx")]
pub server_errors: u64,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct NetworkErrorSummary {
pub total: u64,
pub by_class: NetworkErrorByClass,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct NetworkErrorByStatus {
pub status: u16,
pub total: u64,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct NetworkErrorTimeseries {
pub date: DateTime<Utc>,
pub buckets: HashMap<String, u64>,
pub total: u64,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct NetworkErrorPath {
pub path: String,
pub method: String,
pub total: u64,
pub by_status: Vec<NetworkErrorByStatus>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct NetworkErrors {
pub summary: NetworkErrorSummary,
pub by_status: Vec<NetworkErrorByStatus>,
pub timeseries: Vec<NetworkErrorTimeseries>,
pub top_paths: Vec<NetworkErrorPath>,
pub by_method: Value,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct LatencyPercentiles {
pub p50: u32,
pub p95: u32,
pub p99: u32,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct NetworkPerformanceSummary {
pub edge: LatencyPercentiles,
pub origin: LatencyPercentiles,
pub requests: u64,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct NetworkPerformanceTimeseries {
pub date: DateTime<Utc>,
pub requests: u64,
pub edge: LatencyPercentiles,
pub origin: LatencyPercentiles,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct NetworkPerformanceCountry {
#[serde(rename = "type")]
pub country_code: String,
pub p50: u32,
pub p95: u32,
pub requests: u64,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct NetworkPerformanceColo {
#[serde(rename = "type")]
pub colo_id: String,
pub city: String,
pub country: String,
pub p50: u32,
pub p95: u32,
pub requests: u64,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct NetworkPerformancePath {
pub path: String,
pub p95: u32,
pub p99: u32,
pub requests: u64,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct NetworkPerformance {
pub summary: NetworkPerformanceSummary,
pub timeseries: Vec<NetworkPerformanceTimeseries>,
pub countries: Vec<NetworkPerformanceCountry>,
pub colos: Vec<NetworkPerformanceColo>,
pub slowest_paths: Vec<NetworkPerformancePath>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct NetworkLogEntry {
pub timestamp: DateTime<Utc>,
pub ip: Option<String>,
pub country: Option<String>,
pub location: Option<String>,
pub asn: String,
pub agent: Option<String>,
pub category: Option<String>,
pub mitigated: bool,
pub method: String,
pub host: String,
pub path: String,
pub query: Option<String>,
pub protocol: String,
pub referer: Option<String>,
pub status: u16,
#[serde(rename = "contentType")]
pub content_type: Option<String>,
pub cache: Option<String>,
}