class StatusManager: def __init__(self): self.running_app = {} self.last_status = {} self.curr_status = {} self.progress = {} self.log = [] def is_running(self): return len(self.running_app) > 0 def run_app(self, app_name, app): self.running_app[app_name] = app def end_app(self, app_name): self.running_app.pop(app_name) def set_status(self, app_name, runner_name, key, value): self.last_status = self.curr_status if app_name not in self.curr_status: self.curr_status[app_name] = {} if runner_name not in self.curr_status[app_name]: self.curr_status[app_name][runner_name] = {} self.curr_status[app_name][runner_name][key] = value def set_progress(self, app_name, runner_name, key, curr_value, max_value): if app_name not in self.progress: self.progress[app_name] = {} if runner_name not in self.progress[app_name]: self.progress[app_name][runner_name] = {} self.progress[app_name][runner_name][key] = (curr_value, max_value) def get_status(self): return self.curr_status def get_progress(self): return self.progress def add_log(self, time_str, log_type, message): self.log.append((time_str, log_type, message)) def get_log(self): return self.log def get_running_apps(self): return list(self.running_app.keys()) def get_last_status(self): return self.last_status def reset_status(self): self.last_status = {} self.curr_status = {} status_manager = StatusManager()