2026-07-02 23:13:23 +08:00
|
|
|
|
"""统计报表路由(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 消耗统计(旧接口,保持兼容)。"""
|
2026-07-02 23:13:23 +08:00
|
|
|
|
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)
|