"""data_mart 模块初始化""" from ahserver.serverenv import ServerEnv from appPublic.jsonConfig import getConfig from appPublic.log import debug, exception from sqlor.dbpools import DBPools from .etl import sync_call_fact, aggregate_daily_perf, aggregate_provider_cost, ensure_tables MODULE_NAME = "data_mart" def get_dbname(): env = ServerEnv() return env.get_module_dbname(MODULE_NAME) async def api_model_perf(sor, params_kw=None): """模型性能统计 API — POST /data_mart/api/model_perf.dspy""" model = params_kw.get('model') if params_kw else None stat_date = params_kw.get('date') if params_kw else None sql = "SELECT * FROM dm_model_perf_daily WHERE 1=1" ns = {} if stat_date: sql += " AND stat_date=${stat_date}$" ns['stat_date'] = stat_date if model: sql += " AND model=${model}$" ns['model'] = model sql += " ORDER BY total_calls DESC LIMIT 50" rows = await sor.sqlExe(sql, ns) return [dict(r) for r in rows] async def api_provider_roi(sor, params_kw=None): """供应商性价比 API — POST /data_mart/api/provider_roi.dspy""" model = params_kw.get('model') if params_kw else None stat_date = params_kw.get('date') if params_kw else None sql = "SELECT * FROM dm_provider_cost_daily WHERE 1=1" ns = {} if stat_date: sql += " AND stat_date=${stat_date}$" ns['stat_date'] = stat_date if model: sql += " AND model=${model}$" ns['model'] = model sql += " ORDER BY total_amount DESC LIMIT 50" rows = await sor.sqlExe(sql, ns) return [dict(r) for r in rows] async def api_call_detail(sor, params_kw=None): """调用明细 API — POST /data_mart/api/call_detail.dspy""" stat_date = (params_kw or {}).get('date') userorgid = (params_kw or {}).get('userorgid') sql = "SELECT * FROM dm_model_call_fact WHERE 1=1" ns = {} if stat_date: sql += " AND call_date=${stat_date}$" ns['stat_date'] = stat_date if userorgid: sql += " AND userorgid=${userorgid}$" ns['userorgid'] = userorgid sql += " ORDER BY call_time DESC LIMIT 200" rows = await sor.sqlExe(sql, ns) return [dict(r) for r in rows] def load_data_mart(): env = ServerEnv() env.api_model_perf = api_model_perf env.api_provider_roi = api_provider_roi env.api_call_detail = api_call_detail debug("[data_mart] registered API endpoints")