| 203 | } |
| 204 | |
| 205 | func (s *Server) getRPMStats(now time.Time) (models.StatCard, error) { |
| 206 | tenMinutesAgo := now.Add(-10 * time.Minute) |
| 207 | twentyMinutesAgo := now.Add(-20 * time.Minute) |
| 208 | |
| 209 | var result rpmStatResult |
| 210 | err := s.DB.Model(&models.RequestLog{}). |
| 211 | Select("count(case when timestamp >= ? then 1 end) as current_requests, count(case when timestamp >= ? and timestamp < ? then 1 end) as previous_requests", tenMinutesAgo, twentyMinutesAgo, tenMinutesAgo). |
| 212 | Where("timestamp >= ? AND request_type = ?", twentyMinutesAgo, models.RequestTypeFinal). |
| 213 | Scan(&result).Error |
| 214 | |
| 215 | if err != nil { |
| 216 | return models.StatCard{}, err |
| 217 | } |
| 218 | |
| 219 | currentRPM := float64(result.CurrentRequests) / 10.0 |
| 220 | previousRPM := float64(result.PreviousRequests) / 10.0 |
| 221 | |
| 222 | rpmTrend := 0.0 |
| 223 | rpmTrendIsGrowth := true |
| 224 | if previousRPM > 0 { |
| 225 | rpmTrend = (currentRPM - previousRPM) / previousRPM * 100 |
| 226 | rpmTrendIsGrowth = rpmTrend >= 0 |
| 227 | } else if currentRPM > 0 { |
| 228 | rpmTrend = 100.0 |
| 229 | rpmTrendIsGrowth = true |
| 230 | } |
| 231 | |
| 232 | return models.StatCard{ |
| 233 | Value: currentRPM, |
| 234 | Trend: rpmTrend, |
| 235 | TrendIsGrowth: rpmTrendIsGrowth, |
| 236 | }, nil |
| 237 | } |
| 238 | |
| 239 | // getSecurityWarnings 检查安全配置并返回警告信息 |
| 240 | func (s *Server) getSecurityWarnings(c *gin.Context) []models.SecurityWarning { |