parlov-probe 0.1.1

Probe engine trait and HTTP execution layer for parlov.
Documentation

parlov-probe

HTTP probe execution for parlov. Sends requests, captures the full response surface with timing.

trait

pub trait Probe: Send + Sync {
    fn execute(&self, def: &ProbeDefinition)
        -> impl Future<Output = Result<ResponseSurface, Error>> + Send;
}

One call, one HTTP interaction, one ResponseSurface. The caller drives batching and sample collection.

use it

use parlov_probe::http::HttpProbe;
use parlov_probe::Probe;
use parlov_core::ProbeDefinition;
use http::{Method, HeaderMap};

let client = HttpProbe::new();
let surface = client.execute(&ProbeDefinition {
    url: "https://api.example.com/users/123".into(),
    method: Method::GET,
    headers: HeaderMap::new(),
    body: None,
}).await?;

println!("status: {}", surface.status);
println!("timing: {}ms", surface.timing_ns / 1_000_000);

HttpProbe uses reqwest with connection pooling. Timing is measured via std::time::Instant around the request-to-response path. All headers from ProbeDefinition are forwarded — auth context is expressed as a plain Authorization header.

custom probes

Implement Probe for custom execution strategies (e.g. HTTP/2 single-packet timing, mTLS client certs):

struct MyProbe { /* ... */ }

impl Probe for MyProbe {
    fn execute(&self, def: &ProbeDefinition)
        -> impl Future<Output = Result<ResponseSurface, Error>> + Send
    {
        async { todo!() }
    }
}

license

MIT OR Apache-2.0