def decorator(*args, **keywords): try: route = args[2] if args[2] else None context.push_tag('web.route', route) context.push_tag('web.method', args[1]) telemetry.count('web.requests') Timing.push_timer() # call the request function response = f(*args, **keywords) if response.status: telemetry.count('web.status.%sxx' % response.status[0:1]) return response except Exception as e: telemetry.count('web.errors') raise e finally: try: elapsed, net_elapsed = Timing.pop_timer() telemetry.record('web.response.latency', elapsed) telemetry.record('app.response.latency', net_elapsed) try: context.pop_tag() context.pop_tag() except: logger.exception('Problem popping contexts') except: logger.exception('Teardown handler failed') raise
def process_response(self, request, response): elapsed, net_elapsed = Timing.pop_timer() if self.is_active: telemetry.record("web.response.latency", elapsed) telemetry.record("app.response.latency", net_elapsed) telemetry.count("web.status.%ixx" % floor(response.status_code / 100)) try: context.pop_tag() except IndexError: logger.exception("process_response cannot pop context") context.pop_state(STATE_NAME) self.is_active = False else: logger.warn("process_response without request") return response
def decorator(*args, **keywords): try: from flask import request route = request.url_rule.rule if request.url_rule else None context.push_tag('web.route', route) context.push_tag('web.method', request.method) telemetry.count('web.requests') Timing.push_timer() return f(*args, **keywords) finally: elapsed, net_elapsed = Timing.pop_timer() telemetry.record('web.response.latency', elapsed) telemetry.record('app.response.latency', net_elapsed) context.pop_tag() context.pop_tag()
def pop_tag(): """ Pops the context entry from the top of the stack and returns it. Example context.push('route', '/v1/foo') context.push('user-operation', 'create-foo') # context is [('route', '/v1/foo'),('user-operation', 'create-foo')] e = context.pop() # e is ('user-operation', 'create-foo') e = context.pop() # e is ('route', '/v1/foo') :return: the entry on the top of the stack """ return context.pop_tag()