feat: add monitoring feature with backend API and frontend UI for settings.
This commit is contained in:
@@ -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()
|
||||
|
||||
94
backend/internal/api/monitor.go
Normal file
94
backend/internal/api/monitor.go
Normal 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,
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user