baodan/api/insurance/stats/routes.py
2026-07-12 14:17:18 +08:00

75 lines
2.2 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""统计报表路由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)