diff --git a/backend/internal/handler/admin/dashboard_handler.go b/backend/internal/handler/admin/dashboard_handler.go index 4ccda37b..37dbe36d 100644 --- a/backend/internal/handler/admin/dashboard_handler.go +++ b/backend/internal/handler/admin/dashboard_handler.go @@ -107,6 +107,10 @@ func (h *DashboardHandler) GetStats(c *gin.Context) { // 系统运行统计 "average_duration_ms": stats.AverageDurationMs, "uptime": uptime, + + // 性能指标 + "rpm": stats.Rpm, + "tpm": stats.Tpm, }) } diff --git a/backend/internal/pkg/usagestats/usage_log_types.go b/backend/internal/pkg/usagestats/usage_log_types.go index eaef0ab1..fb3ac2fc 100644 --- a/backend/internal/pkg/usagestats/usage_log_types.go +++ b/backend/internal/pkg/usagestats/usage_log_types.go @@ -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 diff --git a/backend/internal/repository/usage_log_repo.go b/backend/internal/repository/usage_log_repo.go index 8997c6d0..5c753eea 100644 --- a/backend/internal/repository/usage_log_repo.go +++ b/backend/internal/repository/usage_log_repo.go @@ -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 { diff --git a/frontend/src/api/usage.ts b/frontend/src/api/usage.ts index 84f58f61..409c3565 100644 --- a/frontend/src/api/usage.ts +++ b/frontend/src/api/usage.ts @@ -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 { diff --git a/frontend/src/types/index.ts b/frontend/src/types/index.ts index 17b3b9db..23592a5d 100644 --- a/frontend/src/types/index.ts +++ b/frontend/src/types/index.ts @@ -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 {