use serde::{Deserialize, Serialize};
use std::time::Duration;
use url::Url;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Target {
pub method: String,
pub url: Url,
pub headers: Vec<Header>,
pub body: Option<Vec<u8>>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Header {
pub name: String,
pub value: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Result {
pub timestamp: chrono::DateTime<chrono::Utc>,
pub latency: Duration,
pub status_code: u16,
pub error: Option<String>,
pub target: Target,
pub bytes_in: usize,
pub bytes_out: usize,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Metrics {
pub requests: usize,
pub success: usize,
pub duration: Duration,
pub min: Duration,
pub max: Duration,
pub mean: Duration,
pub p50: Duration,
pub p90: Duration,
pub p95: Duration,
pub p99: Duration,
pub rate: f64,
pub bytes_in: usize,
pub bytes_out: usize,
pub success_rate: f64,
}
#[derive(Debug, Clone)]
pub struct AttackConfig {
pub rate: f64,
pub duration: Option<Duration>,
pub timeout: Duration,
pub workers: u64,
pub max_workers: Option<u64>,
pub keepalive: bool,
pub connections: usize,
pub max_connections: Option<usize>,
pub http2: bool,
pub name: Option<String>,
pub max_body: i64,
pub dns_ttl: Duration,
pub laddr: String,
pub lazy: bool,
pub opentelemetry_addr: Option<String>,
}