|
2 | 2 | import typing |
3 | 3 |
|
4 | 4 | import litestar |
5 | | -import litestar.exceptions |
6 | | -import litestar.types |
7 | 5 | import typing_extensions |
8 | 6 | from litestar import openapi |
9 | 7 | from litestar.config.cors import CORSConfig as LitestarCorsConfig |
10 | 8 | from litestar.contrib.opentelemetry.config import ( |
11 | 9 | OpenTelemetryConfig as LitestarOpentelemetryConfig, |
12 | 10 | ) |
13 | | -from litestar.contrib.opentelemetry.middleware import ( |
14 | | - OpenTelemetryInstrumentationMiddleware, |
15 | | -) |
16 | 11 | from litestar.contrib.prometheus import PrometheusConfig, PrometheusController |
| 12 | +from litestar.middleware import ASGIMiddleware |
17 | 13 | from litestar.openapi.plugins import SwaggerRenderPlugin |
| 14 | +from litestar.types.asgi_types import ASGIApp, Scope |
18 | 15 | from litestar_offline_docs import generate_static_files_config |
19 | 16 | from opentelemetry.instrumentation.asgi import OpenTelemetryMiddleware |
20 | 17 | from opentelemetry.util.http import get_excluded_urls |
|
43 | 40 | if typing.TYPE_CHECKING: |
44 | 41 | from litestar.contrib.opentelemetry import OpenTelemetryConfig |
45 | 42 | from litestar.types import ASGIApp, Scope |
| 43 | + from litestar.types.asgi_types import Receive, Send |
46 | 44 |
|
47 | 45 |
|
48 | 46 | class LitestarBootstrapper( |
@@ -155,34 +153,38 @@ def build_litestar_route_details_from_scope( |
155 | 153 | return method, {} |
156 | 154 |
|
157 | 155 |
|
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( |
| 156 | +class LitestarOpenTelemetryInstrumentationMiddleware(ASGIMiddleware): |
| 157 | + def __init__(self, config: OpenTelemetryConfig) -> None: |
| 158 | + self.config = config |
| 159 | + |
| 160 | + def create_open_telemetry_middleware(self, app: ASGIApp) -> OpenTelemetryMiddleware: |
| 161 | + return OpenTelemetryMiddleware( |
165 | 162 | 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] |
| 163 | + client_request_hook=self.config.client_request_hook_handler, # type: ignore[arg-type] |
| 164 | + client_response_hook=self.config.client_response_hook_handler, # type: ignore[arg-type] |
168 | 165 | 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, |
| 166 | + excluded_urls=get_excluded_urls(self.config.exclude_urls_env_key), |
| 167 | + meter=self.config.meter, |
| 168 | + meter_provider=self.config.meter_provider, |
| 169 | + server_request_hook=self.config.server_request_hook_handler, |
| 170 | + tracer_provider=self.config.tracer_provider, |
174 | 171 | ) |
175 | 172 |
|
| 173 | + async def handle(self, scope: Scope, receive: Receive, send: Send, next_app: ASGIApp) -> None: |
| 174 | + await self.create_open_telemetry_middleware(next_app)(scope, receive, send) # type: ignore[arg-type] |
| 175 | + |
176 | 176 |
|
177 | 177 | @LitestarBootstrapper.use_instrument() |
178 | 178 | class LitestarOpentelemetryInstrument(OpentelemetryInstrument): |
179 | 179 | def bootstrap_before(self) -> dict[str, typing.Any]: |
180 | 180 | return { |
181 | 181 | "middleware": [ |
182 | | - LitestarOpentelemetryConfig( |
183 | | - tracer_provider=self.tracer_provider, |
184 | | - middleware_class=LitestarOpenTelemetryInstrumentationMiddleware, |
185 | | - ).middleware, |
| 182 | + LitestarOpenTelemetryInstrumentationMiddleware( |
| 183 | + LitestarOpentelemetryConfig( |
| 184 | + tracer_provider=self.tracer_provider, |
| 185 | + middleware_class=LitestarOpenTelemetryInstrumentationMiddleware, # type: ignore[arg-type] |
| 186 | + ) |
| 187 | + ) |
186 | 188 | ] |
187 | 189 | } |
188 | 190 |
|
|
0 commit comments