Skip to content

Commit 16cc465

Browse files
added metrics implemetation for starlette
1 parent 32d7ff4 commit 16cc465

File tree

2 files changed

+15
-0
lines changed
  • instrumentation/opentelemetry-instrumentation-starlette/src/opentelemetry/instrumentation/starlette

2 files changed

+15
-0
lines changed

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

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,9 @@ def client_response_hook(span: Span, message: dict):
130130

131131
from opentelemetry.instrumentation.asgi import OpenTelemetryMiddleware
132132
from opentelemetry.instrumentation.asgi.package import _instruments
133+
from opentelemetry.instrumentation.starlette.version import __version__
133134
from opentelemetry.instrumentation.instrumentor import BaseInstrumentor
135+
from opentelemetry.metrics import get_meter
134136
from opentelemetry.semconv.trace import SpanAttributes
135137
from opentelemetry.trace import Span
136138
from opentelemetry.util.http import get_excluded_urls
@@ -156,9 +158,11 @@ def instrument_app(
156158
server_request_hook: _ServerRequestHookT = None,
157159
client_request_hook: _ClientRequestHookT = None,
158160
client_response_hook: _ClientResponseHookT = None,
161+
meter_provider=None,
159162
tracer_provider=None,
160163
):
161164
"""Instrument an uninstrumented Starlette application."""
165+
meter = get_meter(__name__, __version__, meter_provider)
162166
if not getattr(app, "is_instrumented_by_opentelemetry", False):
163167
app.add_middleware(
164168
OpenTelemetryMiddleware,
@@ -168,6 +172,7 @@ def instrument_app(
168172
client_request_hook=client_request_hook,
169173
client_response_hook=client_response_hook,
170174
tracer_provider=tracer_provider,
175+
meter=meter,
171176
)
172177
app.is_instrumented_by_opentelemetry = True
173178

@@ -186,6 +191,9 @@ def _instrument(self, **kwargs):
186191
_InstrumentedStarlette._client_response_hook = kwargs.get(
187192
"client_response_hook"
188193
)
194+
_InstrumentedStarlette._meter_provider = kwargs.get(
195+
"_meter_provider"
196+
)
189197
applications.Starlette = _InstrumentedStarlette
190198

191199
def _uninstrument(self, **kwargs):
@@ -194,12 +202,16 @@ def _uninstrument(self, **kwargs):
194202

195203
class _InstrumentedStarlette(applications.Starlette):
196204
_tracer_provider = None
205+
_meter_provider = None
197206
_server_request_hook: _ServerRequestHookT = None
198207
_client_request_hook: _ClientRequestHookT = None
199208
_client_response_hook: _ClientResponseHookT = None
200209

201210
def __init__(self, *args, **kwargs):
202211
super().__init__(*args, **kwargs)
212+
meter = get_meter(
213+
__name__, __version__, _InstrumentedStarlette._meter_provider
214+
)
203215
self.add_middleware(
204216
OpenTelemetryMiddleware,
205217
excluded_urls=_excluded_urls,
@@ -208,6 +220,7 @@ def __init__(self, *args, **kwargs):
208220
client_request_hook=_InstrumentedStarlette._client_request_hook,
209221
client_response_hook=_InstrumentedStarlette._client_response_hook,
210222
tracer_provider=_InstrumentedStarlette._tracer_provider,
223+
meter=meter,
211224
)
212225

213226

instrumentation/opentelemetry-instrumentation-starlette/src/opentelemetry/instrumentation/starlette/package.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,3 +14,5 @@
1414

1515

1616
_instruments = ("starlette ~= 0.13.0",)
17+
18+
_supports_metrics = True

0 commit comments

Comments
 (0)