ottotom-testsupport 0.32.0

Test helpers used for the ottotom crate tests
Documentation
use crate::reader::TestMetricsReader;
use opentelemetry::KeyValue;
use opentelemetry::metrics::MeterProvider;
use opentelemetry_sdk::Resource;
use opentelemetry_sdk::metrics::SdkMeterProvider;
use opentelemetry_sdk::metrics::data::ResourceMetrics;
use opentelemetry_sdk::metrics::reader::MetricReader;

pub fn make_test_metrics() -> ResourceMetrics {
    let reader = TestMetricsReader::default();
    let meter_provider = SdkMeterProvider::builder()
        .with_resource(
            Resource::builder()
                .with_service_name("ottotom-testsupport")
                .build(),
        )
        .with_reader(reader.clone())
        .build();
    let meter = meter_provider.meter("meter.1");

    let gauge = meter
        .f64_gauge("f64.gauge")
        .with_description("A \"gauge\"\nFor testing")
        .build();
    gauge.record(4.2, &[KeyValue::new("kk", "v1")]);
    gauge.record(4.22, &[KeyValue::new("kk", "v1")]);
    gauge.record(4.23, &[KeyValue::new("kk", "v2")]);

    let counter = meter.u64_counter("u64.counter").with_unit("s").build();
    counter.add(125, &[]);

    let hist = meter.f64_histogram("histo").build();
    hist.record(0.0, &[]);
    hist.record(1.3, &[]);
    hist.record(1.4, &[]);
    hist.record(13.0, &[]);

    let mut metrics = ResourceMetrics::default();
    reader.collect(&mut metrics).unwrap();

    metrics
}

pub fn make_large_test_metrics() -> ResourceMetrics {
    let reader = TestMetricsReader::default();
    let meter_provider = SdkMeterProvider::builder()
        .with_reader(reader.clone())
        .build();
    let meter = meter_provider.meter("meter.1");

    let gauge = meter
        .f64_gauge("f64.gauge")
        .with_description("A \"gauge\"\nFor testing")
        .build();
    for i in 0..100 {
        gauge.record(4.22, &[KeyValue::new("foo.bar", format!("a{i}"))]);
    }

    let counter = meter.u64_counter("u64.counter").with_unit("s").build();
    for i in 0..1000 {
        counter.add(422 * i, &[KeyValue::new("high-low", format!("v\n{i}"))]);
    }

    let hist = meter.f64_histogram("histo").build();
    for i in 0..1000 {
        hist.record(
            4.22 / i as f64,
            &[
                KeyValue::new("x.y.z", format!("v{i}")),
                KeyValue::new("z.z.z", "fixed"),
                KeyValue::new("z.y.z", format!("0{}0", i + 1)),
            ],
        );
    }

    let mut metrics = ResourceMetrics::default();
    reader.collect(&mut metrics).unwrap();

    metrics
}