コード例 #1
0
def test_get_name_from_func_class():
    class X(object):
        def x(self):
            pass

    assert "tests.utils.tests.x" == get_name_from_func(X.x)
    assert "tests.utils.tests.x" == get_name_from_func(X().x)
コード例 #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"):
                transaction_name = None
                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 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
コード例 #3
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
コード例 #4
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
コード例 #5
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
コード例 #6
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
コード例 #7
0
def test_get_name_from_func_partialmethod_bound():
    class X(object):
        def x(self, x):
            pass

        p = partialmethod(x, "x")

    assert "partial(tests.utils.tests.x)" == get_name_from_func(X().p)
コード例 #8
0
    def __call__(self, func):
        self.name = self.name or get_name_from_func(func)

        @functools.wraps(func)
        def decorated(*args, **kwds):
            with self:
                return func(*args, **kwds)

        return decorated
コード例 #9
0
 def end_transaction(task_id, task, *args, **kwargs):
     name = get_name_from_func(task)
     state = kwargs.get("state", "None")
     if state == states.SUCCESS:
         outcome = constants.OUTCOME.SUCCESS
     elif state in states.EXCEPTION_STATES:
         outcome = constants.OUTCOME.FAILURE
     else:
         outcome = constants.OUTCOME.UNKNOWN
     elasticapm.set_transaction_outcome(outcome, override=False)
     client.end_transaction(name, state)
コード例 #10
0
    def __call__(self, func):
        self.name = self.name or get_name_from_func(func)

        @functools.wraps(func)
        def decorated(*args, **kwds):
            if len(args) == 2:
                # Saving these for request context later
                self.event, self.context = args
            else:
                self.event, self.context = {}, {}
            if not self.client.config.debug and self.client.config.instrument and self.client.config.enabled:
                with self:
                    self.response = func(*args, **kwds)
                    return self.response
            else:
                return func(*args, **kwds)

        return decorated
コード例 #11
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
コード例 #12
0
def test_get_name_from_func():
    def x():
        pass

    assert "tests.utils.tests.x" == get_name_from_func(x)
コード例 #13
0
def test_get_name_from_func_lambda():
    assert "tests.utils.tests.<lambda>" == get_name_from_func(lambda x: "x")
コード例 #14
0
def test_get_name_from_func_partial():
    def x(x):
        pass

    p = partial(x, "x")
    assert "partial(tests.utils.tests.x)" == get_name_from_func(p)
コード例 #15
0
 def end_transaction(task_id, task, *args, **kwargs):
     name = get_name_from_func(task)
     client.end_transaction(name, 200)
コード例 #16
0
 def wrapper(*args, **kwargs):
     with elasticapm.capture_span(get_name_from_func(func)):
         return func(*args, **kwargs)
コード例 #17
0
 def end_transaction(task_id, task, *args, **kwargs):
     name = get_name_from_func(task)
     client.end_transaction(name, kwargs.get("state", "None"))