获取事件模型拆分,api日志

This commit is contained in:
wuaho 2021-06-03 09:35:19 +08:00
parent 8f565aa4b2
commit 2ea13a340b
13 changed files with 126 additions and 152 deletions

View File

@ -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')

View File

@ -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)

View 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)

View File

@ -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
View 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')

View File

@ -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')

View File

@ -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()

View File

@ -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())

View File

@ -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'},
]},
]

View File

@ -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
View File

@ -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

View File

@ -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
View File

@ -0,0 +1,8 @@
from pydantic import BaseModel
class EventMateEdit(BaseModel):
event_name: str
show_name: str
is_show: bool
desc: str