MCPcopy Create free account
hub / github.com/tbphp/gpt-load / Stats

Method Stats

internal/handler/dashboard_handler.go:18–115  ·  view source on GitHub ↗

Stats Get dashboard statistics

(c *gin.Context)

Source from the content-addressed store, hash-verified

16
17// Stats Get dashboard statistics
18func (s *Server) Stats(c *gin.Context) {
19 var activeKeys, invalidKeys int64
20 s.DB.Model(&models.APIKey{}).Where("status = ?", models.KeyStatusActive).Count(&activeKeys)
21 s.DB.Model(&models.APIKey{}).Where("status = ?", models.KeyStatusInvalid).Count(&invalidKeys)
22
23 now := time.Now()
24 rpmStats, err := s.getRPMStats(now)
25 if err != nil {
26 response.ErrorI18nFromAPIError(c, app_errors.ErrDatabase, "database.rpm_stats_failed")
27 return
28 }
29 twentyFourHoursAgo := now.Add(-24 * time.Hour)
30 fortyEightHoursAgo := now.Add(-48 * time.Hour)
31
32 currentPeriod, err := s.getHourlyStats(twentyFourHoursAgo, now)
33 if err != nil {
34 response.ErrorI18nFromAPIError(c, app_errors.ErrDatabase, "database.current_stats_failed")
35 return
36 }
37 previousPeriod, err := s.getHourlyStats(fortyEightHoursAgo, twentyFourHoursAgo)
38 if err != nil {
39 response.ErrorI18nFromAPIError(c, app_errors.ErrDatabase, "database.previous_stats_failed")
40 return
41 }
42
43 // 计算请求量趋势
44 reqTrend := 0.0
45 reqTrendIsGrowth := true
46 if previousPeriod.TotalRequests > 0 {
47 // 有前期数据,计算百分比变化
48 reqTrend = (float64(currentPeriod.TotalRequests-previousPeriod.TotalRequests) / float64(previousPeriod.TotalRequests)) * 100
49 reqTrendIsGrowth = reqTrend >= 0
50 } else if currentPeriod.TotalRequests > 0 {
51 // 前期无数据,当前有数据,视为100%增长
52 reqTrend = 100.0
53 reqTrendIsGrowth = true
54 } else {
55 // 前期和当前都无数据
56 reqTrend = 0.0
57 reqTrendIsGrowth = true
58 }
59
60 // 计算当前和前期错误率
61 currentErrorRate := 0.0
62 if currentPeriod.TotalRequests > 0 {
63 currentErrorRate = (float64(currentPeriod.TotalFailures) / float64(currentPeriod.TotalRequests)) * 100
64 }
65
66 previousErrorRate := 0.0
67 if previousPeriod.TotalRequests > 0 {
68 previousErrorRate = (float64(previousPeriod.TotalFailures) / float64(previousPeriod.TotalRequests)) * 100
69 }
70
71 // 计算错误率趋势
72 errorRateTrend := 0.0
73 errorRateTrendIsGrowth := false
74 if previousPeriod.TotalRequests > 0 {
75 // 有前期数据,计算百分点差异

Callers

nothing calls this directly

Calls 6

getRPMStatsMethod · 0.95
getHourlyStatsMethod · 0.95
getSecurityWarningsMethod · 0.95
ErrorI18nFromAPIErrorFunction · 0.92
MessageFunction · 0.92
SuccessFunction · 0.92

Tested by

no test coverage detected