Files
mengyaping/mengyaping-backend/handlers/settings.go
2026-05-16 19:03:32 +08:00

88 lines
2.3 KiB
Go

package handlers
import (
"net/http"
"github.com/gin-gonic/gin"
"mengyaping-backend/config"
"mengyaping-backend/models"
"mengyaping-backend/services"
"mengyaping-backend/storage"
)
// SettingsHandler 监控与系统配置(公开可读、管理端可写)
type SettingsHandler struct {
monitor *services.MonitorService
}
// NewSettingsHandler 创建配置处理器
func NewSettingsHandler() *SettingsHandler {
return &SettingsHandler{
monitor: services.GetMonitorService(),
}
}
// GetPublicMonitorSettings 公开:当前全局检测周期与可选值
func (h *SettingsHandler) GetPublicMonitorSettings(c *gin.Context) {
cfg := config.GetConfig()
c.JSON(http.StatusOK, models.APIResponse{
Code: 0,
Message: "success",
Data: gin.H{
"interval_minutes": int(cfg.Monitor.Interval.Minutes()),
"allowed_interval_minutes": config.AllowedMonitorIntervalMinutes,
},
})
}
// GetAdminConfig 管理端:监控相关配置(只读字段供面板展示)
func (h *SettingsHandler) GetAdminConfig(c *gin.Context) {
cfg := config.GetConfig()
c.JSON(http.StatusOK, models.APIResponse{
Code: 0,
Message: "success",
Data: gin.H{
"interval_minutes": int(cfg.Monitor.Interval.Minutes()),
"allowed_interval_minutes": config.AllowedMonitorIntervalMinutes,
"timeout_seconds": int(cfg.Monitor.Timeout.Seconds()),
"retry_count": cfg.Monitor.RetryCount,
"history_days": cfg.Monitor.HistoryDays,
},
})
}
type putAdminMonitorConfigRequest struct {
IntervalMinutes int `json:"interval_minutes" binding:"required"`
}
// PutAdminMonitorConfig 更新全局检测周期并持久化、应用新调度
func (h *SettingsHandler) PutAdminMonitorConfig(c *gin.Context) {
var req putAdminMonitorConfigRequest
if err := c.ShouldBindJSON(&req); err != nil {
c.JSON(http.StatusBadRequest, models.APIResponse{
Code: 400,
Message: "参数错误: " + err.Error(),
})
return
}
if err := storage.GetStorage().SetMonitorIntervalMinutes(req.IntervalMinutes); err != nil {
c.JSON(http.StatusBadRequest, models.APIResponse{
Code: 400,
Message: err.Error(),
})
return
}
h.monitor.Reschedule()
c.JSON(http.StatusOK, models.APIResponse{
Code: 0,
Message: "已更新检测周期",
Data: gin.H{
"interval_minutes": req.IntervalMinutes,
},
})
}