use commonware_utils::Probability;
use opentelemetry::{global, trace::TracerProvider};
use opentelemetry_otlp::{ExporterBuildError, SpanExporter, WithExportConfig};
use opentelemetry_sdk::{
Resource,
trace::{BatchSpanProcessor, Sampler, SdkTracerProvider, Tracer},
};
use std::time::Duration;
const TIMEOUT: Duration = Duration::from_secs(15);
pub struct Config {
pub endpoint: String,
pub name: String,
pub rate: Probability,
}
pub fn export(cfg: Config) -> Result<Tracer, ExporterBuildError> {
let exporter = SpanExporter::builder()
.with_http()
.with_endpoint(cfg.endpoint)
.with_timeout(TIMEOUT)
.build()?;
let batch_processor = BatchSpanProcessor::builder(exporter).build();
let resource = Resource::builder_empty()
.with_service_name(cfg.name.clone())
.build();
let sampler = Sampler::TraceIdRatioBased(cfg.rate.as_f64());
let tracer_provider = SdkTracerProvider::builder()
.with_span_processor(batch_processor)
.with_resource(resource)
.with_sampler(sampler)
.build();
let tracer = tracer_provider.tracer(cfg.name);
global::set_tracer_provider(tracer_provider);
Ok(tracer)
}