Example #1
0
 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)
Example #2
0
 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()
Example #3
0
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
Example #4
0
    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
Example #5
0
    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
Example #6
0
    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)
Example #7
0
 def do_get(self, *args):
     return {"success": True, "tracerid": str(gcm.get_context().tracer_id)}
Example #8
0
 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)