feat: 通用调度适配
This commit is contained in:
@@ -24,7 +24,7 @@ __author__ = "DLmaster361 <DLmaster_361@163.com>"
|
||||
__license__ = "GPL-3.0 license"
|
||||
|
||||
from .broadcast import Broadcast
|
||||
from .config import Config, MaaConfig, GeneralConfig, MaaUserConfig
|
||||
from .config import Config, MaaConfig, GeneralConfig, MaaUserConfig, GeneralUserConfig
|
||||
from .timer import MainTimer
|
||||
from .task_manager import TaskManager
|
||||
|
||||
@@ -36,4 +36,5 @@ __all__ = [
|
||||
"MainTimer",
|
||||
"TaskManager",
|
||||
"MaaUserConfig",
|
||||
"GeneralUserConfig",
|
||||
]
|
||||
|
||||
@@ -22,7 +22,6 @@
|
||||
|
||||
import re
|
||||
import shutil
|
||||
import asyncio
|
||||
import requests
|
||||
import truststore
|
||||
import calendar
|
||||
@@ -133,7 +132,7 @@ class TimeSet(ConfigBase):
|
||||
super().__init__()
|
||||
|
||||
self.Info_Enabled = ConfigItem("Info", "Enabled", False, BoolValidator())
|
||||
self.Info_Time = ConfigItem("Info", "Set", "00:00")
|
||||
self.Info_Time = ConfigItem("Info", "Time", "00:00")
|
||||
|
||||
|
||||
class QueueConfig(ConfigBase):
|
||||
|
||||
@@ -118,8 +118,8 @@ class _TaskManager:
|
||||
|
||||
if isinstance(Config.ScriptConfig[task_id], MaaConfig):
|
||||
task_item = MaaManager(mode, task_id, actual_id, websocket)
|
||||
# elif isinstance(Config.ScriptConfig[task_id], GeneralConfig):
|
||||
# task_item = GeneralManager(mode, task_id, actual_id, websocket)
|
||||
elif isinstance(Config.ScriptConfig[task_id], GeneralConfig):
|
||||
task_item = GeneralManager(mode, task_id, actual_id, websocket)
|
||||
else:
|
||||
logger.error(
|
||||
f"不支持的脚本类型:{Config.ScriptConfig[task_id].__class__.__name__}"
|
||||
@@ -197,8 +197,8 @@ class _TaskManager:
|
||||
|
||||
if isinstance(Config.ScriptConfig[script_id], MaaConfig):
|
||||
task_item = MaaManager(mode, script_id, None, websocket)
|
||||
# elif isinstance(Config.ScriptConfig[task_id], GeneralConfig):
|
||||
# task_item = GeneralManager(mode, task_id, actual_id, websocket)
|
||||
elif isinstance(Config.ScriptConfig[task_id], GeneralConfig):
|
||||
task_item = GeneralManager(mode, task_id, actual_id, websocket)
|
||||
else:
|
||||
logger.error(
|
||||
f"不支持的脚本类型:{Config.ScriptConfig[script_id].__class__.__name__}"
|
||||
|
||||
@@ -183,12 +183,9 @@ class MaaManager:
|
||||
|
||||
self.cur_user_data = self.user_config[uuid.UUID(user["user_id"])]
|
||||
|
||||
if self.script_config.get(
|
||||
"Run", "ProxyTimesLimit"
|
||||
) == 0 or self.cur_user_data.get(
|
||||
"Data", "ProxyTimes"
|
||||
) < self.script_config.get(
|
||||
"Run", "ProxyTimesLimit"
|
||||
if (self.script_config.get("Run", "ProxyTimesLimit") == 0) or (
|
||||
self.cur_user_data.get("Data", "ProxyTimes")
|
||||
< self.script_config.get("Run", "ProxyTimesLimit")
|
||||
):
|
||||
user["status"] = "运行"
|
||||
await self.websocket.send_json(
|
||||
@@ -848,6 +845,7 @@ class MaaManager:
|
||||
self.log_start_time = datetime.now()
|
||||
|
||||
# 监测MAA运行状态
|
||||
self.log_check_mode = "设置脚本"
|
||||
await self.maa_log_monitor.start(self.maa_log_path, self.log_start_time)
|
||||
self.wait_event.clear()
|
||||
await self.wait_event.wait()
|
||||
@@ -893,7 +891,7 @@ class MaaManager:
|
||||
)
|
||||
self.user_list[self.index]["status"] = "完成"
|
||||
logger.success(
|
||||
f"用户 {self.user_list[self.index]['name']} 的自动代理任务已完成"
|
||||
f"用户 {self.user_list[self.index]['user_id']} 的自动代理任务已完成"
|
||||
)
|
||||
Notify.push_plyer(
|
||||
"成功完成一个自动代理任务!",
|
||||
@@ -904,7 +902,7 @@ class MaaManager:
|
||||
else:
|
||||
# 录入代理失败的用户
|
||||
logger.error(
|
||||
f"用户 {self.user_list[self.index]['name']} 的自动代理任务未完成"
|
||||
f"用户 {self.user_list[self.index]['user_id']} 的自动代理任务未完成"
|
||||
)
|
||||
self.user_list[self.index]["status"] = "异常"
|
||||
|
||||
@@ -930,6 +928,7 @@ class MaaManager:
|
||||
self.user_list[self.index]["status"] = "异常"
|
||||
|
||||
async def final_task(self, task: asyncio.Task):
|
||||
"""结束时的收尾工作"""
|
||||
|
||||
logger.info("MAA 主任务已结束,开始执行后续操作")
|
||||
|
||||
@@ -1005,7 +1004,7 @@ class MaaManager:
|
||||
title = (
|
||||
f"{self.current_date} | {self.script_config.get("Info", "Name")}的{self.mode}任务报告"
|
||||
if self.script_config.get("Info", "Name") != ""
|
||||
else f"{self.current_date} | {self.mode[:4]}任务报告"
|
||||
else f"{self.current_date} | {self.mode}任务报告"
|
||||
)
|
||||
result = {
|
||||
"title": f"{self.mode}任务报告",
|
||||
@@ -1028,9 +1027,11 @@ class MaaManager:
|
||||
f"已完成数:{result["completed_count"]},未完成数:{result["uncompleted_count"]}\n\n"
|
||||
)
|
||||
if len(result["failed_user"]) > 0:
|
||||
result_text += f"{self.mode[2:4]}未成功的用户:\n{"\n".join(result["failed_user"])}\n"
|
||||
result_text += (
|
||||
f"{self.mode}未成功的用户:\n{"\n".join(result["failed_user"])}\n"
|
||||
)
|
||||
if len(result["waiting_user"]) > 0:
|
||||
result_text += f"\n未开始{self.mode[2:4]}的用户:\n{"\n".join(result["waiting_user"])}\n"
|
||||
result_text += f"\n未开始{self.mode}的用户:\n{"\n".join(result["waiting_user"])}\n"
|
||||
|
||||
# 推送代理结果通知
|
||||
Notify.push_plyer(
|
||||
@@ -1040,6 +1041,7 @@ class MaaManager:
|
||||
10,
|
||||
)
|
||||
await self.push_notification("代理结果", title, result)
|
||||
|
||||
elif self.mode == "设置脚本":
|
||||
(
|
||||
Path.cwd()
|
||||
|
||||
@@ -25,6 +25,7 @@ __license__ = "GPL-3.0 license"
|
||||
|
||||
|
||||
from .skland import skland_sign_in
|
||||
from .general import GeneralManager
|
||||
from .MAA import MaaManager
|
||||
|
||||
__all__ = ["skland_sign_in", "MaaManager"]
|
||||
__all__ = ["skland_sign_in", "GeneralManager", "MaaManager"]
|
||||
|
||||
1071
app/task/general.py
Normal file
1071
app/task/general.py
Normal file
File diff suppressed because it is too large
Load Diff
@@ -9,6 +9,33 @@ from .logger import get_logger
|
||||
|
||||
logger = get_logger("日志监控器")
|
||||
|
||||
TIME_FIELDS = {
|
||||
"%Y": "year",
|
||||
"%m": "month",
|
||||
"%d": "day",
|
||||
"%H": "hour",
|
||||
"%M": "minute",
|
||||
"%S": "second",
|
||||
"%f": "microsecond",
|
||||
}
|
||||
"""时间字段映射表"""
|
||||
|
||||
|
||||
def strptime(date_string: str, format: str, default_date: datetime) -> datetime:
|
||||
"""根据指定格式解析日期字符串"""
|
||||
|
||||
date = datetime.strptime(date_string, format)
|
||||
|
||||
# 构建参数字典
|
||||
datetime_kwargs = {}
|
||||
for format_code, field_name in TIME_FIELDS.items():
|
||||
if format_code in format:
|
||||
datetime_kwargs[field_name] = getattr(date, field_name)
|
||||
else:
|
||||
datetime_kwargs[field_name] = getattr(default_date, field_name)
|
||||
|
||||
return datetime(**datetime_kwargs)
|
||||
|
||||
|
||||
class LogMonitor:
|
||||
def __init__(
|
||||
@@ -54,13 +81,14 @@ class LogMonitor:
|
||||
async for line in f:
|
||||
if not if_log_start:
|
||||
try:
|
||||
entry_time = datetime.strptime(
|
||||
entry_time = strptime(
|
||||
line[
|
||||
self.time_stamp_range[
|
||||
0
|
||||
] : self.time_stamp_range[1]
|
||||
],
|
||||
self.time_format,
|
||||
self.last_callback_time,
|
||||
)
|
||||
if entry_time > self.log_start_time:
|
||||
if_log_start = True
|
||||
|
||||
@@ -26,7 +26,7 @@ __license__ = "GPL-3.0 license"
|
||||
|
||||
from .logger import get_logger
|
||||
from .ImageUtils import ImageUtils
|
||||
from .LogMonitor import LogMonitor
|
||||
from .LogMonitor import LogMonitor, strptime
|
||||
from .ProcessManager import ProcessManager
|
||||
from .security import dpapi_encrypt, dpapi_decrypt
|
||||
|
||||
@@ -37,4 +37,5 @@ __all__ = [
|
||||
"ProcessManager",
|
||||
"dpapi_encrypt",
|
||||
"dpapi_decrypt",
|
||||
"strptime",
|
||||
]
|
||||
|
||||
Reference in New Issue
Block a user