Files
015/backend/internal/controllers/stat.go

91 lines
2.0 KiB
Go

package controllers
import (
"backend/internal/models"
"backend/internal/utils"
"encoding/json"
"time"
"github.com/labstack/echo/v4"
)
const (
DateLayout = "2006-01-02"
DaysToAnalyze = 30
QueueHistoryDays = 30
)
type FileChartData struct {
FileSize int64 `json:"file_size"`
FileNum int64 `json:"file_num"`
Date string `json:"date"`
}
type QueueChartData struct {
Processed int `json:"processed"`
Failed int `json:"failed"`
}
func GetStat(c echo.Context) error {
fileInfoMap, err := models.GetRedisFileInfoAll()
if err != nil {
return utils.HTTPErrorHandler(c, err)
}
now := time.Now()
cutoffTime := now.Add(-DaysToAnalyze * 24 * time.Hour)
fileChartData := make(map[string]FileChartData)
for _, value := range fileInfoMap {
var fileInfo models.RedisFileInfo
err := json.Unmarshal([]byte(value), &fileInfo)
if err != nil {
return utils.HTTPErrorHandler(c, err)
}
if fileInfo.FileType != models.FileTypeUpload {
continue
}
createdAt := time.Unix(fileInfo.CreatedAt, 0)
if createdAt.After(cutoffTime) {
dateKey := createdAt.Format(DateLayout)
if data, ok := fileChartData[dateKey]; ok {
fileChartData[dateKey] = FileChartData{
FileSize: data.FileSize + fileInfo.FileSize,
FileNum: data.FileNum + 1,
}
} else {
fileChartData[dateKey] = FileChartData{
FileSize: fileInfo.FileSize,
FileNum: 1,
}
}
}
}
queueInspector := utils.GetQueueInspector()
queues, err := queueInspector.History("default", QueueHistoryDays)
if err != nil {
return utils.HTTPErrorHandler(c, err)
}
queuesChartData := make(map[string]QueueChartData)
for _, item := range queues {
dateKey := item.Date.Format(DateLayout)
if item.Processed == 0 && item.Failed == 0 {
continue
}
queuesChartData[dateKey] = QueueChartData{
Processed: item.Processed,
Failed: item.Failed,
}
}
return utils.HTTPSuccessHandler(c, map[string]any{
"chart": map[string]any{
"storage": fileChartData,
"queue": queuesChartData,
},
})
}