def process_request(self, request): # request.META is a dictionary containing all available HTTP headers # Read more about request.META here: # https://docs.djangoproject.com/en/3.0/ref/request-response/#django.http.HttpRequest.META if self._excluded_urls.url_disabled(request.build_absolute_uri("?")): return environ = request.META token = attach(extract(get_header_from_environ, environ)) tracer = get_tracer(__name__, __version__) span = tracer.start_span( self._get_span_name(request), kind=SpanKind.SERVER, start_time=environ.get( "opentelemetry-instrumentor-django.starttime_key"), ) if span.is_recording(): attributes = collect_request_attributes(environ) attributes = extract_attributes_from_object( request, self._traced_request_attrs, attributes) for key, value in attributes.items(): span.set_attribute(key, value) activation = tracer.use_span(span, end_on_exit=True) activation.__enter__() request.META[self._environ_activation_key] = activation request.META[self._environ_span_key] = span request.META[self._environ_token] = token
def process_request(self, req, resp): span = req.env.get(_ENVIRON_SPAN_KEY) if not span or not span.is_recording(): return attributes = extract_attributes_from_object(req, self._traced_request_attrs) for key, value in attributes.items(): span.set_attribute(key, value)
def _get_attributes_from_request(request): attrs = { "component": "tornado", "http.method": request.method, "http.scheme": request.protocol, "http.host": request.host, "http.target": request.path, } if request.host: attrs["http.host"] = request.host if request.remote_ip: attrs["net.peer.ip"] = request.remote_ip return extract_attributes_from_object(request, _traced_attrs, attrs)
def _get_attributes_from_request(request): attrs = { SpanAttributes.HTTP_METHOD: request.method, SpanAttributes.HTTP_SCHEME: request.protocol, SpanAttributes.HTTP_HOST: request.host, SpanAttributes.HTTP_TARGET: request.path, } if request.host: attrs[SpanAttributes.HTTP_HOST] = request.host if request.remote_ip: attrs[SpanAttributes.NET_PEER_IP] = request.remote_ip return extract_attributes_from_object(request, _traced_request_attrs, attrs)
def process_request(self, request): # request.META is a dictionary containing all available HTTP headers # Read more about request.META here: # https://docs.djangoproject.com/en/3.0/ref/request-response/#django.http.HttpRequest.META if self._excluded_urls.url_disabled(request.build_absolute_uri("?")): return # pylint:disable=W0212 request._otel_start_time = time() request_meta = request.META token = attach(extract(request_meta, getter=wsgi_getter)) span = self._tracer.start_span( self._get_span_name(request), kind=SpanKind.SERVER, start_time=request_meta.get( "opentelemetry-instrumentor-django.starttime_key" ), ) attributes = collect_request_attributes(request_meta) if span.is_recording(): attributes = extract_attributes_from_object( request, self._traced_request_attrs, attributes ) for key, value in attributes.items(): span.set_attribute(key, value) activation = use_span(span, end_on_exit=True) activation.__enter__() # pylint: disable=E1101 request.META[self._environ_activation_key] = activation request.META[self._environ_span_key] = span request.META[self._environ_token] = token if _DjangoMiddleware._otel_request_hook: _DjangoMiddleware._otel_request_hook( # pylint: disable=not-callable span, request )
def _get_attributes_from_request(request): attrs = { SpanAttributes.HTTP_METHOD: request.method, SpanAttributes.HTTP_SCHEME: request.protocol, SpanAttributes.HTTP_HOST: request.host, SpanAttributes.HTTP_TARGET: request.path, } if request.remote_ip: # NET_PEER_IP is the address of the network peer # HTTP_CLIENT_IP is the address of the client, which might be different # if Tornado is set to trust X-Forwarded-For headers (xheaders=True) attrs[SpanAttributes.HTTP_CLIENT_IP] = request.remote_ip if hasattr(request.connection, "context") and getattr( request.connection.context, "_orig_remote_ip", None): attrs[SpanAttributes. NET_PEER_IP] = request.connection.context._orig_remote_ip return extract_attributes_from_object(request, _traced_request_attrs, attrs)
def process_request(self, request): # request.META is a dictionary containing all available HTTP headers # Read more about request.META here: # https://docs.djangoproject.com/en/3.0/ref/request-response/#django.http.HttpRequest.META if self._excluded_urls.url_disabled(request.build_absolute_uri("?")): return is_asgi_request = _is_asgi_request(request) if not _is_asgi_supported and is_asgi_request: return # pylint:disable=W0212 request._otel_start_time = time() request_meta = request.META if is_asgi_request: carrier = request.scope carrier_getter = asgi_getter collect_request_attributes = asgi_collect_request_attributes else: carrier = request_meta carrier_getter = wsgi_getter collect_request_attributes = wsgi_collect_request_attributes token = context = None span_kind = SpanKind.INTERNAL if get_current_span() is INVALID_SPAN: context = extract(carrier, getter=carrier_getter) token = attach(context) span_kind = SpanKind.SERVER span = self._tracer.start_span( self._get_span_name(request), context, kind=span_kind, start_time=request_meta.get( "opentelemetry-instrumentor-django.starttime_key" ), ) attributes = collect_request_attributes(carrier) if span.is_recording(): attributes = extract_attributes_from_object( request, self._traced_request_attrs, attributes ) if is_asgi_request: # ASGI requests include extra attributes in request.scope.headers. attributes = extract_attributes_from_object( types.SimpleNamespace( **{ name.decode("latin1"): value.decode("latin1") for name, value in request.scope.get("headers", []) } ), self._traced_request_attrs, attributes, ) for key, value in attributes.items(): span.set_attribute(key, value) activation = use_span(span, end_on_exit=True) activation.__enter__() # pylint: disable=E1101 request.META[self._environ_activation_key] = activation request.META[self._environ_span_key] = span if token: request.META[self._environ_token] = token if _DjangoMiddleware._otel_request_hook: _DjangoMiddleware._otel_request_hook( # pylint: disable=not-callable span, request )
def process_request(self, request): # request.META is a dictionary containing all available HTTP headers # Read more about request.META here: # https://docs.djangoproject.com/en/3.0/ref/request-response/#django.http.HttpRequest.META if self._excluded_urls.url_disabled(request.build_absolute_uri("?")): return is_asgi_request = _is_asgi_request(request) if not _is_asgi_supported and is_asgi_request: return # pylint:disable=W0212 request._otel_start_time = time() request_meta = request.META if is_asgi_request: carrier = request.scope carrier_getter = asgi_getter collect_request_attributes = asgi_collect_request_attributes else: carrier = request_meta carrier_getter = wsgi_getter collect_request_attributes = wsgi_collect_request_attributes span, token = _start_internal_or_server_span( tracer=self._tracer, span_name=self._get_span_name(request), start_time=request_meta.get( "opentelemetry-instrumentor-django.starttime_key" ), context_carrier=carrier, context_getter=carrier_getter, ) attributes = collect_request_attributes(carrier) active_requests_count_attrs = _parse_active_request_count_attrs( attributes ) duration_attrs = _parse_duration_attrs(attributes) request.META[ self._environ_active_request_attr_key ] = active_requests_count_attrs request.META[self._environ_duration_attr_key] = duration_attrs self._active_request_counter.add(1, active_requests_count_attrs) if span.is_recording(): attributes = extract_attributes_from_object( request, self._traced_request_attrs, attributes ) if is_asgi_request: # ASGI requests include extra attributes in request.scope.headers. attributes = extract_attributes_from_object( types.SimpleNamespace( **{ name.decode("latin1"): value.decode("latin1") for name, value in request.scope.get("headers", []) } ), self._traced_request_attrs, attributes, ) if span.is_recording() and span.kind == SpanKind.SERVER: attributes.update( asgi_collect_custom_request_attributes(carrier) ) else: if span.is_recording() and span.kind == SpanKind.SERVER: custom_attributes = ( wsgi_collect_custom_request_headers_attributes(carrier) ) if len(custom_attributes) > 0: span.set_attributes(custom_attributes) for key, value in attributes.items(): span.set_attribute(key, value) activation = use_span(span, end_on_exit=True) activation.__enter__() # pylint: disable=E1101 request_start_time = default_timer() request.META[self._environ_timer_key] = request_start_time request.META[self._environ_activation_key] = activation request.META[self._environ_span_key] = span if token: request.META[self._environ_token] = token if _DjangoMiddleware._otel_request_hook: _DjangoMiddleware._otel_request_hook( # pylint: disable=not-callable span, request )