未验证 提交 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 (
)
func Migrate(db *gorm.DB) {
MigrateRecordingTable(db)
MigrateTables(db)
MigrateEsIndexPatternTable(db)
}
type RecordingRule struct {
QueryConfigs string `gorm:"type:text;not null;column:query_configs"` // query_configs
}
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
func MigrateTables(db *gorm.DB) error {
dts := []interface{}{&RecordingRule{}, &AlertRule{}, &AlertSubscribe{}, &AlertMute{}, &TaskRecord{}, &ChartShare{}}
if !columnHasIndex(db, &AlertHisEvent{}, "last_eval_time") {
dts = append(dts, &AlertHisEvent{})
}
err = db.AutoMigrate(&AlertRule{})
err := db.AutoMigrate(dts...)
if err != nil {
logger.Errorf("failed to migrate recording rule table: %v", err)
logger.Errorf("failed to migrate table: %v", err)
return err
}
err = db.AutoMigrate(&AlertSubscribe{})
if err != nil {
logger.Errorf("failed to migrate recording rule table: %v", err)
return err
if db.Migrator().HasColumn(&AlertingEngines{}, "cluster") {
err = db.Migrator().RenameColumn(&AlertingEngines{}, "cluster", "engine_cluster")
if err != nil {
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 {
logger.Errorf("failed to migrate recording rule table: %v", err)
return err
logger.Errorf("failed to table getIndexes: %v", 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 {
......@@ -55,3 +68,22 @@ type AlertSubscribe struct {
type AlertMute struct {
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.
先完成此消息的编辑!
想要评论请 注册