Ejemplo n.º 1
0
    def __init__(self, servercfg, dl):
        self.server_started = Signal()
        self.server_stopped = Signal()

        self.servercfg = servercfg
        self.dl = dl

        cherrypy.engine.subscribe("start", self.on_start)
        cherrypy.engine.subscribe("stop", self.on_stop)
Ejemplo n.º 2
0
    def __init__(self, cfg, dl):
        # signals
        self.session_new = Signal(["session_id", "session_monitors"])
        self.session_switch = Signal(["session_id"])

        self.cfg = cfg
        self.session_counter = 0
        self.sessions = {}
        self.session_id_format = "{uniq_id} - {date} - {time}"
        dl.data_updated.connect(self.on_data_arrived)
Ejemplo n.º 3
0
class BaseFigure(object):
    '''
    A Panel with a line plot in it
    '''
    def __init__(self, **kwargs):
        self.figure_updated = Signal()
        self.figure = Figure((1,1))
        self.axes = self.figure.add_subplot(111)
        
    def accept_data(self, **kwargs):
        '''
        Handles a request from the HTTP server
        '''
        self.do_accept_data(**kwargs)
        self.figure_updated.emit(figure=self)
        
    def clear(self):
        self.axes.cla()
        self.axes.draw()
        self.axes.Refresh()
Ejemplo n.º 4
0
class DataListener(object):
    """
    HTTP Service that listens to requests and forwards them
    upwards through the data_updated Signal
    """

    def __init__(self):
        self.data_updated = Signal(["monitor_name", "args"])

    @cherrypy.expose
    def index(self, **kwargs):
        if "monitor_name" not in kwargs:
            raise Exception("Data name not found")
        monitor_name = kwargs.pop("monitor_name")
        # pub.sendMessage('DATA', (monitor_name, kwargs))
        self.data_updated.emit(monitor_name=monitor_name, args=kwargs)

    def _cp_dispatch(self, vpath):
        assert len(vpath) == 1
        cherrypy.request.params["monitor_name"] = vpath.pop()
        return self
Ejemplo n.º 5
0
class ListeningService(object):
    def __init__(self, servercfg, dl):
        self.server_started = Signal()
        self.server_stopped = Signal()

        self.servercfg = servercfg
        self.dl = dl

        cherrypy.engine.subscribe("start", self.on_start)
        cherrypy.engine.subscribe("stop", self.on_stop)

    def on_start(self):
        self.server_started.emit()

    def on_stop(self):
        self.server_stopped.emit()

    def start(self):
        cherrypy.config.update(self.servercfg)
        cherrypy.tree.mount(self.dl, "", None)

        if hasattr(cherrypy.engine, "signal_handler"):
            cherrypy.engine.signal_handler.subscribe()
        if hasattr(cherrypy.engine, "console_control_handler"):
            cherrypy.engine.console_control_handler.subscribe()

        cherrypy.engine.start()

    def stop(self):
        cherrypy.engine.stop()

    def exit(self):
        cherrypy.engine.exit()

    def block(self):
        cherrypy.engine.block()
Ejemplo n.º 6
0
class SessionManager:
    """ A Session consist of a collection of DataMonitors
    The SessionManager connects to a DataListener (dl) and sends
    all data that it receives to the corresponding DataThreadMonitor
    in the active Session. 
    """

    def __init__(self, cfg, dl):
        # signals
        self.session_new = Signal(["session_id", "session_monitors"])
        self.session_switch = Signal(["session_id"])

        self.cfg = cfg
        self.session_counter = 0
        self.sessions = {}
        self.session_id_format = "{uniq_id} - {date} - {time}"
        dl.data_updated.connect(self.on_data_arrived)

    def switch_new_session(self):
        self.switch_session(self.new_session())

    def new_session(self):
        self.session_counter = self.session_counter + 1
        session_id = self.session_id_format.format(
            uniq_id=self.session_counter,
            date=datetime.datetime.now().strftime("%Y-%m-%d"),
            time=datetime.datetime.now().strftime("%H:%M"),
        )
        self.sessions[session_id] = {}
        new_session = {}
        if "tabs" in self.cfg["elements"]:
            for tab_name, elements in self.cfg["elements"]["tabs"].iteritems():
                new_session[tab_name] = {}
                for monitor_name, data_cfg in elements.iteritems():
                    self.sessions[session_id][monitor_name] = DataThreadMonitor(data_cfg)
                    new_session[tab_name][monitor_name] = self.sessions[session_id][monitor_name]
        else:
            new_session["default"] = {}
            for monitor_name, data_cfg in self.cfg["elements"].iteritems():
                self.sessions[session_id][monitor_name] = DataThreadMonitor(data_cfg)
                new_session["default"][monitor_name] = self.sessions[session_id][monitor_name]

        # pub.sendMessage("SESSION NEW", (session_id,
        #                                self.get_session_monitors(session_id)))
        self.session_new.emit(session_id=session_id, session_monitors=new_session)

        return session_id

    def get_session_monitors(self, session_id):
        return self.sessions[session_id]

    def current_session(self):
        return self.sessions[self.current_session_id]

    def switch_session(self, session_id):
        self.current_session_id = session_id
        # pub.sendMessage("SESSION SWICH", session_id)
        self.session_switch.emit(session_id=session_id)
        return session_id

    def clone_session(self, session_id):
        other_session = self.get_session_monitors(session_id)
        for monitor_name, monitor in self.current_session().iteritems():
            monitor.ghost_clone(other_session[monitor_name])

    def on_data_arrived(self, monitor_name, args, **kwargs):
        try:
            print monitor_name
            self.current_session()[monitor_name].accept_data(**args)
        except KeyError:
            logger.error("Monitor {0} not found".format(monitor_name))

    def save(self, out_dir):
        for session_id, monitors in self.sessions.iteritems():
            session_out_dir = os.path.join(out_dir, str(session_id))
            mkdir_p(session_out_dir)
            for monitor_name, monitor in monitors.iteritems():
                monitor.save(os.path.join(session_out_dir, monitor_name + ".png"))

    def clear(self):
        for monitor_name, monitor in self.current_session().iteritems():
            monitor.clear()
Ejemplo n.º 7
0
 def __init__(self, **kwargs):
     self.figure_updated = Signal()
     self.figure = Figure((1,1))
     self.axes = self.figure.add_subplot(111)
Ejemplo n.º 8
0
 def __init__(self):
     self.data_updated = Signal(["monitor_name", "args"])