2727from typing_extensions import override
2828
2929from veadk .tracing .base_tracer import BaseTracer
30- from veadk .tracing .telemetry .exporters .apmplus_exporter import APMPlusExporter
3130from veadk .tracing .telemetry .exporters .base_exporter import BaseExporter
3231from veadk .tracing .telemetry .exporters .inmemory_exporter import InMemoryExporter
3332from veadk .utils .logger import get_logger
3736logger = get_logger (__name__ )
3837
3938
40- def _update_resource_attributions (
41- provider : TracerProvider , resource_attributes : dict
42- ) -> None :
43- """Update the resource attributes of a TracerProvider instance.
44-
45- This function merges new resource attributes with the existing ones in the
46- provider, allowing dynamic configuration of telemetry metadata.
47-
48- Args:
49- provider: The TracerProvider instance to update
50- resource_attributes: Dictionary of attributes to merge with existing resources
51- """
52- provider ._resource = provider ._resource .merge (Resource .create (resource_attributes ))
53-
54-
5539class OpentelemetryTracer (BaseModel , BaseTracer ):
5640 """OpenTelemetry-based tracer implementation for comprehensive agent observability.
5741
@@ -152,41 +136,27 @@ def _init_global_tracer_provider(self) -> None:
152136 duplicate exporter detection and in-memory span collection setup.
153137 """
154138 # set provider anyway, then get global provider
139+ # set if not exist
155140 trace_api .set_tracer_provider (
156141 trace_sdk .TracerProvider (
157142 span_limits = SpanLimits (
158143 max_attributes = 4096 ,
159144 )
160145 )
161146 )
162- global_tracer_provider : TracerProvider = trace_api .get_tracer_provider () # type: ignore
163-
164- span_processors = global_tracer_provider ._active_span_processor ._span_processors
165- have_apmplus_exporter = any (
166- isinstance (p , (BatchSpanProcessor , SimpleSpanProcessor ))
167- and hasattr (p .span_exporter , "_endpoint" )
168- and "apmplus" in p .span_exporter ._endpoint
169- for p in span_processors
170- )
171147
172- if have_apmplus_exporter :
173- self .exporters = [
174- e for e in self .exporters if not isinstance (e , APMPlusExporter )
175- ]
148+ # add in-memory exporter to exporters list
149+ self ._inmemory_exporter = InMemoryExporter ()
150+ self .exporters .append (self ._inmemory_exporter )
176151
152+ # Call each exporter's register method to register with the global tracer provider
153+ # This allows each exporter to handle its own configuration and registration logic
177154 for exporter in self .exporters :
178- processor = exporter .processor
179- resource_attributes = exporter .resource_attributes
180-
181- if resource_attributes :
182- _update_resource_attributions (
183- global_tracer_provider , resource_attributes
184- )
185-
186- if processor :
187- global_tracer_provider .add_span_processor (processor )
188- self ._processors .append (processor )
189-
155+ exporter .register ()
156+
157+ # Add processor to internal list if exists
158+ if exporter .processor :
159+ self ._processors .append (exporter .processor )
190160 logger .debug (
191161 f"Add span processor for exporter `{ exporter .__class__ .__name__ } ` to OpentelemetryTracer."
192162 )
@@ -195,21 +165,6 @@ def _init_global_tracer_provider(self) -> None:
195165 f"Add span processor for exporter `{ exporter .__class__ .__name__ } ` to OpentelemetryTracer failed."
196166 )
197167
198- self ._inmemory_exporter = InMemoryExporter ()
199- if self ._inmemory_exporter .processor :
200- # make sure the in memory exporter processor is added at index 0
201- # because we use this to record all spans
202- global_tracer_provider ._active_span_processor ._span_processors = (
203- self ._inmemory_exporter .processor ,
204- ) + global_tracer_provider ._active_span_processor ._span_processors
205-
206- self ._processors .append (self ._inmemory_exporter .processor )
207- self .exporters .append (self ._inmemory_exporter )
208- else :
209- logger .warning (
210- "InMemoryExporter processor is not initialized, cannot add to OpentelemetryTracer."
211- )
212-
213168 logger .info (
214169 f"Init OpentelemetryTracer with { len (self ._processors )} exporter(s)."
215170 )
0 commit comments