Skip to main content

quickstart/
quickstart.rs

1use poolsim_core::{
2    simulate,
3    types::{PoolConfig, SimulationOptions, WorkloadConfig},
4};
5
6fn build_inputs() -> (WorkloadConfig, PoolConfig, SimulationOptions) {
7    let workload = WorkloadConfig {
8        requests_per_second: 220.0,
9        latency_p50_ms: 8.0,
10        latency_p95_ms: 32.0,
11        latency_p99_ms: 85.0,
12        raw_samples_ms: None,
13        step_load_profile: None,
14    };
15    let pool = PoolConfig {
16        max_server_connections: 120,
17        connection_overhead_ms: 2.0,
18        idle_timeout_ms: None,
19        min_pool_size: 3,
20        max_pool_size: 24,
21    };
22    (workload, pool, SimulationOptions::default())
23}
24
25fn run_example() -> u32 {
26    let (workload, pool, options) = build_inputs();
27    let report = simulate(&workload, &pool, &options).expect("simulation should succeed");
28    report.optimal_pool_size
29}
30
31#[cfg(not(test))]
32fn main() {
33    let optimal = run_example();
34    println!("recommended pool size: {optimal}");
35}
36
37#[cfg(test)]
38mod tests {
39    use super::*;
40
41    #[test]
42    fn quickstart_example_runs() {
43        let optimal = run_example();
44        assert!(optimal >= 3);
45    }
46}