告警中心 - 新增统一告警(alert_unified)、监控告警规则(monitor_alert_rule)、指标目录(alert_metric_catalog) - 通知策略与消息分发(alert_notify_policy/dispatch/message)、静默规则 - 告警引擎按阈值/SNMP 拆分(alert_engine_monitor/snmp) 监控采集 - SNMP 常量/模板与历史指标(snmp templates/constants、snmp_metrics_history、snmp_collect) - 中间件监控 Redis 采集与种子(middleware_monitor_redis/seed) - 站点探测 pkg(siteprobe) + 站点视图(site_view) 自动化任务 - cron 调度器(cronscheduler)、脚本运行器(scriptrunner)、系统任务(systask)及运行记录(cron_job_run、system_task) 审计与凭证 - 审计设置(audit_setting) + 历史清理(auditcleaner) 前端 - 监控页面(host/middleware/site/snmp)拆分为子模块并大屏化 - 告警中心多 Tab(规则/指标目录/通知策略/静默)、任务管理组件重构、Agent CLI Markdown 渲染 - 移除旧脚本卡片/详情/日志组件,统一为 ScriptTable/ScriptCodeEditor/TerminalOutput Co-Authored-By: Claude <noreply@anthropic.com>
120 lines
3.5 KiB
Go
120 lines
3.5 KiB
Go
package controller
|
|
|
|
import (
|
|
"encoding/json"
|
|
"log"
|
|
"net/http"
|
|
"os"
|
|
|
|
"ezops/model"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
// middlewareSeedResult 种子创建结果 // Logan.Li
|
|
type middlewareSeedResult struct {
|
|
Created int `json:"created"`
|
|
Skipped []string `json:"skipped"`
|
|
Failed []string `json:"failed"`
|
|
Total int64 `json:"total"`
|
|
Message string `json:"message"`
|
|
Success bool `json:"success"`
|
|
}
|
|
|
|
// SeedDefaultMiddlewareTargets 首次启动时创建平台默认 Redis/MySQL 监控目标 // Logan.Li
|
|
func SeedDefaultMiddlewareTargets(db *gorm.DB) {
|
|
seedDefaultMiddlewareTargets(db)
|
|
}
|
|
|
|
// SeedDefaultMiddlewareTargetsAPI 手动触发添加默认监控目标 // Logan.Li
|
|
// POST /api/v1/middleware-monitors/seed-defaults
|
|
func (h *MiddlewareMonitorHandler) SeedDefaultMiddlewareTargetsAPI(c *gin.Context) {
|
|
result := seedDefaultMiddlewareTargets(h.db)
|
|
c.JSON(http.StatusOK, model.Response{Code: 200, Data: result})
|
|
}
|
|
|
|
// seedDefaultMiddlewareTargets 内部实现,返回创建结果 // Logan.Li
|
|
func seedDefaultMiddlewareTargets(db *gorm.DB) middlewareSeedResult {
|
|
result := middlewareSeedResult{
|
|
Skipped: []string{},
|
|
Failed: []string{},
|
|
}
|
|
mysqlUser := os.Getenv("DATABASE_USER")
|
|
if mysqlUser == "" {
|
|
mysqlUser = "root"
|
|
}
|
|
mysqlPassword := os.Getenv("DATABASE_PASSWORD")
|
|
if mysqlPassword == "" {
|
|
mysqlPassword = os.Getenv("MYSQL_ROOT_PASSWORD")
|
|
}
|
|
mysqlDB := os.Getenv("DATABASE_DBNAME")
|
|
if mysqlDB == "" {
|
|
mysqlDB = "aiops"
|
|
}
|
|
|
|
redisCfg, _ := json.Marshal(MiddlewareConfig{RedisMode: "standalone"})
|
|
mysqlCfg, _ := json.Marshal(MiddlewareConfig{
|
|
Username: mysqlUser,
|
|
Password: mysqlPassword,
|
|
Database: mysqlDB,
|
|
})
|
|
|
|
defaults := []model.MonitorTarget{
|
|
{
|
|
Name: "aiops-redis",
|
|
Type: model.TargetTypeMiddleware,
|
|
Status: model.TargetStatusUnknown,
|
|
IP: "aiops-redis",
|
|
Port: 6379,
|
|
CollectMode: "api",
|
|
Config: string(redisCfg),
|
|
Interval: 30,
|
|
Description: "redis",
|
|
},
|
|
{
|
|
Name: "aiops-mysql",
|
|
Type: model.TargetTypeMiddleware,
|
|
Status: model.TargetStatusUnknown,
|
|
IP: "aiops-mysql",
|
|
Port: 3306,
|
|
CollectMode: "api",
|
|
Config: string(mysqlCfg),
|
|
Interval: 30,
|
|
Description: "mysql",
|
|
},
|
|
}
|
|
|
|
for _, target := range defaults {
|
|
var exists int64
|
|
db.Model(&model.MonitorTarget{}).
|
|
Where("type = ? AND name = ?", model.TargetTypeMiddleware, target.Name).
|
|
Count(&exists)
|
|
if exists > 0 {
|
|
result.Skipped = append(result.Skipped, target.Name)
|
|
continue
|
|
}
|
|
// host_group_id 默认 0 会触发外键约束,创建时显式忽略 // Logan.Li
|
|
if err := db.Omit("HostGroupID").Create(&target).Error; err != nil {
|
|
log.Printf("[MiddlewareMonitor] 种子数据创建失败 %s: %v", target.Name, err)
|
|
result.Failed = append(result.Failed, target.Name)
|
|
continue
|
|
}
|
|
result.Created++
|
|
log.Printf("[MiddlewareMonitor] 已创建默认监控目标: %s (%s:%d)", target.Name, target.IP, target.Port)
|
|
}
|
|
|
|
db.Model(&model.MonitorTarget{}).Where("type = ?", model.TargetTypeMiddleware).Count(&result.Total)
|
|
result.Success = result.Created > 0 || (len(result.Skipped) > 0 && len(result.Failed) == 0)
|
|
switch {
|
|
case result.Created > 0:
|
|
result.Message = "已添加平台默认监控目标"
|
|
case len(result.Failed) > 0:
|
|
result.Message = "部分默认目标创建失败,请查看服务日志"
|
|
case len(result.Skipped) > 0:
|
|
result.Message = "默认监控目标已存在,请在下方列表查看"
|
|
default:
|
|
result.Message = "未创建任何默认目标"
|
|
}
|
|
return result
|
|
} |