rustfoundry 4.2.0

A Rust service rustfoundry library.
Documentation
use rustfoundry::telemetry::settings::{
    ActiveSamplingSettings, RateLimitingSettings, SamplingStrategy, TracingSettings,
};
use rustfoundry::telemetry::tracing;
use rustfoundry::telemetry::TestTelemetryContext;
use rustfoundry_macros::with_test_telemetry;

fn make_test_trace(idx: usize) {
    let _root1 = tracing::span(format!("root{idx}"));
    let _root1_child1 = tracing::span(format!("root{idx}_child1"));
    let _root1_child1 = tracing::span(format!("root{idx}_child2"));
}

#[with_test_telemetry(test)]
fn test_rate_limiter(mut ctx: TestTelemetryContext) {
    for i in 0..10 {
        make_test_trace(i)
    }

    assert_eq!(ctx.traces(Default::default()).len(), 10);

    ctx.set_tracing_settings(TracingSettings {
        sampling_strategy: SamplingStrategy::Active(ActiveSamplingSettings {
            rate_limit: RateLimitingSettings {
                enabled: true,
                max_events_per_second: 5,
            },
            ..Default::default()
        }),
        ..Default::default()
    });

    let _scope = ctx.scope();
    for i in 10..20 {
        make_test_trace(i)
    }

    assert_eq!(ctx.traces(Default::default()).len(), 5);
}

#[with_test_telemetry(test)]
fn test_passive_sampler(mut ctx: TestTelemetryContext) {
    for i in 0..10 {
        make_test_trace(i)
    }

    assert_eq!(ctx.traces(Default::default()).len(), 10);

    ctx.set_tracing_settings(TracingSettings {
        sampling_strategy: SamplingStrategy::Passive,
        ..Default::default()
    });

    let _scope = ctx.scope();
    for i in 10..20 {
        make_test_trace(i)
    }

    assert_eq!(ctx.traces(Default::default()).len(), 0);
}