feat: add monitoring feature with backend API and frontend UI for settings.

This commit is contained in:
2026-01-30 11:34:06 +08:00
parent 55a0e46487
commit 59441adc99
3 changed files with 185 additions and 7 deletions

View File

@@ -114,6 +114,10 @@ func startServer(cfg *config.Config) {
mux.HandleFunc("/api/team/status", api.CORS(api.HandleTeamProcessStatus))
mux.HandleFunc("/api/team/stop", api.CORS(api.HandleTeamProcessStop))
// 监控设置 API
mux.HandleFunc("/api/monitor/settings", api.CORS(api.HandleGetMonitorSettings))
mux.HandleFunc("/api/monitor/settings/save", api.CORS(api.HandleSaveMonitorSettings))
// 嵌入的前端静态文件
if web.IsEmbedded() {
webFS := web.GetFileSystem()

View File

@@ -0,0 +1,94 @@
package api
import (
"encoding/json"
"net/http"
"strconv"
"codex-pool/internal/database"
)
// MonitorSettings 监控设置
type MonitorSettings struct {
Target int `json:"target"`
AutoAdd bool `json:"auto_add"`
MinInterval int `json:"min_interval"`
PollingEnabled bool `json:"polling_enabled"`
PollingInterval int `json:"polling_interval"`
}
// HandleGetMonitorSettings 获取监控设置
func HandleGetMonitorSettings(w http.ResponseWriter, r *http.Request) {
if r.Method != http.MethodGet {
Error(w, http.StatusMethodNotAllowed, "仅支持 GET")
return
}
if database.Instance == nil {
Error(w, http.StatusInternalServerError, "数据库未初始化")
return
}
settings := MonitorSettings{
Target: 50,
AutoAdd: false,
MinInterval: 300,
PollingEnabled: false,
PollingInterval: 60,
}
if val, _ := database.Instance.GetConfig("monitor_target"); val != "" {
if v, err := strconv.Atoi(val); err == nil {
settings.Target = v
}
}
if val, _ := database.Instance.GetConfig("monitor_auto_add"); val == "true" {
settings.AutoAdd = true
}
if val, _ := database.Instance.GetConfig("monitor_min_interval"); val != "" {
if v, err := strconv.Atoi(val); err == nil {
settings.MinInterval = v
}
}
if val, _ := database.Instance.GetConfig("monitor_polling_enabled"); val == "true" {
settings.PollingEnabled = true
}
if val, _ := database.Instance.GetConfig("monitor_polling_interval"); val != "" {
if v, err := strconv.Atoi(val); err == nil {
settings.PollingInterval = v
}
}
Success(w, settings)
}
// HandleSaveMonitorSettings 保存监控设置
func HandleSaveMonitorSettings(w http.ResponseWriter, r *http.Request) {
if r.Method != http.MethodPost {
Error(w, http.StatusMethodNotAllowed, "仅支持 POST")
return
}
if database.Instance == nil {
Error(w, http.StatusInternalServerError, "数据库未初始化")
return
}
var settings MonitorSettings
if err := json.NewDecoder(r.Body).Decode(&settings); err != nil {
Error(w, http.StatusBadRequest, "解析请求失败")
return
}
// 保存到数据库
database.Instance.SetConfig("monitor_target", strconv.Itoa(settings.Target))
database.Instance.SetConfig("monitor_auto_add", strconv.FormatBool(settings.AutoAdd))
database.Instance.SetConfig("monitor_min_interval", strconv.Itoa(settings.MinInterval))
database.Instance.SetConfig("monitor_polling_enabled", strconv.FormatBool(settings.PollingEnabled))
database.Instance.SetConfig("monitor_polling_interval", strconv.Itoa(settings.PollingInterval))
Success(w, map[string]interface{}{
"message": "设置已保存",
"settings": settings,
})
}