diff --git a/api/api_v1/endpoints/data_auth.py b/api/api_v1/endpoints/data_auth.py index 896500d..62f1e4b 100644 --- a/api/api_v1/endpoints/data_auth.py +++ b/api/api_v1/endpoints/data_auth.py @@ -15,6 +15,7 @@ from db import get_database from api import deps from db.ckdb import CKDrive, get_ck_db from db.redisdb import get_redis_pool, RedisDrive + # from utils import casbin_enforcer router = APIRouter() @@ -95,9 +96,6 @@ async def data_authority(request: Request, return schemas.Msg(code=0, msg='ok', data=data) - - - @router.get("/my_event") async def my_event(request: Request, game: str, @@ -114,12 +112,11 @@ async def my_event(request: Request, my_data_auth = await ck.distinct(game, 'event_view', '#event_name') - # - # else: - # # 设置了数据权限 - # my_data_auth = await crud.data_auth.get(db, ObjectId(data_auth_id)) - # my_data_auth = my_data_auth['data'] - + # + # else: + # # 设置了数据权限 + # my_data_auth = await crud.data_auth.get(db, ObjectId(data_auth_id)) + # my_data_auth = my_data_auth['data'] event_show_name = await crud.event_mana.get_all_show_name(db, game) event_list.append({'id': 'event', 'title': '全部事件', 'category': []}) @@ -259,26 +256,20 @@ async def load_filter_props(request: Request, current_user: schemas.UserDB = Depends(deps.get_current_user) ) -> schemas.Msg: """事件属性 过滤条件""" - key = f'{game}_event_{data_in.event_name}' - event_prop_set = await rdb.smembers(key) - event_prop_list = sorted(event_prop_set) - key = f'{game}_user' - user_prop_dict = await rdb.get(key) - user_prop_dict = json.loads(user_prop_dict) - user_prop_list = sorted(user_prop_dict.keys()) + event_columns = await ck.get_columns(game, 'event') + user_columns = await ck.get_columns(game, 'user') + - all_filed = await rdb.get(f'{game}_event') - all_filed = json.loads(all_filed) data_attr = await crud.data_attr.find_many(db, {'game': game, 'cat': 'event'}) data_attr = {item['name']: item for item in data_attr} event_props = [] - for item in event_prop_list: - data_type = settings.CK_TYPE_DICT.get(all_filed.get(item)) - title = data_attr.get(item, {}).get('show_name') or item + for item in event_columns: + data_type = settings.CK_TYPE_DICT.get(item['type']) + title = data_attr.get(item['name'], {}).get('show_name') or item['name'] event_prop = { - 'id': item, + 'id': item['name'], 'data_type': data_type, 'title': title, 'category': settings.CK_FILTER.get(data_type) or [] @@ -288,11 +279,11 @@ async def load_filter_props(request: Request, data_attr = await crud.data_attr.find_many(db, {'game': game, 'cat': 'user'}) data_attr = {item['name']: item for item in data_attr} user_props = [] - for item in user_prop_list: - data_type = settings.CK_TYPE_DICT.get(user_prop_dict.get(item)) - title = data_attr.get(item, {}).get('show_name') or item + for item in user_columns: + data_type = settings.CK_TYPE_DICT.get(item['type']) + title = data_attr.get(item['name'], {}).get('show_name') or item['name'] user_prop = { - 'id': item, + 'id': item['name'], 'data_type': data_type, 'title': title, 'category': settings.CK_FILTER.get(data_type) or [] diff --git a/core/config.py b/core/config.py index 98d61c8..d08cdc3 100644 --- a/core/config.py +++ b/core/config.py @@ -272,7 +272,7 @@ class Settings(BaseSettings): 'PT15M': lambda col, zone: func.toStartOfFifteenMinutes(func.addHours(col, zone)).label('date'), 'PT1H': lambda col, zone: func.toStartOfHour(func.addHours(col, zone)).label('date'), 'P1D': lambda col, zone: func.toStartOfDay(func.addHours(col, zone)).label('date'), - 'P1W': lambda col, zone: func.toMonday(func.addHours(col, zone)).label('date'), + 'P1W': lambda col, zone: func.toStartOfWeek(func.addHours(col, zone)).label('date'), 'P1M': lambda col, zone: func.toStartOfMonth(func.addHours(col, zone)).label('date'), } diff --git a/db/ckdb.py b/db/ckdb.py index 734bae3..adcb5c3 100644 --- a/db/ckdb.py +++ b/db/ckdb.py @@ -67,6 +67,11 @@ class CKDrive: df = await self.query_dataframe(sql) return df.set_index('event_name').T.to_dict() + async def get_columns(self, db: str, tb: str): + sql = f"select name,type from system.columns where database='{db}' and table='{tb}'" + df = await self.query_dataframe(sql) + return df.T.to_dict().values() + ckdb = CKDrive() diff --git a/models/behavior_analysis.py b/models/behavior_analysis.py index eb8e0cf..7fc20a9 100644 --- a/models/behavior_analysis.py +++ b/models/behavior_analysis.py @@ -106,7 +106,13 @@ class BehaviorAnalysis: report = await crud.report.get(db, id=self.data_in.report_id) self.event_view = report['query']['eventView'] self.events = report['query']['events'] - e_days, s_days = self.event_view['recentDay'].split('-') + try: + e_days = self.event_view['e_days'] + s_days = self.event_view['s_days'] + except: + # 兼容以前的 + e_days, s_days = self.event_view['recentDay'].split('-') + self.event_view['endTime'] = arrow.get().shift(days=-int(e_days) + 1).strftime('%Y-%m-%d 23:59:59') self.event_view['startTime'] = arrow.get().shift(days=-int(s_days)).strftime('%Y-%m-%d 00:00:00') @@ -141,6 +147,9 @@ class BehaviorAnalysis: end_date: str = self.event_view.get('endTime') date_range = pd.date_range(start_date, end_date, freq=settings.PROPHET_TIME_GRAIN_MAP[self.time_particle], tz='UTC').tolist() + if self.time_particle in ('P1M','P1W'): + date_range = [item.date() for item in date_range] + return start_date, end_date, date_range @@ -291,7 +300,7 @@ class BehaviorAnalysis: event_name = event['event_name'] select_exprs += self.groupby - if event_name!='*': + if event_name != '*': base_where.append(event_name_col == event_name) analysis = event['analysis']