https://github.com/pupil-labs/pupil
Raw File
Tip revision: 4fc04a5559ef4ce3d12b86fff749a605060b50ad authored by Pablo Prietz on 20 November 2017, 09:43:44 UTC
Eye: Remove "Integrated Camera" from preferred camera list
Tip revision: 4fc04a5
log_history.py
'''
(*)~---------------------------------------------------------------------------
Pupil - eye tracking platform
Copyright (C) 2012-2017  Pupil Labs

Distributed under the terms of the GNU
Lesser General Public License (LGPL v3.0).
See COPYING and COPYING.LESSER for license details.
---------------------------------------------------------------------------~(*)
'''
import os
from pyglui import ui
from plugin import Plugin
import zmq_tools

# logging
import logging
logger = logging.getLogger(__name__)


class Log_to_Callback(logging.Handler):
    def __init__(self,cb):
        super().__init__()
        self.cb = cb

    def emit(self,record):
        self.cb(record)


class Log_History(Plugin):
    """Simple logging GUI that displays the last N messages from the logger"""
    icon_chr = chr(0xec10)
    icon_font = 'pupil_icons'

    def __init__(self, g_pool):
        super().__init__(g_pool)
        self.menu = None
        self.num_messages = 50

        self.formatter = logging.Formatter('%(processName)s - [%(levelname)s] %(name)s: %(message)s')
        self.logfile = os.path.join(self.g_pool.user_dir,self.g_pool.app+'.log')

    def init_ui(self):
        self.add_menu()
        self.menu.label = 'Log'

        help_str = 'A View of the {} most recent log messages. Complete logs are here: "{}"'.format(self.num_messages,self.g_pool.user_dir)
        self.menu.append(ui.Info_Text(help_str))

        with open(self.logfile,'r') as fh:
            for l in fh.readlines():
                self.menu.insert(2,ui.Info_Text(l[26:-1]))

        if self.g_pool.app == 'capture':
            self.log_handler = None
            self._socket = zmq_tools.Msg_Receiver(self.g_pool.zmq_ctx,self.g_pool.ipc_sub_url,('logging',))

        else:
            self._socket = None
            self.log_handler = Log_to_Callback(self.on_log)
            logger = logging.getLogger()
            logger.addHandler(self.log_handler)
            self.log_handler.setLevel(logging.INFO)

    def recent_events(self,events):
        if self._socket:
            while self._socket.new_data:
                t,s = self._socket.recv()
                self.on_log(logging.makeLogRecord(s))

    def on_log(self,record):
        self.menu.elements[self.num_messages+2:] = []
        self.menu.insert(1,ui.Info_Text(str(self.formatter.format(record))))

    def deinit_ui(self):
        self.remove_menu()

    def cleanup(self):
        if self.log_handler:
            logger = logging.getLogger()
            logger.removeHandler(self.log_handler)
        if self._socket:
            del self._socket

    def get_init_dict(self):
        return {}
back to top