11//! OpenTelemetry provider implementation.
22
3+ #[ cfg( feature = "otel" ) ]
4+ use opentelemetry:: KeyValue ;
35#[ cfg( feature = "otel" ) ]
46use opentelemetry:: trace:: TracerProvider as _;
57#[ cfg( feature = "otel" ) ]
68use opentelemetry_otlp:: WithExportConfig ;
79#[ cfg( feature = "otel" ) ]
810use opentelemetry_sdk:: {
9- Resource , runtime ,
10- trace:: { self as sdktrace , Sampler } ,
11+ Resource ,
12+ trace:: { Sampler , SdkTracerProvider } ,
1113} ;
1214#[ cfg( feature = "otel" ) ]
1315use opentelemetry_semantic_conventions:: resource:: SERVICE_NAME ;
@@ -21,7 +23,7 @@ use crate::config::OtelSettings;
2123/// OpenTelemetry provider for Cortex CLI.
2224#[ cfg( feature = "otel" ) ]
2325pub struct OtelProvider {
24- tracer_provider : sdktrace :: TracerProvider ,
26+ tracer_provider : SdkTracerProvider ,
2527}
2628
2729#[ cfg( feature = "otel" ) ]
@@ -34,23 +36,21 @@ impl OtelProvider {
3436
3537 let endpoint = settings. endpoint . as_ref ( ) ?;
3638
37- // Build resource
38- let mut resource_builder =
39- Resource :: builder ( ) . with_attribute ( SERVICE_NAME , settings. service_name . clone ( ) ) ;
39+ // Build resource attributes
40+ let mut attrs = vec ! [ KeyValue :: new( SERVICE_NAME , settings. service_name. clone( ) ) ] ;
4041
4142 if let Some ( version) = & settings. service_version {
42- resource_builder = resource_builder . with_attribute (
43+ attrs . push ( KeyValue :: new (
4344 opentelemetry_semantic_conventions:: resource:: SERVICE_VERSION ,
4445 version. clone ( ) ,
45- ) ;
46+ ) ) ;
4647 }
4748
4849 for ( key, value) in & settings. resource_attributes {
49- resource_builder = resource_builder
50- . with_attribute ( opentelemetry:: KeyValue :: new ( key. clone ( ) , value. clone ( ) ) ) ;
50+ attrs. push ( KeyValue :: new ( key. clone ( ) , value. clone ( ) ) ) ;
5151 }
5252
53- let resource = resource_builder . build ( ) ;
53+ let resource = Resource :: builder_empty ( ) . with_attributes ( attrs ) . build ( ) ;
5454
5555 // Configure sampler
5656 let sampler = if settings. sampling_ratio >= 1.0 {
@@ -61,26 +61,26 @@ impl OtelProvider {
6161 Sampler :: TraceIdRatioBased ( settings. sampling_ratio )
6262 } ;
6363
64- // Build OTLP exporter
64+ // Build OTLP exporter using HTTP (more portable than tonic/gRPC)
6565 let exporter = opentelemetry_otlp:: SpanExporter :: builder ( )
66- . with_tonic ( )
66+ . with_http ( )
6767 . with_endpoint ( endpoint)
6868 . with_timeout ( std:: time:: Duration :: from_secs ( settings. export_timeout_secs ) )
6969 . build ( )
7070 . ok ( ) ?;
7171
7272 // Build tracer provider
73- let tracer_provider = sdktrace :: TracerProvider :: builder ( )
73+ let tracer_provider = SdkTracerProvider :: builder ( )
7474 . with_resource ( resource)
7575 . with_sampler ( sampler)
76- . with_batch_exporter ( exporter, runtime :: Tokio )
76+ . with_batch_exporter ( exporter)
7777 . build ( ) ;
7878
7979 Some ( Self { tracer_provider } )
8080 }
8181
8282 /// Get trace context headers from the current span.
83- pub fn headers ( span : & Span ) -> HeaderMap {
83+ pub fn headers ( _span : & Span ) -> HeaderMap {
8484 use opentelemetry:: propagation:: TextMapPropagator ;
8585 use opentelemetry_sdk:: propagation:: TraceContextPropagator ;
8686
0 commit comments