|
@@ -8,22 +8,32 @@ class MonitorState(object):
|
|
|
|
|
|
def __init__(self):
|
|
|
self.hearts = {}
|
|
|
- self.tasks = defaultdict(lambda: [])
|
|
|
+ self.tasks = {}
|
|
|
+ self.task_events = defaultdict(lambda: [])
|
|
|
self.workers = defaultdict(lambda: [])
|
|
|
|
|
|
def tasks_by_type(self):
|
|
|
- types = {}
|
|
|
- for id, task in self.tasks:
|
|
|
- types[task["name"]] = task
|
|
|
- return types
|
|
|
+ t = defaultdict(lambda: [])
|
|
|
+ for id, events in self.task_events.items():
|
|
|
+ try:
|
|
|
+ task_type = self.tasks[id]["name"]
|
|
|
+ except KeyError:
|
|
|
+ pass
|
|
|
+ else:
|
|
|
+ t[task_type].append(id)
|
|
|
+ return t
|
|
|
|
|
|
def receive_task_event(self, event):
|
|
|
event["state"] = event.pop("type")
|
|
|
- self.tasks[event["uuid"]].append(event)
|
|
|
+ self.task_events[event["uuid"]].append(event)
|
|
|
|
|
|
def receive_heartbeat(self, event):
|
|
|
self.hearts[event["hostname"]] = event["timestamp"]
|
|
|
|
|
|
+ def receive_task_received(self, event):
|
|
|
+ self.tasks[event["uuid"]] = event
|
|
|
+ self.task_events[event["uuid"]].append(event)
|
|
|
+
|
|
|
def receive_worker_event(self, event):
|
|
|
self.workers[event["hostname"]].append(event["type"])
|
|
|
|
|
@@ -36,7 +46,10 @@ class MonitorState(object):
|
|
|
return False
|
|
|
|
|
|
def tasks_by_time(self):
|
|
|
- return sorted(self.tasks.values(), key=lambda events: events[-1].timestamp)
|
|
|
+ return dict(sorted(self.task_events.items(),
|
|
|
+ key=lambda (uuid, events): events[-1]["timestamp"]))
|
|
|
|
|
|
def tasks_by_last_state(self):
|
|
|
- return [events[-1] for event in self.tasks_by_time()]
|
|
|
+ return [events[-1] for event in self.task_by_time()]
|
|
|
+
|
|
|
+monitor_state = MonitorState()
|