feat 服务手动触发
This commit is contained in:
parent
de98ccd33c
commit
85014f4acb
@ -11,12 +11,13 @@ from sqlalchemy.orm import Session
|
||||
from app import schemas
|
||||
from app.chain.search import SearchChain
|
||||
from app.core.config import settings
|
||||
from app.core.event import eventmanager
|
||||
from app.core.security import verify_token
|
||||
from app.db import get_db
|
||||
from app.db.systemconfig_oper import SystemConfigOper
|
||||
from app.helper.message import MessageHelper
|
||||
from app.helper.progress import ProgressHelper
|
||||
from app.schemas.types import SystemConfigKey
|
||||
from app.schemas.types import SystemConfigKey, EventType
|
||||
from app.utils.http import RequestUtils
|
||||
from app.utils.system import SystemUtils
|
||||
from version import APP_VERSION
|
||||
@ -211,3 +212,17 @@ def restart_system(_: schemas.TokenPayload = Depends(verify_token)):
|
||||
# 执行重启
|
||||
ret, msg = SystemUtils.restart()
|
||||
return schemas.Response(success=ret, message=msg)
|
||||
|
||||
|
||||
@router.get("/command", summary="执行命令", response_model=schemas.Response)
|
||||
def execute_command(cmd: str,
|
||||
_: schemas.TokenPayload = Depends(verify_token)):
|
||||
"""
|
||||
执行命令
|
||||
"""
|
||||
if not cmd:
|
||||
return schemas.Response(success=False, message="命令不能为空!")
|
||||
eventmanager.send_event(etype=EventType.CommandExcute, data={
|
||||
"cmd": cmd
|
||||
})
|
||||
return schemas.Response(success=True)
|
||||
|
@ -107,6 +107,11 @@ class Command(metaclass=Singleton):
|
||||
"description": "删除订阅",
|
||||
"data": {}
|
||||
},
|
||||
"/subscribe_tmdb": {
|
||||
"func": SubscribeChain(self._db).check,
|
||||
"description": "订阅TMDB数据刷新",
|
||||
"data": {}
|
||||
},
|
||||
"/downloading": {
|
||||
"func": DownloadChain(self._db).remote_downloading,
|
||||
"description": "正在下载",
|
||||
@ -216,7 +221,10 @@ class Command(metaclass=Singleton):
|
||||
command = self.get(cmd)
|
||||
if command:
|
||||
try:
|
||||
logger.info(f"用户 {userid} 开始执行:{command.get('description')} ...")
|
||||
if userid:
|
||||
logger.info(f"用户 {userid} 开始执行:{command.get('description')} ...")
|
||||
else:
|
||||
logger.info(f"开始执行:{command.get('description')} ...")
|
||||
cmd_data = command['data'] if command.get('data') else {}
|
||||
args_num = ObjectUtils.arguments(command['func'])
|
||||
if args_num > 0:
|
||||
@ -236,7 +244,10 @@ class Command(metaclass=Singleton):
|
||||
else:
|
||||
# 没有参数
|
||||
command['func']()
|
||||
logger.info(f"用户 {userid} {command.get('description')} 执行完成")
|
||||
if userid:
|
||||
logger.info(f"用户 {userid} {command.get('description')} 执行完成")
|
||||
else:
|
||||
logger.info(f"{command.get('description')} 执行完成")
|
||||
except Exception as err:
|
||||
logger.error(f"执行命令 {cmd} 出错:{str(err)}")
|
||||
traceback.print_exc()
|
||||
|
@ -49,6 +49,7 @@ class Scheduler(metaclass=Singleton):
|
||||
"interval",
|
||||
minutes=settings.COOKIECLOUD_INTERVAL,
|
||||
next_run_time=datetime.now(pytz.timezone(settings.TZ)) + timedelta(minutes=1),
|
||||
id="cookiecloud",
|
||||
name="同步CookieCloud站点")
|
||||
|
||||
# 媒体服务器同步
|
||||
@ -56,6 +57,7 @@ class Scheduler(metaclass=Singleton):
|
||||
self._scheduler.add_job(MediaServerChain(self._db).sync, "interval",
|
||||
hours=settings.MEDIASERVER_SYNC_INTERVAL,
|
||||
next_run_time=datetime.now(pytz.timezone(settings.TZ)) + timedelta(minutes=5),
|
||||
id="mediaserver_sync",
|
||||
name="同步媒体服务器")
|
||||
|
||||
# 新增订阅时搜索(5分钟检查一次)
|
||||
@ -63,19 +65,23 @@ class Scheduler(metaclass=Singleton):
|
||||
minutes=5, kwargs={'state': 'N'})
|
||||
|
||||
# 检查更新订阅TMDB数据(每隔6小时)
|
||||
self._scheduler.add_job(SubscribeChain(self._db).check, "interval", hours=6)
|
||||
self._scheduler.add_job(SubscribeChain(self._db).check, "interval", hours=6,
|
||||
id="subscribe_tmdb", name="订阅元数据更新")
|
||||
|
||||
# 订阅状态每隔24小时搜索一次
|
||||
if settings.SUBSCRIBE_SEARCH:
|
||||
self._scheduler.add_job(SubscribeChain(self._db).search, "interval",
|
||||
hours=24, kwargs={'state': 'R'}, name="订阅搜索")
|
||||
hours=24, kwargs={'state': 'R'},
|
||||
id="subscribe_search", name="订阅搜索")
|
||||
|
||||
if settings.SUBSCRIBE_MODE == "spider":
|
||||
# 站点首页种子定时刷新模式
|
||||
triggers = TimerUtils.random_scheduler(num_executions=30)
|
||||
for trigger in triggers:
|
||||
self._scheduler.add_job(SubscribeChain(self._db).refresh, "cron",
|
||||
hour=trigger.hour, minute=trigger.minute, name="订阅刷新")
|
||||
hour=trigger.hour, minute=trigger.minute,
|
||||
id=f"subscribe_refresh|{trigger.hour}:{trigger.minute}",
|
||||
name="订阅刷新")
|
||||
else:
|
||||
# RSS订阅模式
|
||||
if not settings.SUBSCRIBE_RSS_INTERVAL:
|
||||
@ -83,11 +89,13 @@ class Scheduler(metaclass=Singleton):
|
||||
elif settings.SUBSCRIBE_RSS_INTERVAL < 5:
|
||||
settings.SUBSCRIBE_RSS_INTERVAL = 5
|
||||
self._scheduler.add_job(SubscribeChain(self._db).refresh, "interval",
|
||||
minutes=settings.SUBSCRIBE_RSS_INTERVAL, name="订阅刷新")
|
||||
minutes=settings.SUBSCRIBE_RSS_INTERVAL,
|
||||
id="subscribe_refresh", name="订阅刷新")
|
||||
|
||||
# 下载器文件转移(每5分钟)
|
||||
if settings.DOWNLOADER_MONITOR:
|
||||
self._scheduler.add_job(TransferChain(self._db).process, "interval", minutes=5, name="下载文件整理")
|
||||
self._scheduler.add_job(TransferChain(self._db).process, "interval", minutes=5,
|
||||
id="transfer", name="下载文件整理")
|
||||
|
||||
# 公共定时服务
|
||||
self._scheduler.add_job(SchedulerChain(self._db).scheduler_job, "interval", minutes=10)
|
||||
|
Loading…
x
Reference in New Issue
Block a user