mirror of
https://github.com/EstrellaXD/Auto_Bangumi.git
synced 2026-02-14 07:46:05 +08:00
90 lines
2.2 KiB
Python
90 lines
2.2 KiB
Python
import logging
|
|
import os
|
|
import signal
|
|
|
|
from fastapi import APIRouter, Depends, HTTPException, status
|
|
|
|
from module.core import Program
|
|
from module.security.api import get_current_user, UNAUTHORIZED
|
|
|
|
logger = logging.getLogger(__name__)
|
|
program = Program()
|
|
router = APIRouter(tags=["program"])
|
|
|
|
|
|
@router.on_event("startup")
|
|
async def startup():
|
|
program.startup()
|
|
|
|
|
|
@router.on_event("shutdown")
|
|
async def shutdown():
|
|
program.stop()
|
|
|
|
|
|
@router.get("/restart")
|
|
async def restart(current_user=Depends(get_current_user)):
|
|
if not current_user:
|
|
raise UNAUTHORIZED
|
|
try:
|
|
program.restart()
|
|
return {"status": "ok"}
|
|
except Exception as e:
|
|
logger.debug(e)
|
|
logger.warning("Failed to restart program")
|
|
raise HTTPException(status_code=500, detail="Failed to restart program")
|
|
|
|
|
|
@router.get("/start")
|
|
async def start(current_user=Depends(get_current_user)):
|
|
if not current_user:
|
|
raise UNAUTHORIZED
|
|
try:
|
|
return program.start()
|
|
except Exception as e:
|
|
logger.debug(e)
|
|
logger.warning("Failed to start program")
|
|
raise HTTPException(status_code=500, detail="Failed to start program")
|
|
|
|
|
|
@router.get("/stop")
|
|
async def stop(current_user=Depends(get_current_user)):
|
|
if not current_user:
|
|
raise UNAUTHORIZED
|
|
return program.stop()
|
|
|
|
|
|
@router.get("/status")
|
|
async def program_status(current_user=Depends(get_current_user)):
|
|
if not current_user:
|
|
raise UNAUTHORIZED
|
|
if not program.is_running:
|
|
return {"status": "stop"}
|
|
else:
|
|
return {"status": "running"}
|
|
|
|
|
|
@router.get("/shutdown")
|
|
async def shutdown_program(current_user=Depends(get_current_user)):
|
|
if not current_user:
|
|
raise UNAUTHORIZED
|
|
program.stop()
|
|
logger.info("Shutting down program...")
|
|
os.kill(os.getpid(), signal.SIGINT)
|
|
return {"status": "ok"}
|
|
|
|
|
|
# Check status
|
|
@router.get("/check/downloader", tags=["check"])
|
|
async def check_downloader_status(current_user=Depends(get_current_user)):
|
|
if not current_user:
|
|
raise UNAUTHORIZED
|
|
return program.check_downloader()
|
|
|
|
|
|
@router.get("/check/rss", tags=["check"])
|
|
async def check_rss_status(current_user=Depends(get_current_user)):
|
|
if not current_user:
|
|
raise UNAUTHORIZED
|
|
return program.check_analyser()
|