notegraf_web/
telemetry.rs

1use 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        // https://github.com/open-telemetry/opentelemetry-rust/issues/536#issuecomment-840197611
29        .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}