otel_bootstrap/
testing.rs1use opentelemetry_sdk::{
19 metrics::SdkMeterProvider,
20 testing::{metrics::TestMetricReader, trace::NoopSpanExporter},
21 trace::SdkTracerProvider,
22};
23use tracing_subscriber::layer::SubscriberExt;
24use tracing_subscriber::util::SubscriberInitExt;
25
26use crate::{TelemetryHandles, build_resource};
27
28impl crate::Telemetry {
29 pub fn testing(service_name: &str) -> TelemetryHandles {
39 let resource = build_resource(service_name, None, None);
40
41 let tracer_provider = SdkTracerProvider::builder()
42 .with_resource(resource.clone())
43 .with_simple_exporter(NoopSpanExporter::new())
44 .build();
45
46 opentelemetry::global::set_tracer_provider(tracer_provider.clone());
47
48 let metric_reader = TestMetricReader::new();
49 let meter_provider = SdkMeterProvider::builder()
50 .with_resource(resource)
51 .with_reader(metric_reader)
52 .build();
53
54 opentelemetry::global::set_meter_provider(meter_provider.clone());
55
56 let otel_layer = tracing_opentelemetry::layer();
57 tracing_subscriber::registry()
58 .with(tracing_subscriber::EnvFilter::from_default_env())
59 .with(tracing_subscriber::fmt::layer())
60 .with(otel_layer)
61 .try_init()
62 .ok();
63
64 let boot_owner = crate::boot::Timeline::global()
65 .attach(&tracer_provider, service_name)
66 .is_some();
67
68 TelemetryHandles {
69 boot_owner,
70 tracer_provider,
71 meter_provider: Some(meter_provider),
72 logger_provider: None,
73 shutdown_timeout: crate::DEFAULT_SHUTDOWN_TIMEOUT,
74 #[cfg(feature = "profiling")]
75 profiling_handle: None,
76 }
77 }
78}