fix
This commit is contained in:
parent
28b429a5d7
commit
1a3695a38c
@ -7,7 +7,10 @@ from app import schemas
|
|||||||
from app.chain.dashboard import DashboardChain
|
from app.chain.dashboard import DashboardChain
|
||||||
from app.core.config import settings
|
from app.core.config import settings
|
||||||
from app.core.security import verify_token
|
from app.core.security import verify_token
|
||||||
|
from app.scheduler import SchedulerChain, Scheduler
|
||||||
|
from app.utils.string import StringUtils
|
||||||
from app.utils.system import SystemUtils
|
from app.utils.system import SystemUtils
|
||||||
|
from app.utils.timer import TimerUtils
|
||||||
|
|
||||||
router = APIRouter()
|
router = APIRouter()
|
||||||
|
|
||||||
@ -60,3 +63,30 @@ def downloader(_: schemas.TokenPayload = Depends(verify_token)) -> Any:
|
|||||||
upload_size=transfer_info.upload_size,
|
upload_size=transfer_info.upload_size,
|
||||||
free_space=free_space
|
free_space=free_space
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@router.get("/schedule", summary="后台服务", response_model=List[schemas.ScheduleInfo])
|
||||||
|
def schedule(_: schemas.TokenPayload = Depends(verify_token)) -> Any:
|
||||||
|
"""
|
||||||
|
查询后台服务信息
|
||||||
|
"""
|
||||||
|
# 返回计时任务
|
||||||
|
schedulers = []
|
||||||
|
# 去重
|
||||||
|
added = []
|
||||||
|
jobs = Scheduler().list()
|
||||||
|
for job in jobs:
|
||||||
|
if job.name not in added:
|
||||||
|
added.append(job.name)
|
||||||
|
else:
|
||||||
|
continue
|
||||||
|
if not StringUtils.is_chinese(job.name):
|
||||||
|
continue
|
||||||
|
schedulers.append(schemas.ScheduleInfo(
|
||||||
|
id=job.id,
|
||||||
|
name=job.name,
|
||||||
|
status="等待" if job.pending else "运行中",
|
||||||
|
next_run=TimerUtils.time_difference(job.next_run_time) or "已停止"
|
||||||
|
))
|
||||||
|
|
||||||
|
return schedulers
|
||||||
|
@ -45,24 +45,28 @@ class Scheduler(metaclass=Singleton):
|
|||||||
self._scheduler.add_job(CookieCloudChain().process,
|
self._scheduler.add_job(CookieCloudChain().process,
|
||||||
"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),
|
||||||
|
name="CookieCloud同步")
|
||||||
|
|
||||||
# 新增订阅时搜索(5分钟检查一次)
|
# 新增订阅时搜索(5分钟检查一次)
|
||||||
self._scheduler.add_job(SubscribeChain().search, "interval", minutes=5, kwargs={'state': 'N'})
|
self._scheduler.add_job(SubscribeChain().search, "interval",
|
||||||
|
minutes=5, kwargs={'state': 'N'})
|
||||||
|
|
||||||
# 订阅状态每隔12小时刷新一次
|
# 订阅状态每隔12小时搜索一次
|
||||||
self._scheduler.add_job(SubscribeChain().search, "interval", hours=12, kwargs={'state': 'R'})
|
self._scheduler.add_job(SubscribeChain().search, "interval",
|
||||||
|
hours=12, kwargs={'state': 'R'}, name="订阅搜索")
|
||||||
|
|
||||||
# 站点首页种子定时刷新缓存并匹配订阅
|
# 站点首页种子定时刷新缓存并匹配订阅
|
||||||
triggers = TimerUtils.random_scheduler(num_executions=20)
|
triggers = TimerUtils.random_scheduler(num_executions=20)
|
||||||
for trigger in triggers:
|
for trigger in triggers:
|
||||||
self._scheduler.add_job(SubscribeChain().refresh, "cron", hour=trigger.hour, minute=trigger.minute)
|
self._scheduler.add_job(SubscribeChain().refresh, "cron",
|
||||||
|
hour=trigger.hour, minute=trigger.minute, name="订阅刷新")
|
||||||
|
|
||||||
# 豆瓣同步(每30分钟)
|
# 豆瓣同步(每30分钟)
|
||||||
self._scheduler.add_job(DoubanChain().sync, "interval", minutes=30)
|
self._scheduler.add_job(DoubanChain().sync, "interval", minutes=30, name="同步豆瓣想看")
|
||||||
|
|
||||||
# 下载器文件转移(每5分钟)
|
# 下载器文件转移(每5分钟)
|
||||||
self._scheduler.add_job(TransferChain().process, "interval", minutes=5)
|
self._scheduler.add_job(TransferChain().process, "interval", minutes=5, name="下载文件整理")
|
||||||
|
|
||||||
# 公共定时服务
|
# 公共定时服务
|
||||||
self._scheduler.add_job(SchedulerChain().scheduler_job, "interval", minutes=10)
|
self._scheduler.add_job(SchedulerChain().scheduler_job, "interval", minutes=10)
|
||||||
@ -73,6 +77,12 @@ class Scheduler(metaclass=Singleton):
|
|||||||
# 启动定时服务
|
# 启动定时服务
|
||||||
self._scheduler.start()
|
self._scheduler.start()
|
||||||
|
|
||||||
|
def list(self):
|
||||||
|
"""
|
||||||
|
当前所有任务
|
||||||
|
"""
|
||||||
|
return self._scheduler.get_jobs()
|
||||||
|
|
||||||
def stop(self):
|
def stop(self):
|
||||||
"""
|
"""
|
||||||
关闭定时服务
|
关闭定时服务
|
||||||
|
@ -49,3 +49,14 @@ class DownloaderInfo(BaseModel):
|
|||||||
upload_size: Optional[float] = 0.0
|
upload_size: Optional[float] = 0.0
|
||||||
# 剩余空间
|
# 剩余空间
|
||||||
free_space: Optional[float] = 0.0
|
free_space: Optional[float] = 0.0
|
||||||
|
|
||||||
|
|
||||||
|
class ScheduleInfo(BaseModel):
|
||||||
|
# ID
|
||||||
|
id: Optional[str] = None
|
||||||
|
# 名称
|
||||||
|
name: Optional[str] = None
|
||||||
|
# 状态
|
||||||
|
status: Optional[str] = None
|
||||||
|
# 下次执行时间
|
||||||
|
next_run: Optional[str] = None
|
||||||
|
@ -37,3 +37,24 @@ class TimerUtils:
|
|||||||
trigger.append(random_trigger)
|
trigger.append(random_trigger)
|
||||||
|
|
||||||
return trigger
|
return trigger
|
||||||
|
|
||||||
|
from datetime import datetime, timedelta
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def time_difference(input_datetime: datetime) -> str:
|
||||||
|
current_datetime = datetime.datetime.now(datetime.timezone.utc).astimezone()
|
||||||
|
time_difference = input_datetime - current_datetime
|
||||||
|
|
||||||
|
days = time_difference.days
|
||||||
|
hours, remainder = divmod(time_difference.seconds, 3600)
|
||||||
|
minutes, _ = divmod(remainder, 60)
|
||||||
|
|
||||||
|
time_difference_string = ""
|
||||||
|
if days > 0:
|
||||||
|
time_difference_string += f"{days}天"
|
||||||
|
if hours > 0:
|
||||||
|
time_difference_string += f"{hours}小时"
|
||||||
|
if minutes > 0:
|
||||||
|
time_difference_string += f"{minutes}分钟"
|
||||||
|
|
||||||
|
return time_difference_string
|
||||||
|
Loading…
x
Reference in New Issue
Block a user