diff --git a/internal/report/snapshots.go b/internal/report/snapshots.go index 6efe24b..77d4a12 100644 --- a/internal/report/snapshots.go +++ b/internal/report/snapshots.go @@ -547,9 +547,13 @@ func FormatSnapshotLabel(snapshotType string, snapshotTime time.Time, tableName } func CreateTableReport(logger *slog.Logger, Database db.Database, ctx context.Context, tableName string, cfg *settings.Settings) ([]byte, error) { + if logger == nil { + logger = slog.Default() + } if err := db.ValidateTableName(tableName); err != nil { return nil, err } + reportCfg := reloadReportSettingsForReport(logger, cfg) start := time.Now() logger.Debug("Create table report start", "table", tableName) @@ -754,7 +758,7 @@ func CreateTableReport(logger *slog.Logger, Database db.Database, ctx context.Co for _, spec := range specs { reportHeaders = append(reportHeaders, spec.Name) } - addSummaryPivotSheet(logger, xlsx, sheetName, reportHeaders, rowCount, tableName, cfg) + addSummaryPivotSheet(logger, xlsx, sheetName, reportHeaders, rowCount, tableName, reportCfg) meta := reportMetadata{ TableName: tableName, @@ -787,6 +791,24 @@ func CreateTableReport(logger *slog.Logger, Database db.Database, ctx context.Co return buffer.Bytes(), nil } +func reloadReportSettingsForReport(logger *slog.Logger, cfg *settings.Settings) *settings.Settings { + if cfg == nil { + return nil + } + if strings.TrimSpace(cfg.SettingsPath) == "" { + return cfg + } + + reloaded := settings.New(logger, cfg.SettingsPath) + if err := reloaded.ReadYMLSettings(); err != nil { + logger.Warn("failed to reload settings from disk before report creation; using in-memory settings", "settings_file", cfg.SettingsPath, "error", err) + return cfg + } + + logger.Debug("reloaded settings from disk before report creation", "settings_file", cfg.SettingsPath) + return reloaded +} + // SaveTableReport renders a table report and writes it to the destination directory with a .xlsx extension. func SaveTableReport(logger *slog.Logger, Database db.Database, ctx context.Context, tableName, destDir string, cfg *settings.Settings) (string, error) { if err := db.ValidateTableName(tableName); err != nil {