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)
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
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 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_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 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)
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
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)
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
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 test_get_name_from_func(): def x(): pass assert "tests.utils.tests.x" == get_name_from_func(x)
def test_get_name_from_func_lambda(): assert "tests.utils.tests.<lambda>" == get_name_from_func(lambda x: "x")
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)
def end_transaction(task_id, task, *args, **kwargs): name = get_name_from_func(task) client.end_transaction(name, 200)
def wrapper(*args, **kwargs): with elasticapm.capture_span(get_name_from_func(func)): return func(*args, **kwargs)
def end_transaction(task_id, task, *args, **kwargs): name = get_name_from_func(task) client.end_transaction(name, kwargs.get("state", "None"))