feat: 网络双线图+告警联系人/联系组+Agent v2.0.0 + 一键报警阈值

- HostMonitor: 网络改为双线图 rx/tx 网卡带宽吞吐(双Area线), 移除单rx图
- Agent: 默认版本号从 dev 改为 v2.0.0, 重建二进制 5.2MB
- 告警中心: 新增报警联系人/报警联系组 Tab, ContactDialog/ContactGroupDialog
- 后端: AlertContact/AlertContactGroup 模型+CRUD, monitor_alert_contacts/groups 表
- 路由: /alerts/contacts + /alerts/contact-groups 8个REST端点
- 一键报警: 更新描述为6条规则(含TCP+进程), 切换到 /alerts/quick-setup
- 测试规则: 内存>10% 触发告警已创建, 飞书通知验证通过
This commit is contained in:
attacker committed 2026-06-24 08:47:40 +00:00
1 parent 5333f6f04a
commit e1cfbaf45e
11 files changed
+810 -16

No files matched your search

+74 -1
View File
@@ -395,6 +395,79 @@ type AcknowledgeAlertRequest struct {
Message string `json:"message"`
}
// ============================================
// AlertContact 报警联系人
// ============================================
type AlertContact struct {
ID uint `gorm:"primaryKey;autoIncrement;comment:主键ID" json:"id"`
Name string `gorm:"type:varchar(128);not null;comment:联系人姓名" json:"name"`
Phone string `gorm:"type:varchar(32);comment:手机号" json:"phone,omitempty"`
Email string `gorm:"type:varchar(128);comment:邮箱" json:"email,omitempty"`
Dingtalk string `gorm:"type:varchar(256);comment:钉钉webhook地址" json:"dingtalk,omitempty"`
Feishu string `gorm:"type:varchar(256);comment:飞书webhook地址" json:"feishu,omitempty"`
Wechat string `gorm:"type:varchar(256);comment:企业微信webhook地址" json:"wechat,omitempty"`
CreatedAt time.Time `gorm:"not null;comment:创建时间" json:"created_at"`
UpdatedAt time.Time `gorm:"not null;comment:更新时间" json:"updated_at"`
DeletedAt gorm.DeletedAt `gorm:"index;comment:删除时间" json:"deleted_at,omitempty"`
}
func (AlertContact) TableName() string {
return "monitor_alert_contacts"
}
// ============================================
// AlertContactGroup 报警联系组
// ============================================
type AlertContactGroup struct {
ID uint `gorm:"primaryKey;autoIncrement;comment:主键ID" json:"id"`
GroupName string `gorm:"type:varchar(128);not null;comment:组名称" json:"group_name"`
Notes string `gorm:"type:varchar(500);comment:备注" json:"notes,omitempty"`
ContactIDs string `gorm:"type:text;comment:联系人ID列表JSON" json:"contact_ids,omitempty"`
CreatedAt time.Time `gorm:"not null;comment:创建时间" json:"created_at"`
UpdatedAt time.Time `gorm:"not null;comment:更新时间" json:"updated_at"`
DeletedAt gorm.DeletedAt `gorm:"index;comment:删除时间" json:"deleted_at,omitempty"`
}
func (AlertContactGroup) TableName() string {
return "monitor_alert_contact_groups"
}
// CreateContactRequest 创建联系人请求
type CreateContactRequest struct {
Name string `json:"name" binding:"required"`
Phone string `json:"phone,omitempty"`
Email string `json:"email,omitempty"`
Dingtalk string `json:"dingtalk,omitempty"`
Feishu string `json:"feishu,omitempty"`
Wechat string `json:"wechat,omitempty"`
}
// UpdateContactRequest 更新联系人请求
type UpdateContactRequest struct {
Name string `json:"name,omitempty"`
Phone string `json:"phone,omitempty"`
Email string `json:"email,omitempty"`
Dingtalk string `json:"dingtalk,omitempty"`
Feishu string `json:"feishu,omitempty"`
Wechat string `json:"wechat,omitempty"`
}
// CreateContactGroupRequest 创建联系组请求
type CreateContactGroupRequest struct {
GroupName string `json:"group_name" binding:"required"`
Notes string `json:"notes,omitempty"`
ContactIDs []uint `json:"contact_ids"`
}
// UpdateContactGroupRequest 更新联系组请求
type UpdateContactGroupRequest struct {
GroupName string `json:"group_name,omitempty"`
Notes string `json:"notes,omitempty"`
ContactIDs []uint `json:"contact_ids,omitempty"`
}
// CreateNotifyChannelRequest 创建通知渠道请求
type CreateNotifyChannelRequest struct {
Name string `json:"name" binding:"required"`
@@ -426,7 +499,7 @@ type FeishuCardContent struct {
Title string `json:"title"`
Content [][]FeishuCardElement `json:"content"`
}
// FeishuCardElement 飞书卡片元素
type FeishuCardElement struct {
Tag string `json:"tag"`
Text string `json:"text,omitempty"`