75 lines
2.2 KiB
Python
75 lines
2.2 KiB
Python
"""统计报表路由(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():
|
||
"""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)
|
||
|
||
|
||
@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)
|