notegraf_web/
telemetry.rs1use crate::configuration::Settings;
2use opentelemetry::sdk::trace::{self, Tracer};
3use opentelemetry::sdk::Resource;
4use opentelemetry::KeyValue;
5use opentelemetry_otlp::WithExportConfig;
6use tracing::Subscriber;
7use tracing_log::LogTracer;
8use tracing_subscriber::registry::LookupSpan;
9use tracing_subscriber::{layer::SubscriberExt, EnvFilter, Registry};
10
11pub fn get_otlp_tracer(configuration: &Settings) -> Option<Tracer> {
12 let end_point = configuration.otlpendpoint.as_ref()?;
13 let otlp_exporter = opentelemetry_otlp::new_exporter()
14 .tonic()
15 .with_endpoint(end_point);
16 let tracer = opentelemetry_otlp::new_pipeline()
17 .tracing()
18 .with_exporter(otlp_exporter)
19 .with_trace_config(
20 trace::config().with_resource(Resource::new(vec![KeyValue::new(
21 "service.name",
22 format!(
23 "notegraf{}",
24 if configuration.debug { "_debug" } else { "" }
25 ),
26 )])),
27 )
28 .install_batch(opentelemetry::runtime::TokioCurrentThread)
30 .expect("Failed to create an opentelemetry_otlp tracer");
31 Some(tracer)
32}
33
34pub fn get_subscriber(
35 configuration: &Settings,
36) -> impl Subscriber + Send + Sync + for<'span> LookupSpan<'span> {
37 let mut default_logging_level = if configuration.debug { "debug" } else { "info" };
38 if let Some(l) = &configuration.loglevel {
39 default_logging_level = l.as_ref();
40 }
41 let env_filter =
42 EnvFilter::try_from_default_env().unwrap_or_else(|_| EnvFilter::new(default_logging_level));
43 Registry::default().with(env_filter)
44}
45
46pub fn init_tracing(subscriber: impl Subscriber + Send + Sync + for<'span> LookupSpan<'span>) {
47 LogTracer::init().expect("Failed to init LogTracer");
48 tracing::subscriber::set_global_default(subscriber)
49 .expect("Failed to set the default tracing subscriber");
50}