strest 0.1.10

Blazing-fast async HTTP load tester in Rust - lock-free design, real-time stats, distributed runs, and optional chart exports for high-load API testing.
Documentation
use std::time::Duration;

use tracing::warn;

use crate::args::TesterArgs;
use crate::sinks::config::SinksConfig;

pub(in crate::distributed::controller) const REPORT_GRACE_SECS: u64 = 30;
pub(in crate::distributed::controller) const DEFAULT_SINK_INTERVAL: Duration =
    Duration::from_secs(1);
pub(in crate::distributed::controller) const DEFAULT_START_AFTER_MS: u64 = 3000;

pub(in crate::distributed::controller) fn resolve_sink_interval(
    config: Option<&SinksConfig>,
) -> Duration {
    match config.and_then(|value| value.update_interval_ms) {
        Some(0) => {
            warn!(
                "sinks.update_interval_ms must be > 0; using default {}ms",
                DEFAULT_SINK_INTERVAL.as_millis()
            );
            DEFAULT_SINK_INTERVAL
        }
        Some(ms) => Duration::from_millis(ms),
        None => DEFAULT_SINK_INTERVAL,
    }
}

pub(in crate::distributed::controller) fn resolve_agent_wait_timeout(
    args: &TesterArgs,
) -> Option<Duration> {
    args.agent_wait_timeout_ms
        .map(|value| Duration::from_millis(value.get()))
}

pub(in crate::distributed::controller) fn resolve_heartbeat_check_interval(
    timeout: Duration,
) -> Duration {
    let timeout_ms = timeout.as_millis();
    let mut interval_ms = timeout_ms.saturating_div(2);
    if interval_ms < 200 {
        interval_ms = timeout_ms.max(1);
    }
    Duration::from_millis(u64::try_from(interval_ms).unwrap_or(1))
}