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