获取事件模型拆分,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 data_mana
|
||||||
from .endpoints import query
|
from .endpoints import query
|
||||||
from .endpoints import data_auth
|
from .endpoints import data_auth
|
||||||
|
from .endpoints import event_mana
|
||||||
|
|
||||||
api_router = APIRouter()
|
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_auth.router, tags=["数据权限"], prefix='/data_auth')
|
||||||
|
|
||||||
api_router.include_router(data_mana.router, tags=["数据管理"], prefix='/data_mana')
|
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')
|
api_router.include_router(query.router, tags=["ck"], prefix='/ck')
|
||||||
|
@ -17,7 +17,7 @@ router = APIRouter()
|
|||||||
__all__ = 'router',
|
__all__ = 'router',
|
||||||
|
|
||||||
|
|
||||||
@router.get("/event_attr_list")
|
@router.get("/attr_list")
|
||||||
async def read_data_attr(
|
async def read_data_attr(
|
||||||
request: Request,
|
request: Request,
|
||||||
game: str,
|
game: str,
|
||||||
@ -47,7 +47,7 @@ async def read_data_attr(
|
|||||||
return schemas.Msg(code=0, msg='ok', data=res)
|
return schemas.Msg(code=0, msg='ok', data=res)
|
||||||
|
|
||||||
|
|
||||||
@router.post("/event_attr_edit")
|
@router.post("/attr_edit")
|
||||||
async def edit_data_attr(
|
async def edit_data_attr(
|
||||||
request: Request,
|
request: Request,
|
||||||
game: str,
|
game: str,
|
||||||
@ -61,38 +61,3 @@ async def edit_data_attr(
|
|||||||
return schemas.Msg(code=0, msg='ok', data=data_in)
|
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_auth import data_auth
|
||||||
from .crud_data_attr import data_attr
|
from .crud_data_attr import data_attr
|
||||||
from .crud_api_log import api_log
|
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
|
from aioch import Client
|
||||||
import pandas as pd
|
import pandas as pd
|
||||||
|
|
||||||
@ -35,6 +37,15 @@ class CKDrive:
|
|||||||
res = await self.query_dataframe(sql)
|
res = await self.query_dataframe(sql)
|
||||||
return res['v'].to_list()
|
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()
|
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)
|
await crud.data_attr.create_index(db)
|
||||||
|
|
||||||
|
|
||||||
|
async def event_mana():
|
||||||
|
await crud.event_mana.create_index(db)
|
||||||
|
|
||||||
|
|
||||||
async def authority_init():
|
async def authority_init():
|
||||||
await crud.authority.create_index(db)
|
await crud.authority.create_index(db)
|
||||||
await crud.authority.create(db, 'p', '*', '*', '/docs', '*')
|
await crud.authority.create(db, 'p', '*', '*', '/docs', '*')
|
||||||
@ -66,6 +70,8 @@ async def main():
|
|||||||
await report_index()
|
await report_index()
|
||||||
await authority_init()
|
await authority_init()
|
||||||
await data_attr_index()
|
await data_attr_index()
|
||||||
|
await event_mana()
|
||||||
|
|
||||||
|
|
||||||
loop = asyncio.get_event_loop()
|
loop = asyncio.get_event_loop()
|
||||||
loop.run_until_complete(main())
|
loop.run_until_complete(main())
|
||||||
|
19
main.py
19
main.py
@ -80,14 +80,14 @@ app.add_middleware(
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
# @app.exception_handler(RequestValidationError)
|
@app.exception_handler(RequestValidationError)
|
||||||
# async def validation_exception_handler(request, exc):
|
async def validation_exception_handler(request, exc):
|
||||||
# return Response(schemas.Msg(code='-4', msg='服务器错误', data=str(exc)), status_code=200)
|
return Response(schemas.Msg(code='-4', msg='服务器错误', data=str(exc)), status_code=400)
|
||||||
|
|
||||||
|
|
||||||
# @app.exception_handler(Exception)
|
@app.exception_handler(Exception)
|
||||||
# async def http_exception_handler(request, exc):
|
async def http_exception_handler(request, exc):
|
||||||
# return Response(schemas.Msg(code='-3', msg='服务器错误'), status_code=200)
|
return Response(schemas.Msg(code='-3', msg='服务器错误'), status_code=500)
|
||||||
|
|
||||||
|
|
||||||
@app.middleware("http")
|
@app.middleware("http")
|
||||||
@ -96,10 +96,15 @@ async def add_process_time_header(request: Request, call_next):
|
|||||||
response = await call_next(request)
|
response = await call_next(request)
|
||||||
process_time = int(time.time() * 1000) - start_time
|
process_time = int(time.time() * 1000) - start_time
|
||||||
response.headers["X-Process-Time"] = str(process_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(
|
await crud.api_log.insert_log(get_database(), schemas.ApiLogInsert(
|
||||||
api=str(request.url),
|
api=str(request.url),
|
||||||
ms=process_time,
|
ms=process_time,
|
||||||
user_id=request.user.id
|
user_id=user_id
|
||||||
))
|
))
|
||||||
return response
|
return response
|
||||||
|
|
||||||
|
@ -11,3 +11,4 @@ from .data_auth import *
|
|||||||
from .data_attr import *
|
from .data_attr import *
|
||||||
from .sql import *
|
from .sql import *
|
||||||
from .api_log 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