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,
|
"average_duration_ms": stats.AverageDurationMs,
|
||||||
"uptime": uptime,
|
"uptime": uptime,
|
||||||
|
|
||||||
|
// 性能指标
|
||||||
|
"rpm": stats.Rpm,
|
||||||
|
"tpm": stats.Tpm,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -44,8 +44,8 @@ type DashboardStats struct {
|
|||||||
AverageDurationMs float64 `json:"average_duration_ms"` // 平均响应时间
|
AverageDurationMs float64 `json:"average_duration_ms"` // 平均响应时间
|
||||||
|
|
||||||
// 性能指标
|
// 性能指标
|
||||||
Rpm int64 `json:"rpm"` // 最近1分钟的请求数
|
Rpm int64 `json:"rpm"` // 近5分钟平均每分钟请求数
|
||||||
Tpm int64 `json:"tpm"` // 最近1分钟的Token数
|
Tpm int64 `json:"tpm"` // 近5分钟平均每分钟Token数
|
||||||
}
|
}
|
||||||
|
|
||||||
// TrendDataPoint represents a single point in trend data
|
// TrendDataPoint represents a single point in trend data
|
||||||
@@ -121,8 +121,8 @@ type UserDashboardStats struct {
|
|||||||
AverageDurationMs float64 `json:"average_duration_ms"`
|
AverageDurationMs float64 `json:"average_duration_ms"`
|
||||||
|
|
||||||
// 性能指标
|
// 性能指标
|
||||||
Rpm int64 `json:"rpm"` // 最近1分钟的请求数
|
Rpm int64 `json:"rpm"` // 近5分钟平均每分钟请求数
|
||||||
Tpm int64 `json:"tpm"` // 最近1分钟的Token数
|
Tpm int64 `json:"tpm"` // 近5分钟平均每分钟Token数
|
||||||
}
|
}
|
||||||
|
|
||||||
// UsageLogFilters represents filters for usage log queries
|
// UsageLogFilters represents filters for usage log queries
|
||||||
|
|||||||
@@ -19,9 +19,9 @@ func NewUsageLogRepository(db *gorm.DB) *UsageLogRepository {
|
|||||||
return &UsageLogRepository{db: db}
|
return &UsageLogRepository{db: db}
|
||||||
}
|
}
|
||||||
|
|
||||||
// getPerformanceStats 获取 RPM 和 TPM(可选按用户过滤)
|
// getPerformanceStats 获取 RPM 和 TPM(近5分钟平均值,可选按用户过滤)
|
||||||
func (r *UsageLogRepository) getPerformanceStats(ctx context.Context, userID int64) (rpm, tpm int64) {
|
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 {
|
var perfStats struct {
|
||||||
RequestCount int64 `gorm:"column:request_count"`
|
RequestCount int64 `gorm:"column:request_count"`
|
||||||
TokenCount int64 `gorm:"column:token_count"`
|
TokenCount int64 `gorm:"column:token_count"`
|
||||||
@@ -32,14 +32,15 @@ func (r *UsageLogRepository) getPerformanceStats(ctx context.Context, userID int
|
|||||||
COUNT(*) as request_count,
|
COUNT(*) as request_count,
|
||||||
COALESCE(SUM(input_tokens + output_tokens), 0) as token_count
|
COALESCE(SUM(input_tokens + output_tokens), 0) as token_count
|
||||||
`).
|
`).
|
||||||
Where("created_at >= ?", oneMinuteAgo)
|
Where("created_at >= ?", fiveMinutesAgo)
|
||||||
|
|
||||||
if userID > 0 {
|
if userID > 0 {
|
||||||
db = db.Where("user_id = ?", userID)
|
db = db.Where("user_id = ?", userID)
|
||||||
}
|
}
|
||||||
|
|
||||||
db.Scan(&perfStats)
|
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 {
|
func (r *UsageLogRepository) Create(ctx context.Context, log *model.UsageLog) error {
|
||||||
|
|||||||
@@ -35,8 +35,8 @@ export interface UserDashboardStats {
|
|||||||
today_cost: number; // 今日标准计费
|
today_cost: number; // 今日标准计费
|
||||||
today_actual_cost: number; // 今日实际扣除
|
today_actual_cost: number; // 今日实际扣除
|
||||||
average_duration_ms: number;
|
average_duration_ms: number;
|
||||||
rpm: number; // 最近1分钟的请求数
|
rpm: number; // 近5分钟平均每分钟请求数
|
||||||
tpm: number; // 最近1分钟的Token数
|
tpm: number; // 近5分钟平均每分钟Token数
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface TrendParams {
|
export interface TrendParams {
|
||||||
|
|||||||
@@ -520,8 +520,8 @@ export interface DashboardStats {
|
|||||||
uptime: number; // 系统运行时间(秒)
|
uptime: number; // 系统运行时间(秒)
|
||||||
|
|
||||||
// 性能指标
|
// 性能指标
|
||||||
rpm: number; // 最近1分钟的请求数
|
rpm: number; // 近5分钟平均每分钟请求数
|
||||||
tpm: number; // 最近1分钟的Token数
|
tpm: number; // 近5分钟平均每分钟Token数
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface UsageStatsResponse {
|
export interface UsageStatsResponse {
|
||||||
|
|||||||
Reference in New Issue
Block a user