#![doc(hidden)]
#![allow(unused_imports)]
use opentelemetry::{sdk::{
propagation::{BaggagePropagator, TextMapCompositePropagator, TraceContextPropagator},
trace::{self, Config, Sampler, Tracer}, Resource,
}, global::BoxedTracer, trace::TracerProvider};
use opentelemetry::{global, trace::TraceError, KeyValue};
use opentelemetry_jaeger::Propagator as JaegerPropagator;
use opentelemetry_semantic_conventions::resource;
include!(concat!(env!("OUT_DIR"), "/build_vars.rs"));
pub fn init_global_propagator() {
global::set_text_map_propagator(composite_propagator());
}
fn composite_propagator() -> TextMapCompositePropagator {
let jaeger_propagator = JaegerPropagator::new();
let baggage_propagator = BaggagePropagator::new();
let trace_context_propagator = TraceContextPropagator::new();
TextMapCompositePropagator::new(vec![
Box::new(jaeger_propagator),
Box::new(baggage_propagator),
Box::new(trace_context_propagator),
])
}
#[allow(dead_code)]
pub fn trace_config(version: &str, instance_id: &str) -> Config {
let tags = [
resource::SERVICE_VERSION.string(version.to_owned()),
resource::SERVICE_INSTANCE_ID.string(instance_id.to_owned()),
resource::PROCESS_EXECUTABLE_PATH.string(std::env::current_exe().unwrap().display().to_string()),
resource::PROCESS_PID.string(std::process::id().to_string()),
KeyValue::new("process.executable.profile", PROFILE),
];
trace::config().with_resource(Resource::new(tags))
}
pub fn jaeger_tracer(svc_name: &str, version: &str, instance_id: &str) -> Result<Tracer, TraceError> {
opentelemetry_jaeger::new_pipeline()
.with_service_name(svc_name)
.with_trace_config(trace_config(version, instance_id))
.install_batch(opentelemetry::runtime::AsyncStd)
}
pub fn global_tracer(svc_name: &'static str, version: &str, instance_id: &str) -> Result<BoxedTracer, TraceError> {
let _ = jaeger_tracer(svc_name, version, instance_id)?;
Ok(global::tracer(svc_name))
}