fix(dashboard): 修复性能指标 RPM/TPM 显示为0的问题
- 修复 Admin Dashboard Handler 遗漏返回 rpm/tpm 字段 - 将性能统计时间窗口从1分钟改为5分钟平均值,数据更稳定
This commit is contained in:
@@ -107,6 +107,10 @@ func (h *DashboardHandler) GetStats(c *gin.Context) {
|
||||
// 系统运行统计
|
||||
"average_duration_ms": stats.AverageDurationMs,
|
||||
"uptime": uptime,
|
||||
|
||||
// 性能指标
|
||||
"rpm": stats.Rpm,
|
||||
"tpm": stats.Tpm,
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
@@ -44,8 +44,8 @@ type DashboardStats struct {
|
||||
AverageDurationMs float64 `json:"average_duration_ms"` // 平均响应时间
|
||||
|
||||
// 性能指标
|
||||
Rpm int64 `json:"rpm"` // 最近1分钟的请求数
|
||||
Tpm int64 `json:"tpm"` // 最近1分钟的Token数
|
||||
Rpm int64 `json:"rpm"` // 近5分钟平均每分钟请求数
|
||||
Tpm int64 `json:"tpm"` // 近5分钟平均每分钟Token数
|
||||
}
|
||||
|
||||
// TrendDataPoint represents a single point in trend data
|
||||
@@ -121,8 +121,8 @@ type UserDashboardStats struct {
|
||||
AverageDurationMs float64 `json:"average_duration_ms"`
|
||||
|
||||
// 性能指标
|
||||
Rpm int64 `json:"rpm"` // 最近1分钟的请求数
|
||||
Tpm int64 `json:"tpm"` // 最近1分钟的Token数
|
||||
Rpm int64 `json:"rpm"` // 近5分钟平均每分钟请求数
|
||||
Tpm int64 `json:"tpm"` // 近5分钟平均每分钟Token数
|
||||
}
|
||||
|
||||
// UsageLogFilters represents filters for usage log queries
|
||||
|
||||
@@ -19,9 +19,9 @@ func NewUsageLogRepository(db *gorm.DB) *UsageLogRepository {
|
||||
return &UsageLogRepository{db: db}
|
||||
}
|
||||
|
||||
// getPerformanceStats 获取 RPM 和 TPM(可选按用户过滤)
|
||||
// getPerformanceStats 获取 RPM 和 TPM(近5分钟平均值,可选按用户过滤)
|
||||
func (r *UsageLogRepository) getPerformanceStats(ctx context.Context, userID int64) (rpm, tpm int64) {
|
||||
oneMinuteAgo := time.Now().Add(-1 * time.Minute)
|
||||
fiveMinutesAgo := time.Now().Add(-5 * time.Minute)
|
||||
var perfStats struct {
|
||||
RequestCount int64 `gorm:"column:request_count"`
|
||||
TokenCount int64 `gorm:"column:token_count"`
|
||||
@@ -32,14 +32,15 @@ func (r *UsageLogRepository) getPerformanceStats(ctx context.Context, userID int
|
||||
COUNT(*) as request_count,
|
||||
COALESCE(SUM(input_tokens + output_tokens), 0) as token_count
|
||||
`).
|
||||
Where("created_at >= ?", oneMinuteAgo)
|
||||
Where("created_at >= ?", fiveMinutesAgo)
|
||||
|
||||
if userID > 0 {
|
||||
db = db.Where("user_id = ?", userID)
|
||||
}
|
||||
|
||||
db.Scan(&perfStats)
|
||||
return perfStats.RequestCount, perfStats.TokenCount
|
||||
// 返回5分钟平均值
|
||||
return perfStats.RequestCount / 5, perfStats.TokenCount / 5
|
||||
}
|
||||
|
||||
func (r *UsageLogRepository) Create(ctx context.Context, log *model.UsageLog) error {
|
||||
|
||||
@@ -35,8 +35,8 @@ export interface UserDashboardStats {
|
||||
today_cost: number; // 今日标准计费
|
||||
today_actual_cost: number; // 今日实际扣除
|
||||
average_duration_ms: number;
|
||||
rpm: number; // 最近1分钟的请求数
|
||||
tpm: number; // 最近1分钟的Token数
|
||||
rpm: number; // 近5分钟平均每分钟请求数
|
||||
tpm: number; // 近5分钟平均每分钟Token数
|
||||
}
|
||||
|
||||
export interface TrendParams {
|
||||
|
||||
@@ -520,8 +520,8 @@ export interface DashboardStats {
|
||||
uptime: number; // 系统运行时间(秒)
|
||||
|
||||
// 性能指标
|
||||
rpm: number; // 最近1分钟的请求数
|
||||
tpm: number; // 最近1分钟的Token数
|
||||
rpm: number; // 近5分钟平均每分钟请求数
|
||||
tpm: number; // 近5分钟平均每分钟Token数
|
||||
}
|
||||
|
||||
export interface UsageStatsResponse {
|
||||
|
||||
Reference in New Issue
Block a user