chore: sync local updates
This commit is contained in:
87
mengyaping-backend/handlers/settings.go
Normal file
87
mengyaping-backend/handlers/settings.go
Normal file
@@ -0,0 +1,87 @@
|
||||
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,
|
||||
},
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user