def handle_exception(self, *args, **kwargs):
        if not self.client:
            return

        if self.app.debug and not self.client.config.debug:
            return

        self.client.capture_exception(
            exc_info=kwargs.get("exc_info"),
            context={
                "request":
                get_data_from_request(
                    request,
                    capture_body=self.client.config.capture_body
                    in ("errors", "all"),
                    capture_headers=self.client.config.capture_headers,
                )
            },
            custom={"app": self.app},
            handled=False,
        )
        # End the transaction here, as `request_finished` won't be called when an
        # unhandled exception occurs.
        #
        # Unfortunately, that also means that we can't capture any response data,
        # as the response isn't ready at this point in time.
        self.client.end_transaction(result="HTTP 5xx")
Exemple #2
0
 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)
Exemple #3
0
 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)
Exemple #4
0
 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)
Exemple #5
0
    def handle_exception(self, *args, **kwargs):
        if not self.client:
            return

        if self.app.debug and not self.client.config.debug:
            return

        self.client.capture_exception(
            exc_info=kwargs.get('exc_info'),
            context={'request': get_data_from_request(request)},
            custom={
                'app': self.app,
            },
            handled=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 = 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 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)
Exemple #8
0
    def handle_exception(self, *args, **kwargs):
        if not self.client:
            return

        if self.app.debug and not self.client.config.debug:
            return

        self.client.capture_exception(
            exc_info=kwargs.get("exc_info"),
            context={
                "request": get_data_from_request(
                    request, capture_body=self.client.config.capture_body in ("errors", "all")
                )
            },
            custom={"app": self.app},
            handled=False,
        )
    def handle_exception(self, *args, **kwargs):
        if not self.client:
            return

        if disabled_due_to_debug(self.app.config.get('ELASTIC_APM', {}),
                                 self.app.config.get('DEBUG', False)):
            return

        self.client.capture(
            'Exception',
            exc_info=kwargs.get('exc_info'),
            data={'context': {
                'request': get_data_from_request(request)
            }},
            extra={
                'app': self.app,
            },
        )