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

Method Chart

internal/handler/dashboard_handler.go:118–182  ·  view source on GitHub ↗

Chart Get dashboard chart data

(c *gin.Context)

Source from the content-addressed store, hash-verified

116
117// Chart Get dashboard chart data
118func (s *Server) Chart(c *gin.Context) {
119 groupID := c.Query("groupId")
120
121 now := time.Now()
122 endHour := now.Truncate(time.Hour)
123 startHour := endHour.Add(-23 * time.Hour)
124
125 var hourlyStats []models.GroupHourlyStat
126 query := s.DB.Table("group_hourly_stats").
127 Where("time >= ? AND time < ?", startHour, endHour.Add(time.Hour))
128 if groupID != "" {
129 query = query.Where("group_id = ?", groupID)
130 } else {
131 query = query.Where("group_id NOT IN (?)",
132 s.DB.Table("groups").Select("id").Where("group_type = ?", "aggregate"))
133 }
134 if err := query.Order("time asc").Find(&hourlyStats).Error; err != nil {
135 response.ErrorI18nFromAPIError(c, app_errors.ErrDatabase, "database.chart_data_failed")
136 return
137 }
138
139 statsByHour := make(map[time.Time]map[string]int64)
140 for _, stat := range hourlyStats {
141 hour := stat.Time.Local().Truncate(time.Hour)
142 if _, ok := statsByHour[hour]; !ok {
143 statsByHour[hour] = make(map[string]int64)
144 }
145 statsByHour[hour]["success"] += stat.SuccessCount
146 statsByHour[hour]["failure"] += stat.FailureCount
147 }
148
149 var labels []string
150 var successData, failureData []int64
151
152 for i := range 24 {
153 hour := startHour.Add(time.Duration(i) * time.Hour)
154 labels = append(labels, hour.Format(time.RFC3339))
155
156 if data, ok := statsByHour[hour]; ok {
157 successData = append(successData, data["success"])
158 failureData = append(failureData, data["failure"])
159 } else {
160 successData = append(successData, 0)
161 failureData = append(failureData, 0)
162 }
163 }
164
165 chartData := models.ChartData{
166 Labels: labels,
167 Datasets: []models.ChartDataset{
168 {
169 Label: i18n.Message(c, "dashboard.success_requests"),
170 Data: successData,
171 Color: "rgba(10, 200, 110, 1)",
172 },
173 {
174 Label: i18n.Message(c, "dashboard.failed_requests"),
175 Data: failureData,

Callers

nothing calls this directly

Calls 3

ErrorI18nFromAPIErrorFunction · 0.92
MessageFunction · 0.92
SuccessFunction · 0.92

Tested by

no test coverage detected