diff --git a/ovenWatcher.py b/ovenWatcher.py index 706f539..1dce6a4 100644 --- a/ovenWatcher.py +++ b/ovenWatcher.py @@ -1,9 +1,13 @@ -import threading,logging,json,time - +import threading,logging,json,time,datetime +from oven import Oven log = logging.getLogger(__name__) class OvenWatcher(threading.Thread): def __init__(self,oven): + self.last_profile = None + self.last_log = [] + self.started = None + self.recording = False self.observers = [] threading.Thread.__init__(self) self.daemon = True @@ -14,13 +18,38 @@ class OvenWatcher(threading.Thread): def run(self): while True: oven_state = self.oven.get_state() - self.notifyAll(oven_state) + + if oven_state.get("state") == Oven.STATE_RUNNING: + self.last_log.append(oven_state) + else: + self.recording = False + self.notify_all(oven_state) time.sleep(0.5) + + def record(self, profile): + self.last_profile = profile + self.last_log = [] + self.started = datetime.datetime.now() + self.recording = True - def addObserver(self,observer): + def add_observer(self,observer): + backlog = { + 'type': "backlog", + 'profile': self.last_profile, + 'log': self.last_log, + #'started': self.started + } + print backlog + backlog_json = json.dumps(backlog) + try: + print backlog_json + observer.send(backlog_json) + except: + log.error("Could not send backlog to new observer") + self.observers.append(observer) - def notifyAll(self,message): + def notify_all(self,message): message_json = json.dumps(message) log.debug("sending to %d clients: %s"%(len(self.observers),message_json)) for wsock in self.observers: diff --git a/picoreflowd.py b/picoreflowd.py index 5be07d9..f4bab2e 100644 --- a/picoreflowd.py +++ b/picoreflowd.py @@ -55,6 +55,7 @@ def handle_control(): profile_json = json.dumps(profile_obj) profile = Profile(profile_json) oven.run_profile(profile) + ovenWatcher.record(profile_json) elif msgdict.get("cmd") == "STOP": log.info("Stop command received") oven.abort_run() @@ -101,7 +102,7 @@ def handle_storage(): @app.route('/status') def handle_status(): wsock = get_websocket_from_request() - ovenWatcher.addObserver(wsock) + ovenWatcher.add_observer(wsock) log.info("websocket (status) opened") while True: try: