hitman 0.12.1

A command line tool for hitting API endpoints
Documentation
use anyhow::{bail, Result};
use log::warn;
use tokio::time::sleep;

use std::time::Duration;

use crate::{
    prompt::{get_interaction, prepare_request_interactive},
    request::{build_client, do_request},
    resolve::Resolved,
    scope::Scope,
};

pub async fn monitor(
    resolved: &Resolved,
    delay_seconds: i32,
    scope: &Scope,
) -> Result<()> {
    let Ok(delay) = u64::try_from(delay_seconds) else {
        bail!("Invalid delay");
    };

    let client = build_client(&resolved.root_dir)?;

    warn!("# Repeating every {delay} seconds, until interrupted...");

    let interaction = get_interaction();
    let req =
        prepare_request_interactive(resolved, scope, interaction.as_ref())?;

    loop {
        let res = do_request(&client, &req).await;

        match res {
            Ok((res, elapsed)) => {
                let ts = chrono::Utc::now();
                println!("{}, {}, {:.2?}", ts, res.status().as_u16(), elapsed);
            }
            Err(e) => {
                eprintln!("{e}");
            }
        }

        sleep(Duration::from_secs(delay)).await;
    }
}