def process_response(self, req, resp, resource, req_succeeded=None): if self.client and req.user_agent != 'mcod-heartbeat': rule = route_to_name(req.uri_template, prefix='api', method=req.method) elasticapm.set_context( lambda: get_data_from_request( req, 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( resp, capture_headers=self.client.config.capture_headers), "response") result = resp.status elasticapm.set_transaction_name(rule, override=False) if hasattr(req, 'user') and req.user.is_authenticated: elasticapm.set_user_context(email=req.user.email, user_id=req.user.id) 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. self.client.end_transaction(rule, result)
def apm(request): if request.resolver_match and hasattr(request.resolver_match, 'route'): route = request.resolver_match.route else: route = request.path return { 'admin_amp_transaction_name': route_to_name(route, prefix='admin', method=request.method) }
def process_response(self, request, response): if django_settings.DEBUG and not self.client.config.debug: return response if request.META.get('HTTP_USER_AGENT') == 'mcod-heartbeat': return response try: if hasattr(response, "status_code"): try: route = request.resolver_match.route except AttributeError: route = request.path transaction_name = route_to_name(route, prefix='admin', method=request.method) if transaction_name: 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