package controller import ( "net/http" "strconv" perfmetrics "github.com/QuantumNous/new-api/pkg/perf_metrics" "github.com/QuantumNous/new-api/setting/ratio_setting" "github.com/gin-gonic/gin" ) func GetPerfMetricsSummary(c *gin.Context) { hours := 24 if rawHours := c.Query("hours"); rawHours != "" { if parsed, err := strconv.Atoi(rawHours); err == nil { hours = parsed } } result, err := perfmetrics.QuerySummaryAll(hours) if err != nil { c.JSON(http.StatusInternalServerError, gin.H{ "success": false, "message": err.Error(), }) return } c.JSON(http.StatusOK, gin.H{ "success": true, "data": result, }) } func GetPerfMetrics(c *gin.Context) { modelName := c.Query("model") if modelName == "" { c.JSON(http.StatusBadRequest, gin.H{ "success": false, "message": "model is required", }) return } hours := 24 if rawHours := c.Query("hours"); rawHours != "" { if parsed, err := strconv.Atoi(rawHours); err == nil { hours = parsed } } result, err := perfmetrics.Query(perfmetrics.QueryParams{ Model: modelName, Group: c.Query("group"), Hours: hours, }) if err != nil { c.JSON(http.StatusInternalServerError, gin.H{ "success": false, "message": err.Error(), }) return } result.Groups = filterActiveGroups(result.Groups) c.JSON(http.StatusOK, gin.H{ "success": true, "data": result, }) } func filterActiveGroups(groups []perfmetrics.GroupResult) []perfmetrics.GroupResult { activeGroups := ratio_setting.GetGroupRatioCopy() filtered := make([]perfmetrics.GroupResult, 0, len(groups)) for _, g := range groups { if _, ok := activeGroups[g.Group]; ok || g.Group == "auto" { filtered = append(filtered, g) } } return filtered }