baodan/api/insurance/stats/routes.py

75 lines
2.2 KiB
Python
Raw Normal View History

"""统计报表路由A7 + A8
GET /overview 使用概览
GET /trend 趋势数据
GET /kb-health 知识库健康度
GET /token-cost Token 消耗统计
"""
from flask import Blueprint, request, jsonify
from insurance.stats.service import StatsService
from insurance.middleware.auth_middleware import admin_required
stats_bp = Blueprint("stats", __name__)
stats_service = StatsService()
@stats_bp.route("/overview", methods=["GET"])
@admin_required
def overview():
"""使用概览数据。"""
result = stats_service.get_overview()
return jsonify(result)
@stats_bp.route("/trend", methods=["GET"])
@admin_required
def trend():
"""趋势数据。"""
metric = request.args.get("metric", "chat_count")
start_date = request.args.get("start_date", "")
end_date = request.args.get("end_date", "")
granularity = request.args.get("granularity", "day")
result = stats_service.get_trend(metric, start_date, end_date, granularity)
return jsonify(result)
@stats_bp.route("/kb-health", methods=["GET"])
@admin_required
def kb_health():
"""知识库健康度。"""
days = request.args.get("days", 7, type=int)
result = stats_service.get_kb_health(days)
return jsonify(result)
@stats_bp.route("/token-cost", methods=["GET"])
@admin_required
def token_cost():
2026-07-12 14:17:18 +08:00
"""Token 消耗统计(旧接口,保持兼容)。"""
start_date = request.args.get("start_date", "")
end_date = request.args.get("end_date", "")
group_by = request.args.get("group_by", "model")
result = stats_service.get_token_cost(start_date, end_date, group_by)
return jsonify(result)
2026-07-12 14:17:18 +08:00
@stats_bp.route("/token-usage", methods=["GET"])
@admin_required
def token_usage():
"""Token 使用统计:总量 + 按模型 + 按用户 + 日趋势。"""
params = {
"start_date": request.args.get("start_date", ""),
"end_date": request.args.get("end_date", ""),
"models": request.args.getlist("models"),
}
result = stats_service.get_token_usage(params)
return jsonify(result)
@stats_bp.route("/token-usage/models", methods=["GET"])
@admin_required
def token_usage_models():
"""获取可用的模型列表。"""
result = stats_service.get_token_models()
return jsonify(result)