Load Generator
async fn load_test(client: TaskQueueClient, rate: u32, duration: Duration) {
let interval = Duration::from_nanos(1_000_000_000 / rate as u64);
let mut ticker = tokio::time::interval(interval);
let deadline = Instant::now() + duration;
let mut i: u64 = 0;
while Instant::now() < deadline {
ticker.tick().await;
let client = client.clone();
tokio::spawn(async move {
let start = Instant::now();
let result = client.submit_task(SubmitTaskRequest {
idempotency_key: format!("load-{i}"),
task_type: "noop".to_string(),
..Default::default()
}).await;
histogram!("load_test.latency_ms").record(start.elapsed().as_millis() as f64);
if result.is_err() { counter!("load_test.errors").increment(1); }
});
i += 1;
}
}