From bc44134e339081c5c727297fbcda154997751046 Mon Sep 17 00:00:00 2001 From: 0O0o0oOoO00 <11174151+0O0o0oOoO00@users.noreply.github.com> Date: Tue, 5 Aug 2025 23:54:45 +0800 Subject: [PATCH] add: add scheduler watcher to alas task scheduler --- alas.py | 7 +++++++ config/template.json | 1 + module/config/argument/args.json | 4 ++++ module/config/argument/argument.yaml | 1 + module/config/config_generated.py | 1 + module/config/i18n/en-US.json | 4 ++++ module/config/i18n/ja-JP.json | 4 ++++ module/config/i18n/zh-CN.json | 4 ++++ module/config/i18n/zh-TW.json | 4 ++++ scheduler_watcher.py | 7 +++++++ 10 files changed, 37 insertions(+) diff --git a/alas.py b/alas.py index 49a132714..03893d7e1 100644 --- a/alas.py +++ b/alas.py @@ -22,6 +22,7 @@ import gl from module.device.assets import OTHERS_LOGIN_CONFIRM import gl +from scheduler_watcher import SchedulerWatcher g_current_task: str = "" TASK_FOR_KEEP_OIL_ = [ @@ -78,6 +79,8 @@ class AzurLaneAutoScript: self.is_azur = True elif self.class_name == "ArknightsAutoScript": self.is_ark = True + self.scheduler_watcher = SchedulerWatcher.get_instance() + self.scheduler_watcher.set_alas_obj(self) @cached_property def config(self): @@ -791,6 +794,9 @@ class AzurLaneAutoScript: exit(0) def loop(self): + if deep_get(self.config.data, "Restart.InstanceRestart.EnableSchedulerWatcher", False): + self.scheduler_watcher.start_watch() + if self.is_azur: CrackResource(self.config, self.device).ensure() gl.gl_set("g_config", self.config) @@ -898,6 +904,7 @@ class AzurLaneAutoScript: # Run logger.info(f'Scheduler: Start task `{task}`') + self.scheduler_watcher.switch_task(task) self.device.stuck_record_clear() self.device.click_record_clear() logger.hr(task, level=0) diff --git a/config/template.json b/config/template.json index 67656b21d..39842b68f 100644 --- a/config/template.json +++ b/config/template.json @@ -191,6 +191,7 @@ "NotifyWhenAutoRestart": false }, "InstanceRestart": { + "EnableSchedulerWatcher": false, "Enabled": false, "AttemptsToRestart": 114514, "NotifyWhenAutoRestart": false, diff --git a/module/config/argument/args.json b/module/config/argument/args.json index 218bdcf84..7b051622d 100644 --- a/module/config/argument/args.json +++ b/module/config/argument/args.json @@ -816,6 +816,10 @@ } }, "InstanceRestart": { + "EnableSchedulerWatcher": { + "type": "checkbox", + "value": false + }, "Enabled": { "type": "checkbox", "value": false diff --git a/module/config/argument/argument.yaml b/module/config/argument/argument.yaml index 0d3f0e520..e760b020e 100644 --- a/module/config/argument/argument.yaml +++ b/module/config/argument/argument.yaml @@ -1286,6 +1286,7 @@ AutoRestart: type: checkbox value: false InstanceRestart: + EnableSchedulerWatcher: false Enabled: type: checkbox value: false diff --git a/module/config/config_generated.py b/module/config/config_generated.py index 32ab17e4e..68015bb16 100644 --- a/module/config/config_generated.py +++ b/module/config/config_generated.py @@ -775,6 +775,7 @@ class GeneratedConfig: AutoRestart_NotifyWhenAutoRestart = False # Group `InstanceRestart` + InstanceRestart_EnableSchedulerWatcher = False InstanceRestart_Enabled = False InstanceRestart_AttemptsToRestart = 114514 InstanceRestart_NotifyWhenAutoRestart = False diff --git a/module/config/i18n/en-US.json b/module/config/i18n/en-US.json index dd0afc181..2a977f494 100644 --- a/module/config/i18n/en-US.json +++ b/module/config/i18n/en-US.json @@ -4245,6 +4245,10 @@ "name": "InstanceRestart._info.name", "help": "InstanceRestart._info.help" }, + "EnableSchedulerWatcher": { + "name": "InstanceRestart.EnableSchedulerWatcher.name", + "help": "InstanceRestart.EnableSchedulerWatcher.help" + }, "Enabled": { "name": "InstanceRestart.Enabled.name", "help": "InstanceRestart.Enabled.help" diff --git a/module/config/i18n/ja-JP.json b/module/config/i18n/ja-JP.json index 85b3ebb85..58112fae4 100644 --- a/module/config/i18n/ja-JP.json +++ b/module/config/i18n/ja-JP.json @@ -4245,6 +4245,10 @@ "name": "InstanceRestart._info.name", "help": "InstanceRestart._info.help" }, + "EnableSchedulerWatcher": { + "name": "InstanceRestart.EnableSchedulerWatcher.name", + "help": "InstanceRestart.EnableSchedulerWatcher.help" + }, "Enabled": { "name": "InstanceRestart.Enabled.name", "help": "InstanceRestart.Enabled.help" diff --git a/module/config/i18n/zh-CN.json b/module/config/i18n/zh-CN.json index ac8a4e6b9..ee8e8c748 100644 --- a/module/config/i18n/zh-CN.json +++ b/module/config/i18n/zh-CN.json @@ -4245,6 +4245,10 @@ "name": "重启Alas实例", "help": "" }, + "EnableSchedulerWatcher": { + "name": "调度器监视器", + "help": "如果要开启此功能则建议开启自动实例重启\n注意: 此选项修改后要重新启动Alas" + }, "Enabled": { "name": "启用", "help": "" diff --git a/module/config/i18n/zh-TW.json b/module/config/i18n/zh-TW.json index be689e097..63fc390ba 100644 --- a/module/config/i18n/zh-TW.json +++ b/module/config/i18n/zh-TW.json @@ -4245,6 +4245,10 @@ "name": "InstanceRestart._info.name", "help": "InstanceRestart._info.help" }, + "EnableSchedulerWatcher": { + "name": "InstanceRestart.EnableSchedulerWatcher.name", + "help": "InstanceRestart.EnableSchedulerWatcher.help" + }, "Enabled": { "name": "InstanceRestart.Enabled.name", "help": "InstanceRestart.Enabled.help" diff --git a/scheduler_watcher.py b/scheduler_watcher.py index 9fdd4ce0c..ee01b1e03 100644 --- a/scheduler_watcher.py +++ b/scheduler_watcher.py @@ -41,10 +41,13 @@ class SchedulerWatcher: if self.watcher is not None: if self.watcher.is_alive(): return + logger.info(f"Scheduler watcher start") self.watcher = threading.Thread(target=self.watcher_thread) self.watcher.start() def request_extend_task_deadline(self): + if self.watcher is None: + return now = datetime.datetime.now() if self.warning_count.current_count > 0: self.warning_count.reset() @@ -56,10 +59,14 @@ class SchedulerWatcher: logger.info(f"Current task requests to extend the task deadline") def no_task(self): + if self.watcher is None: + return self.current_task = None self.warning_time = None def switch_task(self, task): + if self.watcher is None: + return self.current_task = task self.warning_count.reset() self.warning_time = datetime.datetime.now() + datetime.timedelta(minutes=10)