Skip to content

Commit 211d2d0

Browse files
author
EGOROV Vadim
committed
fix_opentelemetry_span_names
1 parent 609c420 commit 211d2d0

1 file changed

Lines changed: 31 additions & 26 deletions

File tree

microbootstrap/bootstrappers/litestar.py

Lines changed: 31 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,16 @@
22
import typing
33

44
import litestar
5-
import litestar.exceptions
6-
import litestar.types
75
import typing_extensions
86
from litestar import openapi
97
from litestar.config.cors import CORSConfig as LitestarCorsConfig
108
from litestar.contrib.opentelemetry.config import (
119
OpenTelemetryConfig as LitestarOpentelemetryConfig,
1210
)
13-
from litestar.contrib.opentelemetry.middleware import (
14-
OpenTelemetryInstrumentationMiddleware,
15-
)
1611
from litestar.contrib.prometheus import PrometheusConfig, PrometheusController
12+
from litestar.middleware import ASGIMiddleware
1713
from litestar.openapi.plugins import SwaggerRenderPlugin
14+
from litestar.types.asgi_types import ASGIApp, Scope
1815
from litestar_offline_docs import generate_static_files_config
1916
from opentelemetry.instrumentation.asgi import OpenTelemetryMiddleware
2017
from opentelemetry.util.http import get_excluded_urls
@@ -43,6 +40,7 @@
4340
if typing.TYPE_CHECKING:
4441
from litestar.contrib.opentelemetry import OpenTelemetryConfig
4542
from litestar.types import ASGIApp, Scope
43+
from litestar.types.asgi_types import Receive, Send
4644

4745

4846
class LitestarBootstrapper(
@@ -155,34 +153,41 @@ def build_litestar_route_details_from_scope(
155153
return method, {}
156154

157155

158-
class LitestarOpenTelemetryInstrumentationMiddleware(OpenTelemetryInstrumentationMiddleware):
159-
def __init__(self, app: ASGIApp, config: OpenTelemetryConfig) -> None:
160-
super().__init__(
161-
app=app,
162-
config=config,
163-
)
164-
self.open_telemetry_middleware = OpenTelemetryMiddleware(
165-
app=app,
166-
client_request_hook=config.client_request_hook_handler, # type: ignore[arg-type]
167-
client_response_hook=config.client_response_hook_handler, # type: ignore[arg-type]
168-
default_span_details=build_litestar_route_details_from_scope,
169-
excluded_urls=get_excluded_urls(config.exclude_urls_env_key),
170-
meter=config.meter,
171-
meter_provider=config.meter_provider,
172-
server_request_hook=config.server_request_hook_handler,
173-
tracer_provider=config.tracer_provider,
174-
)
156+
class LitestarOpenTelemetryInstrumentationMiddleware(ASGIMiddleware):
157+
def __init__(self, config: OpenTelemetryConfig) -> None:
158+
self.config = config
159+
self.open_telemetry_middleware = None
160+
161+
def create_open_telemetry_middleware(self, app: ASGIApp) -> OpenTelemetryMiddleware:
162+
if not self.open_telemetry_middleware:
163+
self.open_telemetry_middleware = OpenTelemetryMiddleware(
164+
app=app,
165+
client_request_hook=self.config.client_request_hook_handler, # type: ignore[arg-type]
166+
client_response_hook=self.config.client_response_hook_handler, # type: ignore[arg-type]
167+
default_span_details=build_litestar_route_details_from_scope,
168+
excluded_urls=get_excluded_urls(self.config.exclude_urls_env_key),
169+
meter=self.config.meter,
170+
meter_provider=self.config.meter_provider,
171+
server_request_hook=self.config.server_request_hook_handler,
172+
tracer_provider=self.config.tracer_provider,
173+
)
174+
return self.open_telemetry_middleware
175+
176+
async def handle(self, scope: Scope, receive: Receive, send: Send, next_app: ASGIApp) -> None:
177+
await self.create_open_telemetry_middleware(next_app)(scope, receive, send)
175178

176179

177180
@LitestarBootstrapper.use_instrument()
178181
class LitestarOpentelemetryInstrument(OpentelemetryInstrument):
179182
def bootstrap_before(self) -> dict[str, typing.Any]:
180183
return {
181184
"middleware": [
182-
LitestarOpentelemetryConfig(
183-
tracer_provider=self.tracer_provider,
184-
middleware_class=LitestarOpenTelemetryInstrumentationMiddleware,
185-
).middleware,
185+
LitestarOpenTelemetryInstrumentationMiddleware(
186+
LitestarOpentelemetryConfig(
187+
tracer_provider=self.tracer_provider,
188+
middleware_class=LitestarOpenTelemetryInstrumentationMiddleware,
189+
)
190+
)
186191
]
187192
}
188193

0 commit comments

Comments
 (0)