commonware_runtime/tokio/
tracing.rs1use commonware_utils::Probability;
4use opentelemetry::{global, trace::TracerProvider};
5use opentelemetry_otlp::{ExporterBuildError, SpanExporter, WithExportConfig};
6use opentelemetry_sdk::{
7 Resource,
8 trace::{BatchSpanProcessor, Sampler, SdkTracerProvider, Tracer},
9};
10use std::time::Duration;
11
12const TIMEOUT: Duration = Duration::from_secs(15);
14
15pub struct Config {
17 pub endpoint: String,
19 pub name: String,
21 pub rate: Probability,
23}
24
25pub fn export(cfg: Config) -> Result<Tracer, ExporterBuildError> {
27 let exporter = SpanExporter::builder()
29 .with_http()
30 .with_endpoint(cfg.endpoint)
31 .with_timeout(TIMEOUT)
32 .build()?;
33
34 let batch_processor = BatchSpanProcessor::builder(exporter).build();
36
37 let resource = Resource::builder_empty()
39 .with_service_name(cfg.name.clone())
40 .build();
41
42 let sampler = Sampler::TraceIdRatioBased(cfg.rate.as_f64());
44 let tracer_provider = SdkTracerProvider::builder()
45 .with_span_processor(batch_processor)
46 .with_resource(resource)
47 .with_sampler(sampler)
48 .build();
49
50 let tracer = tracer_provider.tracer(cfg.name);
52 global::set_tracer_provider(tracer_provider);
53 Ok(tracer)
54}