def process_response(self, request, response): try: if hasattr(response, 'status_code'): # check if _elasticapm_transaction_name is set if hasattr(request, '_elasticapm_transaction_name'): transaction_name = request._elasticapm_transaction_name elif getattr(request, '_elasticapm_view_func', False): transaction_name = get_name_from_func( request._elasticapm_view_func) else: transaction_name = '' status_code = response.status_code transaction_name = build_name_with_http_method_prefix( transaction_name, request) transaction_data = self.client.get_data_from_request(request) self.client.set_transaction_extra_data(transaction_data, 'request') user_data = self.client.get_user_info(request) if user_data: self.client.set_transaction_extra_data(user_data, 'user') self.client.end_transaction(transaction_name, status_code) except Exception: self.client.error_logger.error( 'Exception during timing of request', exc_info=True, ) return response
def process_response(self, request, response): if django_settings.DEBUG and not self.client.config.debug: return response try: if hasattr(response, "status_code"): if getattr(request, "_elasticapm_view_func", False): transaction_name = get_name_from_func( request._elasticapm_view_func) transaction_name = build_name_with_http_method_prefix( transaction_name, request) elasticapm.set_transaction_name(transaction_name, override=False) elasticapm.set_context( lambda: self.client.get_data_from_request( request, capture_body=self.client.config.capture_body in ("all", "transactions")), "request", ) elasticapm.set_context( lambda: self.client.get_data_from_response(response), "response") elasticapm.set_context( lambda: self.client.get_user_info(request), "user") elasticapm.set_transaction_result("HTTP {}xx".format( response.status_code // 100), override=False) except Exception: self.client.error_logger.error( "Exception during timing of request", exc_info=True) return response
def request_finished(self, app, response): if not self.app.debug or self.client.config.debug: rule = request.url_rule.rule if request.url_rule is not None else "" rule = build_name_with_http_method_prefix(rule, request) elasticapm.set_context( lambda: get_data_from_request( request, capture_body=self.client.config.capture_body in ("transactions", "all"), capture_headers=self.client.config.capture_headers, ), "request", ) elasticapm.set_context( lambda: get_data_from_response(response, capture_headers=self.client. config.capture_headers), "response") if response.status_code: result = "HTTP {}xx".format(response.status_code // 100) else: result = response.status elasticapm.set_transaction_name(rule, override=False) elasticapm.set_transaction_result(result, override=False) # Instead of calling end_transaction here, we defer the call until the response is closed. # This ensures that we capture things that happen until the WSGI server closes the response. response.call_on_close(self.client.end_transaction)
def process_response(self, request, response): if django_settings.DEBUG and not self.client.config.debug: return response try: if hasattr(response, "status_code"): transaction_name = None if self.client.config.django_transaction_name_from_route and hasattr(request.resolver_match, "route"): transaction_name = request.resolver_match.route elif getattr(request, "_elasticapm_view_func", False): transaction_name = get_name_from_func(request._elasticapm_view_func) if transaction_name: transaction_name = build_name_with_http_method_prefix(transaction_name, request) elasticapm.set_transaction_name(transaction_name, override=False) elasticapm.set_context( lambda: self.client.get_data_from_request(request, constants.TRANSACTION), "request" ) elasticapm.set_context( lambda: self.client.get_data_from_response(response, constants.TRANSACTION), "response" ) elasticapm.set_context(lambda: self.client.get_user_info(request), "user") elasticapm.set_transaction_result("HTTP {}xx".format(response.status_code // 100), override=False) elasticapm.set_transaction_outcome(http_status_code=response.status_code, override=False) except Exception: self.client.error_logger.error("Exception during timing of request", exc_info=True) return response
def process_response(self, request, response): if django_settings.DEBUG and not self.client.config.debug: return response try: if hasattr(response, 'status_code'): if getattr(request, '_elasticapm_view_func', False): transaction_name = get_name_from_func( request._elasticapm_view_func ) transaction_name = build_name_with_http_method_prefix( transaction_name, request ) elasticapm.set_transaction_name(transaction_name, override=False) elasticapm.set_context(lambda: self.client.get_data_from_request( request, capture_body=self.client.config.capture_body in ('all', 'transactions') ), 'request') elasticapm.set_context(lambda: self.client.get_data_from_response(response), 'response') elasticapm.set_context(lambda: self.client.get_user_info(request), 'user') elasticapm.set_transaction_result('HTTP {}xx'.format(response.status_code // 100), override=False) except Exception: self.client.error_logger.error( 'Exception during timing of request', exc_info=True, ) return response
def process_request_wrapper(wrapped, instance, args, kwargs): response = wrapped(*args, **kwargs) try: if response is not None: request = args[0] elasticapm.set_transaction_name( build_name_with_http_method_prefix( get_name_from_middleware(wrapped, instance), request)) finally: return response
def request_started(self, app): if (not self.app.debug or self.client.config.debug) and not self.client.should_ignore_url(request.path): trace_parent = TraceParent.from_headers(request.headers) self.client.begin_transaction("request", trace_parent=trace_parent) elasticapm.set_context( lambda: get_data_from_request(request, self.client.config, constants.TRANSACTION), "request" ) rule = request.url_rule.rule if request.url_rule is not None else "" rule = build_name_with_http_method_prefix(rule, request) elasticapm.set_transaction_name(rule, override=False)
def request_finished(self, app, response): rule = request.url_rule.rule if request.url_rule is not None else "" rule = build_name_with_http_method_prefix(rule, request) request_data = get_data_from_request(request) response_data = get_data_from_response(response) elasticapm.set_transaction_data(request_data, 'request') elasticapm.set_transaction_data(response_data, 'response') if response.status_code: result = 'HTTP {}xx'.format(response.status_code // 100) else: result = response.status self.client.end_transaction(rule, result)
def process_response_wrapper(wrapped, instance, args, kwargs): response = wrapped(*args, **kwargs) try: request, original_response = args # if there's no view_func on the request, and this middleware created # a new response object, it's logged as the responsible transaction # name if not hasattr(request, "_elasticapm_view_func") and response is not original_response: elasticapm.set_transaction_name( build_name_with_http_method_prefix(get_name_from_middleware(wrapped, instance), request) ) finally: return response
def request_finished(self, app, response): rule = request.url_rule.rule if request.url_rule is not None else "" rule = build_name_with_http_method_prefix(rule, request) request_data = lambda: get_data_from_request(request, capture_body=self.client. config.capture_body in ('transactions', 'all')) response_data = lambda: get_data_from_response(response) elasticapm.set_context(request_data, 'request') elasticapm.set_context(response_data, 'response') if response.status_code: result = 'HTTP {}xx'.format(response.status_code // 100) else: result = response.status self.client.end_transaction(rule, result)
def get_transaction_name(self, request: HttpRequest, view_func: Optional[FunctionType] = None) -> str: transaction_name = "" if self.client.config.django_transaction_name_from_route and hasattr( request.resolver_match, "route"): r = request.resolver_match # if no route is defined (e.g. for the root URL), fall back on url_name and then function name transaction_name = r.route or r.url_name or get_name_from_func( r.func) elif view_func: transaction_name = get_name_from_func(view_func) if transaction_name: transaction_name = build_name_with_http_method_prefix( transaction_name, request) return transaction_name
def request_started(self, app): if not self.app.debug or self.client.config.debug: trace_parent = TraceParent.from_headers(request.headers) self.client.begin_transaction("request", trace_parent=trace_parent) elasticapm.set_context( lambda: get_data_from_request( request, capture_body=self.client.config.capture_body in ("transactions", "all"), capture_headers=self.client.config.capture_headers, ), "request", ) rule = request.url_rule.rule if request.url_rule is not None else "" rule = build_name_with_http_method_prefix(rule, request) elasticapm.set_transaction_name(rule, override=False)
def process_response(self, request, response): try: if hasattr(response, 'status_code'): # check if _elasticapm_transaction_name is set if hasattr(request, '_elasticapm_transaction_name'): transaction_name = request._elasticapm_transaction_name elif getattr(request, '_elasticapm_view_func', False): transaction_name = get_name_from_func( request._elasticapm_view_func) else: transaction_name = '' status_code = response.status_code transaction_name = build_name_with_http_method_prefix( transaction_name, request) request_data = lambda: self.client.get_data_from_request( request, capture_body=self.client.config.capture_body in ('all', 'transactions')) response_data = lambda: self.client.get_data_from_response( response) elasticapm.set_context(request_data, 'request') elasticapm.set_context(response_data, 'response') user_data = lambda: self.client.get_user_info(request) if user_data: elasticapm.set_context(user_data, 'user') self.client.end_transaction( transaction_name, 'HTTP {}xx'.format(status_code // 100)) except Exception: self.client.error_logger.error( 'Exception during timing of request', exc_info=True, ) return response
def request_finished(self, app, response): rule = request.url_rule.rule if request.url_rule is not None else "" rule = build_name_with_http_method_prefix(rule, request) self.client.end_transaction(rule, response.status_code)