Files
codexautopool/backend/internal/api/max_rpm.go

113 lines
2.6 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package api
import (
"encoding/json"
"net/http"
"strconv"
"time"
"codex-pool/internal/database"
)
// MaxRPMData 最高 RPM 数据
type MaxRPMData struct {
MaxRPM int `json:"max_rpm"`
Date string `json:"date"`
UpdatedAt string `json:"updated_at,omitempty"`
}
// GetMaxRPMToday 获取今日最高 RPM
func GetMaxRPMToday() MaxRPMData {
if database.Instance == nil {
return MaxRPMData{MaxRPM: 0, Date: time.Now().Format("2006-01-02")}
}
today := time.Now().Format("2006-01-02")
// 获取存储的日期
storedDate, _ := database.Instance.GetConfig("max_rpm_date")
// 如果日期不是今天,重置
if storedDate != today {
return MaxRPMData{MaxRPM: 0, Date: today}
}
// 获取今日最高 RPM
maxRPMStr, _ := database.Instance.GetConfig("max_rpm_today")
maxRPM, _ := strconv.Atoi(maxRPMStr)
updatedAt, _ := database.Instance.GetConfig("max_rpm_updated_at")
return MaxRPMData{
MaxRPM: maxRPM,
Date: today,
UpdatedAt: updatedAt,
}
}
// UpdateMaxRPM 更新今日最高 RPM如果当前值更高
func UpdateMaxRPM(currentRPM int) bool {
if database.Instance == nil || currentRPM <= 0 {
return false
}
today := time.Now().Format("2006-01-02")
// 获取存储的日期
storedDate, _ := database.Instance.GetConfig("max_rpm_date")
var currentMax int
if storedDate == today {
// 同一天,获取当前最高值
maxRPMStr, _ := database.Instance.GetConfig("max_rpm_today")
currentMax, _ = strconv.Atoi(maxRPMStr)
} else {
// 新的一天,重置
currentMax = 0
database.Instance.SetConfig("max_rpm_date", today)
}
// 如果当前 RPM 更高,更新记录
if currentRPM > currentMax {
database.Instance.SetConfig("max_rpm_today", strconv.Itoa(currentRPM))
database.Instance.SetConfig("max_rpm_updated_at", time.Now().Format("15:04:05"))
return true
}
return false
}
// HandleGetMaxRPM GET /api/stats/max-rpm - 获取今日最高 RPM
func HandleGetMaxRPM(w http.ResponseWriter, r *http.Request) {
if r.Method != http.MethodGet {
Error(w, http.StatusMethodNotAllowed, "仅支持 GET")
return
}
data := GetMaxRPMToday()
Success(w, data)
}
// ExtractRPMFromDashboard 从仪表盘响应中提取 RPM 值
func ExtractRPMFromDashboard(body []byte) int {
var data map[string]interface{}
if err := json.Unmarshal(body, &data); err != nil {
return 0
}
// 尝试从不同的响应结构中提取 RPM
// 格式1: { "rpm": 123 }
if rpm, ok := data["rpm"].(float64); ok {
return int(rpm)
}
// 格式2: { "data": { "rpm": 123 } }
if dataObj, ok := data["data"].(map[string]interface{}); ok {
if rpm, ok := dataObj["rpm"].(float64); ok {
return int(rpm)
}
}
return 0
}