79 lines
2.4 KiB
Python

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