Skip to content

Commit f0e7304

Browse files
committed
feat:新增后台dashboard接口
1 parent 9ba7d37 commit f0e7304

File tree

3 files changed

+35
-3
lines changed

3 files changed

+35
-3
lines changed

apps/admin/dependencies.py

+1-3
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,14 @@
22
# @Author : Lan
33
# @File : depends.py
44
# @Software: PyCharm
5-
from typing import Union
6-
75
from fastapi import Header, HTTPException
86
from fastapi.requests import Request
97
from core.settings import settings
108
from apps.admin.services import FileService, ConfigService, LocalFileService
119

1210

1311
async def admin_required(authorization: str = Header(default=None), request: Request = None):
14-
is_admin = authorization == str(settings.admin_token)
12+
is_admin = authorization.split(' ')[-1] if authorization else '' == str(settings.admin_token)
1513
if request.url.path.startswith('/share/'):
1614
if not settings.openUpload and not is_admin:
1715
raise HTTPException(status_code=403, detail='本站未开启游客上传,如需上传请先登录后台')

apps/admin/views.py

+32
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,14 @@
22
# @Author : Lan
33
# @File : views.py
44
# @Software: PyCharm
5+
import datetime
56

67
from fastapi import APIRouter, Depends
78
from apps.admin.services import FileService, ConfigService, LocalFileService
89
from apps.admin.dependencies import admin_required, get_file_service, get_config_service, get_local_file_service
910
from apps.admin.schemas import IDData, ShareItem, DeleteItem
1011
from core.response import APIResponse
12+
from apps.base.models import FileCodes, KeyValue
1113

1214
admin_api = APIRouter(prefix='/admin', tags=['管理'])
1315

@@ -17,6 +19,36 @@ async def login(admin: bool = Depends(admin_required)):
1719
return APIResponse()
1820

1921

22+
@admin_api.get('/dashboard')
23+
async def dashboard(admin: bool = Depends(admin_required)):
24+
all_codes = await FileCodes.all()
25+
all_size = str(sum([code.size for code in all_codes]))
26+
sys_start = await KeyValue.filter(key='sys_start').first()
27+
# 获取当前日期时间
28+
now = datetime.datetime.now()
29+
today_start = now.replace(hour=0, minute=0, second=0, microsecond=0)
30+
yesterday_start = today_start - datetime.timedelta(days=1)
31+
yesterday_end = today_start - datetime.timedelta(microseconds=1)
32+
# 统计昨天一整天的记录数(从昨天0点到23:59:59)
33+
yesterday_codes = FileCodes.filter(
34+
created_at__gte=yesterday_start,
35+
created_at__lte=yesterday_end
36+
)
37+
# 统计今天到现在的记录数(从今天0点到现在)
38+
today_codes = FileCodes.filter(
39+
created_at__gte=today_start
40+
)
41+
return APIResponse(detail={
42+
'totalFiles': len(all_codes),
43+
'storageUsed': all_size,
44+
'sysUptime': sys_start.value,
45+
'yesterdayCount': await yesterday_codes.count(),
46+
'yesterdaySize': str(sum([code.size for code in await yesterday_codes])),
47+
'todayCount': await today_codes.count(),
48+
'todaySize': str(sum([code.size for code in await today_codes])),
49+
})
50+
51+
2052
@admin_api.delete('/file/delete')
2153
async def file_delete(
2254
data: IDData,

main.py

+2
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
# @File : main.py
44
# @Software: PyCharm
55
import asyncio
6+
import time
67

78
from fastapi import FastAPI
89

@@ -55,6 +56,7 @@ async def lifespan(app: FastAPI):
5556

5657
async def load_config():
5758
user_config, _ = await KeyValue.get_or_create(key='settings', defaults={'value': DEFAULT_CONFIG})
59+
await KeyValue.update_or_create(key='sys_start', defaults={'value': int(time.time() * 1000)})
5860
settings.user_config = user_config.value
5961
# 更新 ip_limit 配置
6062
ip_limit['error'].minutes = settings.errorMinute

0 commit comments

Comments
 (0)