def foo(): nose.tools.eq_( len(gcm.stack), 1, "Context stack length is wrong (got {}, should be 1)".format(len(gcm.stack)) ) nose.tools.eq_(str(gcm.get_context().tracer_id), tid1, "Tracer id does not match") # Wrap execution of bar inside the second context: gcm.run_with_new_context(bar, tid2)
def bar(): nose.tools.eq_( len(gcm.stack), 2, "Context stack length is wrong (got {}, should be 2)".format(len(gcm.stack)) ) nose.tools.eq_(str(gcm.get_context().tracer_id), tid2, "Tracer id does not match") # Stop Tornado loop: self.stop()
def trace_block(msg=None): """ Traces the execution of a code block. Example: with trace_block("Creating universe"): universe = Universe(god=None) universe.bang() :param msg: Message to log :return: A decorator function """ context = gcm.get_context() if tracer_logger.isEnabledFor(system_logging.INFO): baseline = 2 # how many frames should we go down the stack to obtain info about the method that matters frame = inspect.stack()[baseline][0] try: module_name = inspect.getmodule(frame).__spec__.name except AttributeError: module_name = os.path.basename(sys.argv[0]) # case when barbante is called from the command line method_name = frame.f_code.co_name # See http://stackoverflow.com/a/1140513/778272 # See http://stackoverflow.com/a/2544639/778272 try: method_name = frame.f_locals['__class__'].__name__ + '.' + method_name except KeyError: pass _log(msg, context.tracer_id, context.endpoint, method_name, module_name, _TRACE_BEGIN) yield _log(msg, context.tracer_id, context.endpoint, method_name, module_name, _TRACE_END) else: yield
def trace_wrapper(*args, **kwargs): context = gcm.get_context() if tracer_logger.isEnabledFor(system_logging.INFO): baseline = 1 # how many frames should we go down the stack to obtain info about the method that matters frame = inspect.stack()[baseline][0] try: # For a discussion about obtaining module name, see http://stackoverflow.com/a/2011168/778272 module_name = inspect.getmodule(frame).__spec__.name # And for a discussion about method name, see http://stackoverflow.com/a/1140513/778272 except AttributeError: module_name = "undefined" try: method_name = func.__qualname__ except AttributeError: method_name = func.__name__ _log(msg, context.tracer_id, context.endpoint, method_name, module_name, _TRACE_BEGIN) try: result = func(*args, **kwargs) finally: _log(msg, context.tracer_id, context.endpoint, method_name, module_name, _TRACE_END) else: result = func(*args, **kwargs) return result
def format(self, rec): # Imported from here to avoid cyclic dependency problem from barbante.context.context_manager import global_context_manager as gcm tracer = gcm.get_context().tracer_id endpoint = gcm.get_context().endpoint json = '{"class_name": "%s", "method_name": "%s", ' % (rec.module, rec.funcName) if rec.msg in [PERF_BEGIN, PERF_END]: json += '"stage": "%s", ' % rec.msg else: json += '"message": "%s", ' % rec.msg json += '"timestamp": %.3f, "server": "%s", ' % (rec.created, JsonFormatter._hostname) json += '"tracerid": "%s", "endpoint": "%s", "module_name": "%s"}' % (tracer, endpoint, barbante.__app_name__) rec.json = json out = super().format(rec) return out
def handle(self, record): """ Overrides base method to demultiplex log records based on tenant context. """ # Imported from here to avoid cyclic dependency problem from barbante.context.context_manager import global_context_manager as gcm customer = gcm.get_context().environment if not self.tenants: self.prepare_tenant_handlers() if (not self.disabled) and self.filter(record): if customer in self.tenants.keys(): handlers = self.tenants[customer] else: handlers = self.default_handlers for hdlr in handlers: if record.levelno >= hdlr.level: hdlr.handle(record)
def do_get(self, *args): return {"success": True, "tracerid": str(gcm.get_context().tracer_id)}
def append_to_context(): # print('@gcs=0x{:0X} @gcs.tracer_id=0x{:0X}'.format(id(gcs), id(gcs.tracer_id))) stacks.append(id(gcm.stack)) tids.append(gcm.get_context().tracer_id)