79 lines
2.4 KiB
Python
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")
|