mirror of
https://github.com/keven1024/015.git
synced 2026-05-26 07:08:02 +00:00
103 lines
2.6 KiB
Go
103 lines
2.6 KiB
Go
package controllers
|
|
|
|
import (
|
|
"backend/internal/models"
|
|
"backend/internal/utils"
|
|
"encoding/json"
|
|
"time"
|
|
|
|
"github.com/hibiken/asynq"
|
|
"github.com/labstack/echo/v4"
|
|
"github.com/samber/lo"
|
|
"github.com/spf13/cast"
|
|
)
|
|
|
|
type FileChartData struct {
|
|
FileSize int64 `json:"file_size"`
|
|
FileNum int64 `json:"file_num"`
|
|
Date string `json:"date"`
|
|
}
|
|
|
|
func GetStat(c echo.Context) error {
|
|
fileInfoMap, err := models.GetRedisFileInfoAll()
|
|
if err != nil {
|
|
return utils.HTTPErrorHandler(c, err)
|
|
}
|
|
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
|
|
}
|
|
if time.Unix(fileInfo.CreatedAt, 0).After(time.Now().Add(-30 * 24 * time.Hour)) {
|
|
dateKey := time.Unix(fileInfo.CreatedAt, 0).Format("2006-01-02")
|
|
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,
|
|
}
|
|
}
|
|
}
|
|
}
|
|
storageChartData := lo.Times(30, func(i int) FileChartData {
|
|
dateKey := time.Now().AddDate(0, 0, -i).Format("2006-01-02")
|
|
if data, ok := fileChartData[dateKey]; ok {
|
|
return FileChartData{
|
|
FileSize: data.FileSize,
|
|
FileNum: data.FileNum,
|
|
Date: dateKey,
|
|
}
|
|
}
|
|
return FileChartData{
|
|
FileSize: 0,
|
|
FileNum: 0,
|
|
Date: dateKey,
|
|
}
|
|
})
|
|
|
|
queueInspector := utils.GetQueueInspector()
|
|
queues, err := queueInspector.History("default", 30)
|
|
if err != nil {
|
|
return utils.HTTPErrorHandler(c, err)
|
|
}
|
|
|
|
maxStorageSize, err := utils.GetFileSize(utils.GetEnv("MAX_LOCALSTORAGE_SIZE"))
|
|
if err != nil {
|
|
return utils.HTTPErrorHandler(c, err)
|
|
}
|
|
|
|
queueData := lo.Map(queues, func(item *asynq.DailyStats, _ int) map[string]any {
|
|
return map[string]any{
|
|
"date": item.Date.Format("2006-01-02"),
|
|
"processed": item.Processed,
|
|
"failed": item.Failed,
|
|
}
|
|
})
|
|
|
|
return utils.HTTPSuccessHandler(c, map[string]any{
|
|
"version": utils.GetEnvWithDefault("VERSION", "dev"),
|
|
"build_time": cast.ToInt(utils.GetEnvWithDefault("BUILD_TIME", cast.ToString(time.Now().Unix()))),
|
|
"max_limit": map[string]any{
|
|
"file_size": maxStorageSize,
|
|
},
|
|
"admin": map[string]any{
|
|
"name": utils.GetEnv("ADMIN_NAME"),
|
|
"email": utils.GetEnv("ADMIN_EMAIL"),
|
|
"url": utils.GetEnv("ADMIN_URL"),
|
|
},
|
|
"chart": map[string]any{
|
|
"storage": storageChartData,
|
|
"queue": queueData,
|
|
},
|
|
})
|
|
}
|