获取事件模型拆分,api日志
This commit is contained in:
parent
8f565aa4b2
commit
2ea13a340b
@ -9,6 +9,7 @@ from .endpoints import authority
|
||||
from .endpoints import data_mana
|
||||
from .endpoints import query
|
||||
from .endpoints import data_auth
|
||||
from .endpoints import event_mana
|
||||
|
||||
api_router = APIRouter()
|
||||
|
||||
@ -23,5 +24,6 @@ api_router.include_router(authority.router, tags=["权限管理接口"], prefix=
|
||||
api_router.include_router(data_auth.router, tags=["数据权限"], prefix='/data_auth')
|
||||
|
||||
api_router.include_router(data_mana.router, tags=["数据管理"], prefix='/data_mana')
|
||||
api_router.include_router(event_mana.router, tags=["数据管理"], prefix='/data_mana')
|
||||
|
||||
api_router.include_router(query.router, tags=["ck"], prefix='/ck')
|
||||
|
@ -17,7 +17,7 @@ router = APIRouter()
|
||||
__all__ = 'router',
|
||||
|
||||
|
||||
@router.get("/event_attr_list")
|
||||
@router.get("/attr_list")
|
||||
async def read_data_attr(
|
||||
request: Request,
|
||||
game: str,
|
||||
@ -47,7 +47,7 @@ async def read_data_attr(
|
||||
return schemas.Msg(code=0, msg='ok', data=res)
|
||||
|
||||
|
||||
@router.post("/event_attr_edit")
|
||||
@router.post("/attr_edit")
|
||||
async def edit_data_attr(
|
||||
request: Request,
|
||||
game: str,
|
||||
@ -61,38 +61,3 @@ async def edit_data_attr(
|
||||
return schemas.Msg(code=0, msg='ok', data=data_in)
|
||||
|
||||
|
||||
@router.get("/event_list")
|
||||
async def event_list(
|
||||
request: Request,
|
||||
game: str,
|
||||
cat: str,
|
||||
db: AsyncIOMotorDatabase = Depends(get_database),
|
||||
ckdb: CKDrive = Depends(get_ck_db),
|
||||
rdb: Redis = Depends(get_redis_pool),
|
||||
current_user: schemas.UserDB = Depends(deps.get_current_user)
|
||||
) -> schemas.Msg:
|
||||
"""事件列表"""
|
||||
|
||||
event_list = await ckdb.distinct(game, 'event', '#event_name')
|
||||
pass
|
||||
# make_event_list = await crud.event_map
|
||||
res = []
|
||||
for name in event_list():
|
||||
res.append(
|
||||
|
||||
)
|
||||
return schemas.Msg(code=0, msg='ok', data=res)
|
||||
|
||||
|
||||
@router.post("/event_edit")
|
||||
async def event_edit(
|
||||
request: Request,
|
||||
game: str,
|
||||
data_in: schemas.DataAttrEdit,
|
||||
db: AsyncIOMotorDatabase = Depends(get_database),
|
||||
rdb: Redis = Depends(get_redis_pool),
|
||||
current_user: schemas.UserDB = Depends(deps.get_current_user)
|
||||
) -> schemas.Msg:
|
||||
"""编辑事件"""
|
||||
await crud.data_attr.edit_data_attr(db, game, data_in)
|
||||
return schemas.Msg(code=0, msg='ok', data=data_in)
|
||||
|
59
api/api_v1/endpoints/event_mana.py
Normal file
59
api/api_v1/endpoints/event_mana.py
Normal file
@ -0,0 +1,59 @@
|
||||
import json
|
||||
|
||||
from aioredis import Redis
|
||||
from fastapi import APIRouter, Depends, Request
|
||||
from motor.motor_asyncio import AsyncIOMotorDatabase
|
||||
import pandas as pd
|
||||
|
||||
import crud, schemas
|
||||
|
||||
from api import deps
|
||||
from core.config import settings
|
||||
from db import get_database
|
||||
from db.ckdb import CKDrive, get_ck_db
|
||||
from db.redisdb import get_redis_pool
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
__all__ = 'router',
|
||||
|
||||
|
||||
@router.get("/event_list")
|
||||
async def event_list(
|
||||
request: Request,
|
||||
game: str,
|
||||
db: AsyncIOMotorDatabase = Depends(get_database),
|
||||
ckdb: CKDrive = Depends(get_ck_db),
|
||||
current_user: schemas.UserDB = Depends(deps.get_current_user)
|
||||
) -> schemas.Msg:
|
||||
"""事件列表"""
|
||||
event_list = await ckdb.distinct(game, 'event', '#event_name')
|
||||
event_count = await ckdb.yesterday_event_count(game)
|
||||
event_meta = await crud.event_mana.find_many(db, game=game) or {}
|
||||
if event_meta:
|
||||
event_meta = pd.DataFrame(event_meta).set_index('event_name').fillna('').T.to_dict()
|
||||
|
||||
res = []
|
||||
for name in event_list:
|
||||
res.append({
|
||||
'name': name,
|
||||
'show_name': event_meta.get(name, {}).get('show_name', ''),
|
||||
'is_show': event_meta.get(name, {}).get('is_show', True),
|
||||
'desc': event_meta.get(name, {}).get('desc', ''),
|
||||
'event_count': event_count.get(name, {}).get('v')
|
||||
}
|
||||
)
|
||||
return schemas.Msg(code=0, msg='ok', data=res)
|
||||
|
||||
|
||||
@router.post("/event_edit")
|
||||
async def event_edit(
|
||||
request: Request,
|
||||
game: str,
|
||||
data_in: schemas.EventMateEdit,
|
||||
db: AsyncIOMotorDatabase = Depends(get_database),
|
||||
current_user: schemas.UserDB = Depends(deps.get_current_user)
|
||||
) -> schemas.Msg:
|
||||
"""编辑事件"""
|
||||
await crud.event_mana.edit_event_mate(db, game, data_in)
|
||||
return schemas.Msg(code=0, msg='ok', data=data_in)
|
@ -8,3 +8,4 @@ from .crud_authority import authority
|
||||
from .crud_data_auth import data_auth
|
||||
from .crud_data_attr import data_attr
|
||||
from .crud_api_log import api_log
|
||||
from .crud_event_mana import event_mana
|
||||
|
24
crud/crud_event_mana.py
Normal file
24
crud/crud_event_mana.py
Normal file
@ -0,0 +1,24 @@
|
||||
import pymongo
|
||||
from bson import ObjectId
|
||||
from motor.motor_asyncio import AsyncIOMotorDatabase
|
||||
|
||||
import schemas
|
||||
from crud.base import CRUDBase
|
||||
from schemas import *
|
||||
|
||||
__all__ = 'event_mana',
|
||||
|
||||
|
||||
class CRUDEventMap(CRUDBase):
|
||||
|
||||
async def edit_event_mate(self, db: AsyncIOMotorDatabase, game: str, data_id: schemas.EventMateEdit):
|
||||
await self.update_one(db, {'game': game, 'event_name': data_id.show_name}, {'$set': data_id.dict()},
|
||||
upsert=True)
|
||||
|
||||
async def create_index(self, db: AsyncIOMotorDatabase):
|
||||
await db[self.coll_name].create_index(
|
||||
[('game', pymongo.DESCENDING), ('event_name', pymongo.DESCENDING)],
|
||||
unique=True)
|
||||
|
||||
|
||||
event_mana = CRUDEventMap('event_mana')
|
@ -1,24 +0,0 @@
|
||||
import pymongo
|
||||
from bson import ObjectId
|
||||
from motor.motor_asyncio import AsyncIOMotorDatabase
|
||||
|
||||
import schemas
|
||||
from crud.base import CRUDBase
|
||||
from schemas import *
|
||||
|
||||
__all__ = 'event_map',
|
||||
|
||||
|
||||
class CRUDEventMap(CRUDBase):
|
||||
|
||||
async def edit_data_attr(self, db: AsyncIOMotorDatabase, game: str, data_id: schemas.EventMapEdit):
|
||||
await self.update_one(db, {'game': game, 'cat': data_id.cat, 'name': data_id.name}, {'$set': data_id.dict()},
|
||||
upsert=True)
|
||||
|
||||
async def create_index(self, db: AsyncIOMotorDatabase):
|
||||
await db[self.coll_name].create_index(
|
||||
[('game', pymongo.DESCENDING), ('cat', pymongo.DESCENDING), ('name', pymongo.DESCENDING)],
|
||||
unique=True)
|
||||
|
||||
|
||||
event_map = CRUDEventMap('event_map')
|
11
db/ckdb.py
11
db/ckdb.py
@ -1,3 +1,5 @@
|
||||
import datetime
|
||||
|
||||
from aioch import Client
|
||||
import pandas as pd
|
||||
|
||||
@ -35,6 +37,15 @@ class CKDrive:
|
||||
res = await self.query_dataframe(sql)
|
||||
return res['v'].to_list()
|
||||
|
||||
async def yesterday_event_count(self, db: str):
|
||||
today = datetime.date.today()
|
||||
yesterday = today - datetime.timedelta(days=1)
|
||||
today_str = today.strftime('%Y-%m-%d %H:%M:%S')
|
||||
yesterday_str = yesterday.strftime('%Y-%m-%d %H:%M:%S')
|
||||
sql = f"select `#event_name` as event_name, count() as v from {db}.event where `#event_time`>='{yesterday_str}' and `#event_time`<'{today_str}' group by `#event_name`"
|
||||
df = await self.query_dataframe(sql)
|
||||
return df.set_index('event_name').T.to_dict()
|
||||
|
||||
|
||||
ckdb = CKDrive()
|
||||
|
||||
|
@ -1,71 +0,0 @@
|
||||
import crud
|
||||
import schemas
|
||||
from core.config import settings
|
||||
|
||||
# 创建一个超级用户、、
|
||||
from db import connect_to_mongo, get_database
|
||||
import asyncio
|
||||
|
||||
connect_to_mongo()
|
||||
db = get_database()
|
||||
|
||||
|
||||
async def create_superuser():
|
||||
user = await crud.user.get_by_user(db=db, name=settings.SUPERUSER_NAME)
|
||||
if not user:
|
||||
user_in = schemas.UserCreate(
|
||||
name=settings.SUPERUSER_NAME,
|
||||
email=settings.SUPERUSER_EMAIL,
|
||||
password=settings.SUPERUSER_PASSWORD,
|
||||
nickname=settings.SUPERUSER_NICKNAME,
|
||||
is_superuser=True,
|
||||
)
|
||||
await crud.user.create(db, user_in)
|
||||
await crud.user.create_index(db)
|
||||
|
||||
|
||||
async def project_index():
|
||||
await crud.project.create_index(db)
|
||||
|
||||
|
||||
async def folder_index():
|
||||
await crud.folder.create_index(db)
|
||||
|
||||
|
||||
async def space_index():
|
||||
await crud.space.create_index(db)
|
||||
|
||||
|
||||
async def dashboard_index():
|
||||
await crud.dashboard.create_index(db)
|
||||
|
||||
|
||||
async def report_index():
|
||||
await crud.report.create_index(db)
|
||||
|
||||
|
||||
async def data_attr_index():
|
||||
await crud.data_attr.create_index(db)
|
||||
|
||||
|
||||
async def authority_init():
|
||||
await crud.authority.create_index(db)
|
||||
await crud.authority.create(db, 'p', '*', '*', '/docs', '*')
|
||||
await crud.authority.create(db, 'p', '*', '*', '/openapi.json', '*')
|
||||
await crud.authority.create(db, 'p', '*', '*', '/api/v1/user/login', '*')
|
||||
await crud.authority.create(db, 'p', '*', '*', '/docs', '*')
|
||||
await crud.authority.create(db, 'p', '*', '*', '/api/v1/project/', '*')
|
||||
|
||||
|
||||
async def main():
|
||||
await create_superuser()
|
||||
await project_index()
|
||||
await folder_index()
|
||||
await space_index()
|
||||
await dashboard_index()
|
||||
await report_index()
|
||||
await authority_init()
|
||||
await data_attr_index()
|
||||
|
||||
loop = asyncio.get_event_loop()
|
||||
loop.run_until_complete(main())
|
@ -1,13 +0,0 @@
|
||||
data = [
|
||||
{'title': '用户接口', 'powerarr': [
|
||||
{'title': '获取所有用户', 'path': '/api/v1/all_user'},
|
||||
]
|
||||
},
|
||||
{'title': '项目接口', 'powerarr': [
|
||||
{'title': '创建项目', 'path': '/api/v1/project/create'},
|
||||
]
|
||||
},
|
||||
{'title': '文件夹接口', 'powerarr': [
|
||||
{'title': '创建项目', 'path': '/api/v1/project/create'},
|
||||
]},
|
||||
]
|
@ -48,6 +48,10 @@ async def data_attr_index():
|
||||
await crud.data_attr.create_index(db)
|
||||
|
||||
|
||||
async def event_mana():
|
||||
await crud.event_mana.create_index(db)
|
||||
|
||||
|
||||
async def authority_init():
|
||||
await crud.authority.create_index(db)
|
||||
await crud.authority.create(db, 'p', '*', '*', '/docs', '*')
|
||||
@ -66,6 +70,8 @@ async def main():
|
||||
await report_index()
|
||||
await authority_init()
|
||||
await data_attr_index()
|
||||
await event_mana()
|
||||
|
||||
|
||||
loop = asyncio.get_event_loop()
|
||||
loop.run_until_complete(main())
|
||||
|
19
main.py
19
main.py
@ -80,14 +80,14 @@ app.add_middleware(
|
||||
)
|
||||
|
||||
|
||||
# @app.exception_handler(RequestValidationError)
|
||||
# async def validation_exception_handler(request, exc):
|
||||
# return Response(schemas.Msg(code='-4', msg='服务器错误', data=str(exc)), status_code=200)
|
||||
@app.exception_handler(RequestValidationError)
|
||||
async def validation_exception_handler(request, exc):
|
||||
return Response(schemas.Msg(code='-4', msg='服务器错误', data=str(exc)), status_code=400)
|
||||
|
||||
|
||||
# @app.exception_handler(Exception)
|
||||
# async def http_exception_handler(request, exc):
|
||||
# return Response(schemas.Msg(code='-3', msg='服务器错误'), status_code=200)
|
||||
@app.exception_handler(Exception)
|
||||
async def http_exception_handler(request, exc):
|
||||
return Response(schemas.Msg(code='-3', msg='服务器错误'), status_code=500)
|
||||
|
||||
|
||||
@app.middleware("http")
|
||||
@ -96,10 +96,15 @@ async def add_process_time_header(request: Request, call_next):
|
||||
response = await call_next(request)
|
||||
process_time = int(time.time() * 1000) - start_time
|
||||
response.headers["X-Process-Time"] = str(process_time)
|
||||
user_id = 'anonymous'
|
||||
try:
|
||||
user_id = request.user.id
|
||||
except:
|
||||
pass
|
||||
await crud.api_log.insert_log(get_database(), schemas.ApiLogInsert(
|
||||
api=str(request.url),
|
||||
ms=process_time,
|
||||
user_id=request.user.id
|
||||
user_id=user_id
|
||||
))
|
||||
return response
|
||||
|
||||
|
@ -11,3 +11,4 @@ from .data_auth import *
|
||||
from .data_attr import *
|
||||
from .sql import *
|
||||
from .api_log import *
|
||||
from .event_mana import *
|
||||
|
8
schemas/event_mana.py
Normal file
8
schemas/event_mana.py
Normal file
@ -0,0 +1,8 @@
|
||||
from pydantic import BaseModel
|
||||
|
||||
|
||||
class EventMateEdit(BaseModel):
|
||||
event_name: str
|
||||
show_name: str
|
||||
is_show: bool
|
||||
desc: str
|
Loading…
Reference in New Issue
Block a user