Browse Source

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: shardingHe <wangzihe@flashcat.cloud>
main
shardingHe GitHub 2 years ago
parent
commit
4a358f5cff
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 53 additions and 21 deletions
  1. +53
    -21
      models/migrate/migrate.go

+ 53
- 21
models/migrate/migrate.go View File

@@ -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"`
}

Loading…
Cancel
Save