use culverin::{AttackBuilder, get, calculate_metrics};
use std::time::Duration;
use anyhow::Result;
#[tokio::main]
async fn main() -> Result<()> {
let target = get("https://example.com")?;
let results = AttackBuilder::new()
.rate(10.0) .duration(Duration::from_secs(5)) .timeout(Duration::from_secs(3)) .workers(4) .add_header("User-Agent", "culverin-example")
.add_target(target)
.run()
.await?;
if let Some(metrics) = calculate_metrics(&results) {
println!("Attack completed!");
println!("Total requests: {}", metrics.requests);
println!("Success rate: {:.2}%", metrics.success_rate * 100.0);
println!("Mean latency: {:.2}ms", metrics.mean.as_secs_f64() * 1000.0);
println!("95th percentile: {:.2}ms", metrics.p95.as_secs_f64() * 1000.0);
println!("Requests/second: {:.2}", metrics.rate);
} else {
println!("No results collected");
}
Ok(())
}