fix: repair logs default seed initialization

This commit is contained in:
zxr
2026-07-21 16:31:22 +08:00
parent 6e66bad884
commit fd2bcd3893

View File

@@ -1,6 +1,10 @@
package models package models
import "gorm.io/gorm" import (
"errors"
"gorm.io/gorm"
)
// GetAllModels 数据库迁移用模型列表 // GetAllModels 数据库迁移用模型列表
func GetAllModels() []interface{} { func GetAllModels() []interface{} {
@@ -85,13 +89,6 @@ WHERE target_event.dispatch_outbox_id = 0`
} }
func seedDefaultSyslogRules(db *gorm.DB) error { func seedDefaultSyslogRules(db *gorm.DB) error {
var cnt int64
if err := db.Model(&SyslogRule{}).Count(&cnt).Error; err != nil {
return err
}
if cnt > 0 {
return nil
}
rows := []SyslogRule{ rows := []SyslogRule{
{ {
Name: "默认-系统严重错误", Name: "默认-系统严重错误",
@@ -130,17 +127,39 @@ func seedDefaultSyslogRules(db *gorm.DB) error {
PolicyID: 0, PolicyID: 0,
}, },
} }
return db.Create(&rows).Error for _, row := range rows {
var existing SyslogRule
err := db.Where("name = ?", row.Name).First(&existing).Error
if errors.Is(err, gorm.ErrRecordNotFound) {
if err := db.Create(&row).Error; err != nil {
return err
}
continue
}
if err != nil {
return err
}
if err := db.Model(&existing).Select(
"name",
"enabled",
"priority",
"device_name_contains",
"source_match",
"keyword_regex",
"message_regex",
"alert_name",
"severity_code",
"severity_mapping_json",
"resource_uid_extract_regex",
"policy_id",
).Updates(&row).Error; err != nil {
return err
}
}
return nil
} }
func seedDefaultTrapRules(db *gorm.DB) error { func seedDefaultTrapRules(db *gorm.DB) error {
var cnt int64
if err := db.Model(&TrapRule{}).Count(&cnt).Error; err != nil {
return err
}
if cnt > 0 {
return nil
}
rows := []TrapRule{ rows := []TrapRule{
{ {
Name: "默认-Trap链路中断", Name: "默认-Trap链路中断",
@@ -153,17 +172,35 @@ func seedDefaultTrapRules(db *gorm.DB) error {
PolicyID: 0, PolicyID: 0,
}, },
} }
return db.Create(&rows).Error for _, row := range rows {
var existing TrapRule
err := db.Where("name = ?", row.Name).First(&existing).Error
if errors.Is(err, gorm.ErrRecordNotFound) {
if err := db.Create(&row).Error; err != nil {
return err
}
continue
}
if err != nil {
return err
}
if err := db.Model(&existing).Select(
"name",
"enabled",
"priority",
"oid_prefix",
"varbind_match_regex",
"alert_name",
"severity_code",
"policy_id",
).Updates(&row).Error; err != nil {
return err
}
}
return nil
} }
func seedDefaultTrapDictionary(db *gorm.DB) error { func seedDefaultTrapDictionary(db *gorm.DB) error {
var cnt int64
if err := db.Model(&TrapDictionaryEntry{}).Count(&cnt).Error; err != nil {
return err
}
if cnt > 0 {
return nil
}
rows := []TrapDictionaryEntry{ rows := []TrapDictionaryEntry{
{ {
Vendor: "H3C", Vendor: "H3C",
@@ -192,5 +229,33 @@ func seedDefaultTrapDictionary(db *gorm.DB) error {
Enabled: true, Enabled: true,
}, },
} }
return db.Create(&rows).Error for _, row := range rows {
var existing TrapDictionaryEntry
err := db.Where("oid_prefix = ?", row.OIDPrefix).First(&existing).Error
if errors.Is(err, gorm.ErrRecordNotFound) {
if err := db.Create(&row).Error; err != nil {
return err
}
continue
}
if err != nil {
return err
}
if err := db.Model(&existing).Select(
"oid_prefix",
"vendor",
"o_id",
"name",
"title",
"description",
"severity_code",
"severity_mapping_json",
"parse_expression",
"recovery_message",
"enabled",
).Updates(&row).Error; err != nil {
return err
}
}
return nil
} }