use opentelemetry_sdk::{
metrics::SdkMeterProvider,
testing::{metrics::TestMetricReader, trace::NoopSpanExporter},
trace::SdkTracerProvider,
};
use tracing_subscriber::layer::SubscriberExt;
use tracing_subscriber::util::SubscriberInitExt;
use crate::{TelemetryHandles, build_resource};
impl crate::Telemetry {
pub fn testing(service_name: &str) -> TelemetryHandles {
let resource = build_resource(service_name, None, None);
let tracer_provider = SdkTracerProvider::builder()
.with_resource(resource.clone())
.with_simple_exporter(NoopSpanExporter::new())
.build();
opentelemetry::global::set_tracer_provider(tracer_provider.clone());
let metric_reader = TestMetricReader::new();
let meter_provider = SdkMeterProvider::builder()
.with_resource(resource)
.with_reader(metric_reader)
.build();
opentelemetry::global::set_meter_provider(meter_provider.clone());
let otel_layer = tracing_opentelemetry::layer();
tracing_subscriber::registry()
.with(tracing_subscriber::EnvFilter::from_default_env())
.with(tracing_subscriber::fmt::layer())
.with(otel_layer)
.try_init()
.ok();
TelemetryHandles {
tracer_provider,
meter_provider: Some(meter_provider),
logger_provider: None,
shutdown_timeout: crate::DEFAULT_SHUTDOWN_TIMEOUT,
}
}
}