@@ -2,19 +2,12 @@ use http::Request;
22use opentelemetry:: trace:: Tracer ;
33use opentelemetry_gcloud_trace:: { GcpCloudTraceExporterBuilder , SdkTracer } ;
44use opentelemetry_http:: HeaderExtractor ;
5- use opentelemetry_sdk:: Resource ;
5+ use opentelemetry_sdk:: { trace :: SdkTracerProvider , Resource } ;
66use opentelemetry_stackdriver:: google_trace_context_propagator:: GoogleTraceContextPropagator ;
77use tower_http:: trace:: MakeSpan ;
8- use tracing_opentelemetry:: { OpenTelemetryLayer , OpenTelemetrySpanExt , PreSampledTracer } ;
9- use tracing_subscriber:: Registry ;
8+ use tracing_opentelemetry:: { OpenTelemetrySpanExt , PreSampledTracer } ;
109
11- use crate :: Error ;
12-
13- /// Wrapper type for SdkTracer that implements the Tracer trait
14- #[ derive( Debug , Clone ) ]
15- pub struct GCloudTracer {
16- tracer : SdkTracer ,
17- }
10+ use crate :: { Error , TelemetryTracer } ;
1811
1912#[ derive( Debug , Clone , Default ) ]
2013pub struct GoogleStackDriverMakeSpan ;
@@ -45,13 +38,17 @@ pub struct GcloudConfig {
4538
4639/// Builder for creating an OpenTelemetry layer with Google Cloud Trace exporter
4740#[ derive( Debug , Clone ) ]
48- pub struct GCloudTracingBuilder {
41+ pub struct GCloudTracerBuilder {
4942 service_name : String ,
5043 project_id : Option < String > ,
5144 resource : Option < Resource > ,
5245}
5346
54- impl GCloudTracingBuilder {
47+ /////////////////////////////////////////////////////////////////////////////////
48+ // GCloudTracerBuilder implementations
49+ /////////////////////////////////////////////////////////////////////////////////
50+
51+ impl GCloudTracerBuilder {
5552 /// Create a new Google Cloud tracing builder
5653 pub fn new ( ) -> Self {
5754 Self { service_name : "katana" . to_string ( ) , project_id : None , resource : None }
@@ -105,22 +102,39 @@ impl GCloudTracingBuilder {
105102 let tracer_provider = trace_exporter. create_provider ( ) . await ?;
106103 let tracer = trace_exporter. install ( & tracer_provider) . await ?;
107104
108- // Set the Google Cloud trace context propagator globally
109- // This will handle both extraction and injection of X-Cloud-Trace-Context headers
110- opentelemetry:: global:: set_text_map_propagator ( GoogleTraceContextPropagator :: default ( ) ) ;
111- opentelemetry:: global:: set_tracer_provider ( tracer_provider. clone ( ) ) ;
105+ // // Set the Google Cloud trace context propagator globally
106+ // // This will handle both extraction and injection of X-Cloud-Trace-Context headers
107+ // opentelemetry::global::set_text_map_propagator(GoogleTraceContextPropagator::default());
108+ // opentelemetry::global::set_tracer_provider(tracer_provider.clone());
112109
113110 // Return the layer
114- Ok ( GCloudTracer { tracer } )
111+ Ok ( GCloudTracer { tracer, tracer_provider } )
115112 }
116113}
117114
118- impl Default for GCloudTracingBuilder {
115+ impl Default for GCloudTracerBuilder {
119116 fn default ( ) -> Self {
120117 Self :: new ( )
121118 }
122119}
123120
121+ /// Wrapper type for SdkTracer that implements the Tracer trait
122+ #[ derive( Debug , Clone ) ]
123+ pub struct GCloudTracer {
124+ tracer : SdkTracer ,
125+ tracer_provider : SdkTracerProvider ,
126+ }
127+
128+ /////////////////////////////////////////////////////////////////////////////////
129+ // GCloudTracer implementations
130+ /////////////////////////////////////////////////////////////////////////////////
131+
132+ impl GCloudTracer {
133+ pub fn builder ( ) -> GCloudTracerBuilder {
134+ GCloudTracerBuilder :: new ( )
135+ }
136+ }
137+
124138impl Tracer for GCloudTracer {
125139 type Span = <SdkTracer as Tracer >:: Span ;
126140
@@ -154,46 +168,56 @@ impl PreSampledTracer for GCloudTracer {
154168 }
155169}
156170
157- /// Initialize Google Cloud Trace exporter with custom service name (backward compatibility)
158- pub ( crate ) async fn init_tracer_with_service (
159- gcloud_config : & GcloudConfig ,
160- service_name : & str ,
161- ) -> Result < GCloudTracer , Error > {
162- rustls:: crypto:: ring:: default_provider ( )
163- . install_default ( )
164- . map_err ( |_| Error :: InstallCryptoFailed ) ?;
165-
166- let resource = Resource :: builder ( ) . with_service_name ( service_name. to_string ( ) ) . build ( ) ;
167-
168- let mut trace_exporter = if let Some ( project_id) = & gcloud_config. project_id {
169- GcpCloudTraceExporterBuilder :: new ( project_id. clone ( ) )
170- } else {
171- // Default will attempt to find project ID from environment variables in the following
172- // order:
173- // - GCP_PROJECT
174- // - PROJECT_ID
175- // - GCP_PROJECT_ID
176- GcpCloudTraceExporterBuilder :: for_default_project_id ( ) . await ?
177- } ;
178-
179- trace_exporter = trace_exporter. with_resource ( resource) ;
180-
181- let tracer_provider = trace_exporter. create_provider ( ) . await ?;
182- let tracer = trace_exporter. install ( & tracer_provider) . await ?;
183-
184- // Set the Google Cloud trace context propagator globally
185- // This will handle both extraction and injection of X-Cloud-Trace-Context headers
186- opentelemetry:: global:: set_text_map_propagator ( GoogleTraceContextPropagator :: default ( ) ) ;
187- opentelemetry:: global:: set_tracer_provider ( tracer_provider. clone ( ) ) ;
188-
189- Ok ( GCloudTracer :: new ( tracer) )
171+ impl TelemetryTracer for GCloudTracer {
172+ fn init ( & self ) -> Result < ( ) , Error > {
173+ // Set the Google Cloud trace context propagator globally
174+ // This will handle both extraction and injection of X-Cloud-Trace-Context headers
175+ opentelemetry:: global:: set_text_map_propagator ( GoogleTraceContextPropagator :: default ( ) ) ;
176+ opentelemetry:: global:: set_tracer_provider ( self . tracer_provider . clone ( ) ) ;
177+ Ok ( ( ) )
178+ }
190179}
191180
192- /// Initialize Google Cloud Trace exporter and OpenTelemetry propagators for Google Cloud trace
193- /// context support (backward compatibility).
194- ///
195- /// Make sure to set `GOOGLE_APPLICATION_CREDENTIALS` env var to authenticate to gcloud
196- #[ allow( dead_code) ]
197- pub ( crate ) async fn init_tracer ( gcloud_config : & GcloudConfig ) -> Result < GCloudTracer , Error > {
198- init_tracer_with_service ( gcloud_config, "katana" ) . await
199- }
181+ // /// Initialize Google Cloud Trace exporter with custom service name (backward compatibility)
182+ // pub(crate) async fn init_tracer_with_service(
183+ // gcloud_config: &GcloudConfig,
184+ // service_name: &str,
185+ // ) -> Result<GCloudTracer, Error> {
186+ // rustls::crypto::ring::default_provider()
187+ // .install_default()
188+ // .map_err(|_| Error::InstallCryptoFailed)?;
189+
190+ // let resource = Resource::builder().with_service_name(service_name.to_string()).build();
191+
192+ // let mut trace_exporter = if let Some(project_id) = &gcloud_config.project_id {
193+ // GcpCloudTraceExporterBuilder::new(project_id.clone())
194+ // } else {
195+ // // Default will attempt to find project ID from environment variables in the following
196+ // // order:
197+ // // - GCP_PROJECT
198+ // // - PROJECT_ID
199+ // // - GCP_PROJECT_ID
200+ // GcpCloudTraceExporterBuilder::for_default_project_id().await?
201+ // };
202+
203+ // trace_exporter = trace_exporter.with_resource(resource);
204+
205+ // let tracer_provider = trace_exporter.create_provider().await?;
206+ // let tracer = trace_exporter.install(&tracer_provider).await?;
207+
208+ // // Set the Google Cloud trace context propagator globally
209+ // // This will handle both extraction and injection of X-Cloud-Trace-Context headers
210+ // opentelemetry::global::set_text_map_propagator(GoogleTraceContextPropagator::default());
211+ // opentelemetry::global::set_tracer_provider(tracer_provider.clone());
212+
213+ // Ok(GCloudTracer::new(tracer))
214+ // }
215+
216+ // /// Initialize Google Cloud Trace exporter and OpenTelemetry propagators for Google Cloud trace
217+ // /// context support (backward compatibility).
218+ // ///
219+ // /// Make sure to set `GOOGLE_APPLICATION_CREDENTIALS` env var to authenticate to gcloud
220+ // #[allow(dead_code)]
221+ // pub(crate) async fn init_tracer(gcloud_config: &GcloudConfig) -> Result<GCloudTracer, Error> {
222+ // init_tracer_with_service(gcloud_config, "katana").await
223+ // }
0 commit comments