Skip to content

Commit 762b798

Browse files
committed
Add lazy init of meters
1 parent f98f568 commit 762b798

File tree

2 files changed

+27
-0
lines changed
  • instrumentation/opentelemetry-instrumentation-botocore/src/opentelemetry/instrumentation/botocore

2 files changed

+27
-0
lines changed

instrumentation/opentelemetry-instrumentation-botocore/src/opentelemetry/instrumentation/botocore/__init__.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,7 @@ def response_hook(span, service_name, operation_name, result):
104104
suppress_http_instrumentation,
105105
unwrap,
106106
)
107+
from opentelemetry.metrics import get_meter
107108
from opentelemetry.propagators.aws.aws_xray_propagator import AwsXRayPropagator
108109
from opentelemetry.semconv.trace import SpanAttributes
109110
from opentelemetry.trace import get_tracer
@@ -134,6 +135,8 @@ def _instrument(self, **kwargs):
134135
self._tracers = {}
135136
# event_loggers are lazy initialized per-extension in _get_event_logger
136137
self._event_loggers = {}
138+
# meters are lazy initialized per-extension in _get_meter
139+
self._meters = {}
137140

138141
self.request_hook = kwargs.get("request_hook")
139142
self.response_hook = kwargs.get("response_hook")
@@ -144,6 +147,7 @@ def _instrument(self, **kwargs):
144147

145148
self.tracer_provider = kwargs.get("tracer_provider")
146149
self.event_logger_provider = kwargs.get("event_logger_provider")
150+
self.meter_provider = kwargs.get("meter_provider")
147151

148152
wrap_function_wrapper(
149153
"botocore.client",
@@ -201,6 +205,24 @@ def _get_event_logger(self, extension: _AwsSdkExtension):
201205

202206
return self._event_loggers[instrumentation_name]
203207

208+
def _get_meter(self, extension: _AwsSdkExtension):
209+
"""This is a multiplexer in order to have an event logger per extension"""
210+
211+
instrumentation_name = self._get_instrumentation_name(extension)
212+
meter = self._meters.get(instrumentation_name)
213+
if meter:
214+
return meter
215+
216+
schema_version = extension.meter_schema_version()
217+
self._meters[instrumentation_name] = get_meter(
218+
instrumentation_name,
219+
"",
220+
schema_url=f"https://opentelemetry.io/schemas/{schema_version}",
221+
meter_provider=self.meter_provider,
222+
)
223+
224+
return self._meters[instrumentation_name]
225+
204226
def _uninstrument(self, **kwargs):
205227
unwrap(BaseClient, "_make_api_call")
206228
unwrap(Endpoint, "prepare_request")

instrumentation/opentelemetry-instrumentation-botocore/src/opentelemetry/instrumentation/botocore/extensions/types.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,11 @@ def event_logger_schema_version() -> str:
109109
"""Returns the event logger OTel schema version the extension is following"""
110110
return "1.30.0"
111111

112+
@staticmethod
113+
def metrics_schema_version() -> str:
114+
"""Returns the metrics OTel schema version the extension is following"""
115+
return "1.30.0"
116+
112117
def should_trace_service_call(self) -> bool: # pylint:disable=no-self-use
113118
"""Returns if the AWS SDK service call should be traced or not
114119

0 commit comments

Comments
 (0)