-
Notifications
You must be signed in to change notification settings - Fork 432
Expand file tree
/
Copy pathprogram.py
More file actions
106 lines (88 loc) · 2.69 KB
/
program.py
File metadata and controls
106 lines (88 loc) · 2.69 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
import logging
import os
import signal
import sys
from fastapi import APIRouter, Depends, HTTPException
from fastapi.responses import JSONResponse
from module.conf import VERSION
from module.core import Program
from module.models import APIResponse
from module.security.api import UNAUTHORIZED, get_current_user
from .response import u_response
logger = logging.getLogger(__name__)
program = Program()
router = APIRouter(tags=["program"])
# Note: Lifespan events (startup/shutdown) are now handled in main.py via lifespan context manager
@router.get(
"/restart", response_model=APIResponse, dependencies=[Depends(get_current_user)]
)
async def restart():
try:
resp = await program.restart()
return u_response(resp)
except Exception as e:
logger.debug(e)
logger.warning("Failed to restart program")
raise HTTPException(
status_code=500,
detail={
"msg_en": "Failed to restart program.",
"msg_zh": "重启程序失败。",
},
)
@router.get(
"/start", response_model=APIResponse, dependencies=[Depends(get_current_user)]
)
async def start():
try:
resp = await program.start()
return u_response(resp)
except Exception as e:
logger.debug(e)
logger.warning("Failed to start program")
raise HTTPException(
status_code=500,
detail={
"msg_en": "Failed to start program.",
"msg_zh": "启动程序失败。",
},
)
@router.get(
"/stop", response_model=APIResponse, dependencies=[Depends(get_current_user)]
)
async def stop():
resp = await program.stop()
return u_response(resp)
@router.get("/status", response_model=dict, dependencies=[Depends(get_current_user)])
async def program_status():
is_linux = sys.platform == "linux"
base = {
"status": program.is_running,
"version": VERSION,
"first_run": program.first_run,
"platform": "linux" if is_linux else "windows",
}
return base
@router.get(
"/shutdown", response_model=APIResponse, dependencies=[Depends(get_current_user)]
)
async def shutdown_program():
await program.stop()
logger.info("Shutting down program...")
os.kill(os.getpid(), signal.SIGINT)
return JSONResponse(
status_code=200,
content={
"msg_en": "Shutdown program successfully.",
"msg_zh": "关闭程序成功。",
},
)
# Check status
@router.get(
"/check/downloader",
tags=["check"],
response_model=bool,
dependencies=[Depends(get_current_user)],
)
async def check_downloader_status():
return await program.check_downloader()