Chart Get dashboard chart data
(c *gin.Context)
| 116 | |
| 117 | // Chart Get dashboard chart data |
| 118 | func (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, |
nothing calls this directly
no test coverage detected