use opentelemetry::trace::TraceError;
use opentelemetry_jaeger::config::agent::AgentPipeline;
use opentelemetry_sdk::{
trace::{config, Sampler, Tracer},
Resource,
};
use opentelemetry_semantic_conventions as semcov;
#[must_use]
pub fn identity(v: AgentPipeline) -> AgentPipeline {
v
}
pub fn init_tracer<F>(resource: Resource, transform: F) -> Result<Tracer, TraceError>
where
F: FnOnce(AgentPipeline) -> AgentPipeline,
{
let mut pipeline = opentelemetry_jaeger::new_agent_pipeline();
if let Some(name) = resource.get(semcov::resource::SERVICE_NAME) {
pipeline = pipeline.with_service_name(name.to_string());
}
pipeline = pipeline.with_trace_config(
config()
.with_resource(resource)
.with_sampler(Sampler::AlwaysOn),
);
pipeline = transform(pipeline);
pipeline.install_batch(opentelemetry_sdk::runtime::Tokio)
}