예제 #1
0
    def __init__(self):
        super(LoggerClient, self).__init__()
        self.parent = current_thread()
        self._stopped = False

        self._queue = Queue.Queue()
        self._client = BinderClient("log_writer")
예제 #2
0
파일: log.py 프로젝트: hainm/binder
    def run(self):
        buf = Queue.Queue()
        def buffered_cb(msg):
            buf.put(msg)
        self._pubsub_cb = buffered_cb 
        PubSubStreamer.get_instance().add_app_callback(self._app, self._pubsub_cb)
            
        lines = []
        bc = BinderClient("log_reader")
        rsp = bc.send({"type": "get", "app": self._app, "since": self._start_time})
        if rsp["type"] == "success":
            lines = rsp["msg"].split("\n")
        else:
            error_log("LoggerClient", "read_stream failure for app {}: {}".format(self._app, rsp))
            return
        bc.close()

        # exhaust all lines from the get request
        last_time = None
        for line in lines:
            last_time = LogSettings.EXTRACT_TIME(line)
            self._cb(line)
        if last_time:
            last_time = time.strptime(last_time, LogSettings.TIME_FORMAT)
        
        # now start reading the subscriber output (starting strictly after last_time)
        while not self._stopped:
            try: 
                timeout = 0.05
                line = buf.get(timeout=timeout)
                line_time = time.strptime(LogSettings.EXTRACT_TIME(line), LogSettings.TIME_FORMAT)
                if not last_time or line_time > last_time:
                    self._cb(line)
            except Queue.Empty:
                continue
예제 #3
0
파일: log.py 프로젝트: AnalyticsDojo/binder
def get_app_logs(app, start_time, filtered=False):
    lines = []
    bc = BinderClient("log_reader")
    rsp = bc.send({ "type": "get", "app": app, "since": start_time, "filtered": filtered })
    if rsp and rsp["type"] == "success":
        lines = rsp["msg"].split("\n")
    else:
        error_log("LoggerClient", "read_stream failure for app {}: {}".format(app, rsp))
    bc.close()
    return lines
예제 #4
0
def get_app_logs(app, start_time):
    lines = []
    bc = BinderClient("log_reader")
    rsp = bc.send({"type": "get", "app": app, "since": start_time})
    if rsp["type"] == "success":
        lines = rsp["msg"].split("\n")
    else:
        error_log("LoggerClient",
                  "read_stream failure for app {}: {}".format(app, rsp))
    bc.close()
    return lines
예제 #5
0
파일: log.py 프로젝트: AnalyticsDojo/binder
class LoggerClient(Thread):

    _singleton = None

    @staticmethod
    def getInstance():
        if not LoggerClient._singleton:
            client = LoggerClient()
            client.start()
            LoggerClient._singleton = client
        return LoggerClient._singleton

    def __init__(self):
        super(LoggerClient, self).__init__()
        self.parent = current_thread()
        self._stopped = False

        self._queue = Queue.Queue()
        self._client = BinderClient("log_writer")

    def stop(self): 
        self._client.close()
        self._stopped= True

    def _send_message(self):
        msg = self._queue.get()
        self._client.send(msg)

    def run(self):
        while not self._stopped:
            self._send_message()
        # keep logging until the queue is empty, even after the parent has died
        while not self._queue.empty():
            self._send_message()

    def _send(self, level, tag, msg, **kwargs):
        to_send = {'type': 'log', 'level': level, 'msg': msg, 'tag': tag}
        to_send.update(kwargs)
        self._queue.put(to_send)

    def debug(self, tag, msg, **kwargs):
        self._send(logging.DEBUG, tag, msg, **kwargs)

    def info(self, tag, msg, **kwargs):
        self._send(logging.INFO, tag, msg, **kwargs)

    def warn(self, tag, msg, **kwargs):
        self._send(logging.WARNING, tag, msg, **kwargs)

    def error(self, tag, msg, **kwargs):
        self._send(logging.ERROR, tag, msg, **kwargs)
예제 #6
0
파일: log.py 프로젝트: pjbull/binder
class LoggerClient(Thread):

    _singleton = None

    @staticmethod
    def getInstance():
        if not LoggerClient._singleton:
            client = LoggerClient()
            client.start()
            LoggerClient._singleton = client
        return LoggerClient._singleton

    def __init__(self):
        super(LoggerClient, self).__init__()
        self.parent = current_thread()
        self._stopped = False

        self._queue = Queue.Queue()
        self._client = BinderClient("log_writer")

    def stop(self):
        self._client.close()
        self._stopped = True

    def _send_message(self):
        msg = self._queue.get()
        self._client.send(msg)

    def run(self):
        while not self._stopped:
            self._send_message()
        # keep logging until the queue is empty, even after the parent has died
        while not self._queue.empty():
            self._send_message()

    def _send(self, level, tag, msg, **kwargs):
        to_send = {'type': 'log', 'level': level, 'msg': msg, 'tag': tag}
        to_send.update(kwargs)
        self._queue.put(to_send)

    def debug(self, tag, msg, **kwargs):
        self._send(logging.DEBUG, tag, msg, **kwargs)

    def info(self, tag, msg, **kwargs):
        self._send(logging.INFO, tag, msg, **kwargs)

    def warn(self, tag, msg, **kwargs):
        self._send(logging.WARNING, tag, msg, **kwargs)

    def error(self, tag, msg, **kwargs):
        self._send(logging.ERROR, tag, msg, **kwargs)
예제 #7
0
파일: log.py 프로젝트: AnalyticsDojo/binder
    def __init__(self):
        super(LoggerClient, self).__init__()
        self.parent = current_thread()
        self._stopped = False

        self._queue = Queue.Queue()
        self._client = BinderClient("log_writer")
예제 #8
0
def stop_daemon():
    # stop the binderd process (by sending a 'stop' message to the control socket):
    with BinderClient() as client:
        client.stop_daemon()