@@ -97,22 +97,17 @@ def _set_metrics_tracer_attributes(self, resources: Dict[str, str]) -> None:
9797 Args:
9898 resources (Dict[str, str]): A dictionary containing project, instance, and database information.
9999 """
100- if SpannerMetricsTracerFactory .current_metrics_tracer is None :
100+ tracer = SpannerMetricsTracerFactory .get_current_tracer ()
101+ if tracer is None :
101102 return
102103
103104 if resources :
104105 if "project" in resources :
105- SpannerMetricsTracerFactory .current_metrics_tracer .set_project (
106- resources ["project" ]
107- )
106+ tracer .set_project (resources ["project" ])
108107 if "instance" in resources :
109- SpannerMetricsTracerFactory .current_metrics_tracer .set_instance (
110- resources ["instance" ]
111- )
108+ tracer .set_instance (resources ["instance" ])
112109 if "database" in resources :
113- SpannerMetricsTracerFactory .current_metrics_tracer .set_database (
114- resources ["database" ]
115- )
110+ tracer .set_database (resources ["database" ])
116111
117112 def intercept (self , invoked_method , request_or_iterator , call_details ):
118113 """Intercept gRPC calls to collect metrics.
@@ -126,31 +121,32 @@ def intercept(self, invoked_method, request_or_iterator, call_details):
126121 The RPC response
127122 """
128123 factory = SpannerMetricsTracerFactory ()
129- if (
130- SpannerMetricsTracerFactory .current_metrics_tracer is None
131- or not factory .enabled
132- ):
124+ tracer = SpannerMetricsTracerFactory .get_current_tracer ()
125+ if tracer is None or not factory .enabled :
133126 return invoked_method (request_or_iterator , call_details )
134127
135128 # Setup Metric Tracer attributes from call details
136- ## Extract Project / Instance / Databse from header information
137- resources = self ._extract_resource_from_path (call_details .metadata )
138- self ._set_metrics_tracer_attributes (resources )
129+ ## Extract Project / Instance / Database from header information if not already set
130+ if not (
131+ tracer .client_attributes .get ("project_id" )
132+ and tracer .client_attributes .get ("instance_id" )
133+ and tracer .client_attributes .get ("database" )
134+ ):
135+ resources = self ._extract_resource_from_path (call_details .metadata )
136+ self ._set_metrics_tracer_attributes (resources )
139137
140138 ## Format method to be be spanner.<method name>
141139 method_name = self ._remove_prefix (
142140 call_details .method , SPANNER_METHOD_PREFIX
143141 ).replace ("/" , "." )
144142
145- SpannerMetricsTracerFactory . current_metrics_tracer .set_method (method_name )
146- SpannerMetricsTracerFactory . current_metrics_tracer .record_attempt_start ()
143+ tracer .set_method (method_name )
144+ tracer .record_attempt_start ()
147145 response = invoked_method (request_or_iterator , call_details )
148- SpannerMetricsTracerFactory . current_metrics_tracer .record_attempt_completion ()
146+ tracer .record_attempt_completion ()
149147
150148 # Process and send GFE metrics if enabled
151- if SpannerMetricsTracerFactory . current_metrics_tracer .gfe_enabled :
149+ if tracer .gfe_enabled :
152150 metadata = response .initial_metadata ()
153- SpannerMetricsTracerFactory .current_metrics_trace .record_gfe_metrics (
154- metadata
155- )
151+ tracer .record_gfe_metrics (metadata )
156152 return response
0 commit comments