Exemple #1
0
class Logger:
    def __init__(self, docker_client):
        self.docker = docker_client
        self.reporter = Reporter(self.docker)
        # keep the last read log line for each container
        # workaround because of the problem with log streaming
        self.state = {}

    """Fetches the logs and sends them to the broker"""

    def read_logs(self, log_filter):
        self.reporter.connect()
        while True:
            time.sleep(10)
            for container in self.docker.containers():
                container_id = container["Id"].encode('ascii', 'ignore')
                if not self.state.has_key(container_id):
                    self.state[container_id] = 0
                if not "tsp-mooc-" in container["Image"]:
                    for log in self.docker.logs(
                            container=container["Id"], timestamps=True).split(
                                '\n')[self.state[container_id]:]:
                        print log
                        if log_filter in log:
                            self.reporter.report(
                                Event("mooc", log[31:], container["Image"],
                                      log[:30]))
                        self.state[container_id] = self.state[container_id] + 1