fix: align business reports and record task migration progress
This commit is contained in:
@@ -5,7 +5,9 @@ package migration
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log/slog"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
@@ -23,10 +25,20 @@ type record struct {
|
||||
|
||||
func (record) TableName() string { return TableName }
|
||||
|
||||
func Run(db *gorm.DB, steps []Step) error {
|
||||
func Run(db *gorm.DB, steps []Step) (runErr error) {
|
||||
if db == nil {
|
||||
return fmt.Errorf("database is nil")
|
||||
}
|
||||
started := time.Now()
|
||||
completed := 0
|
||||
slog.Info("database migrations started", "steps", len(steps))
|
||||
defer func() {
|
||||
status := "completed"
|
||||
if runErr != nil {
|
||||
status = "failed"
|
||||
}
|
||||
slog.Info("database migrations finished", "status", status, "applied", completed, "elapsed_ms", time.Since(started).Milliseconds())
|
||||
}()
|
||||
db = db.Session(&gorm.Session{NewDB: true})
|
||||
if err := repairMigrationTable(db); err != nil {
|
||||
return err
|
||||
@@ -66,12 +78,17 @@ func Run(db *gorm.DB, steps []Step) error {
|
||||
if step.Migrate == nil {
|
||||
return fmt.Errorf("migration %q has no function", step.ID)
|
||||
}
|
||||
stepStarted := time.Now()
|
||||
slog.Info("database migration started", "migration", step.ID)
|
||||
if err := step.Migrate(db.Session(&gorm.Session{NewDB: true})); err != nil {
|
||||
slog.Error("database migration failed", "migration", step.ID, "elapsed_ms", time.Since(stepStarted).Milliseconds(), "error", err)
|
||||
return fmt.Errorf("apply migration %q: %w", step.ID, err)
|
||||
}
|
||||
if err := db.Session(&gorm.Session{NewDB: true}).Create(&record{ID: step.ID}).Error; err != nil {
|
||||
return fmt.Errorf("record migration %q: %w", step.ID, err)
|
||||
}
|
||||
completed++
|
||||
slog.Info("database migration completed", "migration", step.ID, "elapsed_ms", time.Since(stepStarted).Milliseconds())
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user