コード例 #1
0
    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
コード例 #2
0
    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
コード例 #3
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)
コード例 #4
0
ファイル: __init__.py プロジェクト: stj/apm-agent-python
    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
コード例 #5
0
    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
コード例 #6
0
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
コード例 #7
0
ファイル: __init__.py プロジェクト: imfht/flaskapps
 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)
コード例 #8
0
ファイル: __init__.py プロジェクト: pdan93/apm-agent-python
 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)
コード例 #9
0
ファイル: __init__.py プロジェクト: stj/apm-agent-python
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
コード例 #10
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 = 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)
コード例 #11
0
ファイル: __init__.py プロジェクト: elastic/apm-agent-python
 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
コード例 #12
0
 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)
コード例 #13
0
    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
コード例 #14
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)

        self.client.end_transaction(rule, response.status_code)