未验证 提交 4a358f5c 编写于 作者: S shardingHe 提交者: GitHub

fix: Automatically migrate recent table structure changes. (#1696)

* auto migrate alerting_engines[engine_cluster],task_record[event_id],chart_share[datasource_id],recording_rule[datasource_ids]

* auto migrate code refactor

* auto migrate drop chart_share

* auto migrate drop dashboard_id

---------
Co-authored-by: NshardingHe <wangzihe@flashcat.cloud>
上级 13f2b008
...@@ -7,39 +7,52 @@ import ( ...@@ -7,39 +7,52 @@ import (
) )
func Migrate(db *gorm.DB) { func Migrate(db *gorm.DB) {
MigrateRecordingTable(db) MigrateTables(db)
MigrateEsIndexPatternTable(db) MigrateEsIndexPatternTable(db)
} }
type RecordingRule struct { func MigrateTables(db *gorm.DB) error {
QueryConfigs string `gorm:"type:text;not null;column:query_configs"` // query_configs dts := []interface{}{&RecordingRule{}, &AlertRule{}, &AlertSubscribe{}, &AlertMute{}, &TaskRecord{}, &ChartShare{}}
} if !columnHasIndex(db, &AlertHisEvent{}, "last_eval_time") {
dts = append(dts, &AlertHisEvent{})
func MigrateRecordingTable(db *gorm.DB) error {
err := db.AutoMigrate(&RecordingRule{})
if err != nil {
logger.Errorf("failed to migrate recording rule table: %v", err)
return err
} }
err := db.AutoMigrate(dts...)
err = db.AutoMigrate(&AlertRule{})
if err != nil { if err != nil {
logger.Errorf("failed to migrate recording rule table: %v", err) logger.Errorf("failed to migrate table: %v", err)
return err return err
} }
err = db.AutoMigrate(&AlertSubscribe{}) if db.Migrator().HasColumn(&AlertingEngines{}, "cluster") {
if err != nil { err = db.Migrator().RenameColumn(&AlertingEngines{}, "cluster", "engine_cluster")
logger.Errorf("failed to migrate recording rule table: %v", err) if err != nil {
return err logger.Errorf("failed to renameColumn table: %v", err)
return err
}
}
if db.Migrator().HasColumn(&ChartShare{}, "dashboard_id") {
err = db.Migrator().DropColumn(&ChartShare{}, "dashboard_id")
if err != nil {
logger.Errorf("failed to DropColumn table: %v", err)
}
} }
err = db.AutoMigrate(&AlertMute{}) return nil
}
func columnHasIndex(db *gorm.DB, dst interface{}, indexColumn string) bool {
indexes, err := db.Migrator().GetIndexes(dst)
if err != nil { if err != nil {
logger.Errorf("failed to migrate recording rule table: %v", err) logger.Errorf("failed to table getIndexes: %v", err)
return err return false
} }
return nil for i := range indexes {
for j := range indexes[i].Columns() {
if indexes[i].Columns()[j] == indexColumn {
return true
}
}
}
return false
} }
type AlertRule struct { type AlertRule struct {
...@@ -55,3 +68,22 @@ type AlertSubscribe struct { ...@@ -55,3 +68,22 @@ type AlertSubscribe struct {
type AlertMute struct { type AlertMute struct {
Severities string `gorm:"column:severities;type:varchar(32);not null;default:''"` Severities string `gorm:"column:severities;type:varchar(32);not null;default:''"`
} }
type RecordingRule struct {
QueryConfigs string `gorm:"type:text;not null;column:query_configs"` // query_configs
DatasourceIds string `gorm:"column:datasource_ids;type:varchar(255);default:'';comment:datasource ids"`
}
type AlertingEngines struct {
EngineCluster string `gorm:"column:engine_cluster;type:varchar(128);default:'';comment:n9e engine cluster"`
}
type ChartShare struct {
DatasourceId int64 `gorm:"column:datasource_id;bigint(20);not null;default:0;comment:datasource id"`
}
type TaskRecord struct {
EventId int64 `gorm:"column:event_id;bigint(20);not null;default:0;comment:event id;index:idx_event_id"`
}
type AlertHisEvent struct {
LastEvalTime int64 `gorm:"column:last_eval_time;bigint(20);not null;default:0;comment:for time filter;index:idx_last_eval_time"`
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册