improve postgres support
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
39
main.go
39
main.go
@@ -44,6 +44,7 @@ func main() {
|
||||
runInventory := flag.Bool("run-inventory", false, "Run a single inventory snapshot across all configured vCenters and exit")
|
||||
dbCleanup := flag.Bool("db-cleanup", false, "Run a one-time cleanup to drop low-value hourly snapshot indexes and exit")
|
||||
backfillVcenterCache := flag.Bool("backfill-vcenter-cache", false, "Run a one-time backfill for vcenter latest+aggregate cache tables and exit")
|
||||
importSQLite := flag.String("import-sqlite", "", "Import a SQLite database file/DSN into the configured Postgres database and exit")
|
||||
flag.Parse()
|
||||
|
||||
bootstrapLogger := log.New(log.LevelInfo, log.OutputText)
|
||||
@@ -68,18 +69,19 @@ func main() {
|
||||
warnDeprecatedPollingSettings(logger, s.Values)
|
||||
|
||||
// Configure database
|
||||
dbDriver := strings.TrimSpace(s.Values.Settings.DatabaseDriver)
|
||||
if dbDriver == "" {
|
||||
dbDriver = "sqlite"
|
||||
}
|
||||
normalizedDriver := strings.ToLower(strings.TrimSpace(dbDriver))
|
||||
if normalizedDriver == "" || normalizedDriver == "sqlite3" {
|
||||
normalizedDriver = "sqlite"
|
||||
}
|
||||
dbURL := strings.TrimSpace(s.Values.Settings.DatabaseURL)
|
||||
normalizedDriver, inferredFromDSN, err := db.ResolveDriver(s.Values.Settings.DatabaseDriver, dbURL)
|
||||
if err != nil {
|
||||
logger.Error("Invalid database configuration", "error", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
if inferredFromDSN {
|
||||
logger.Warn("database_driver is unset; inferred postgres from database_url")
|
||||
}
|
||||
if dbURL == "" && normalizedDriver == "sqlite" {
|
||||
dbURL = utils.GetFilePath("db.sqlite3")
|
||||
}
|
||||
logger.Info("Effective database driver resolved", "driver", normalizedDriver)
|
||||
|
||||
database, err := db.New(logger, db.Config{
|
||||
Driver: normalizedDriver,
|
||||
@@ -97,6 +99,25 @@ func main() {
|
||||
logger.Error("failed to migrate database", "error", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
if strings.TrimSpace(*importSQLite) != "" {
|
||||
if normalizedDriver != "postgres" {
|
||||
logger.Error("sqlite import requires settings.database_driver=postgres")
|
||||
os.Exit(1)
|
||||
}
|
||||
logger.Info("starting one-time sqlite import into postgres", "sqlite_source", strings.TrimSpace(*importSQLite))
|
||||
stats, err := db.ImportSQLiteIntoPostgres(ctx, logger, database.DB(), strings.TrimSpace(*importSQLite))
|
||||
if err != nil {
|
||||
logger.Error("failed to import sqlite database into postgres", "error", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
logger.Info("completed sqlite import into postgres",
|
||||
"sqlite_source", stats.SourceDSN,
|
||||
"tables_imported", stats.TablesImported,
|
||||
"tables_skipped", stats.TablesSkipped,
|
||||
"rows_imported", stats.RowsImported,
|
||||
)
|
||||
return
|
||||
}
|
||||
if *dbCleanup {
|
||||
dropped, err := db.CleanupHourlySnapshotIndexes(ctx, database.DB())
|
||||
if err != nil {
|
||||
@@ -332,7 +353,7 @@ func main() {
|
||||
gocron.CronJob(snapshotCleanupCron, false),
|
||||
gocron.NewTask(func() {
|
||||
ct.RunSnapshotCleanup(ctx, logger)
|
||||
if strings.EqualFold(s.Values.Settings.DatabaseDriver, "sqlite") {
|
||||
if normalizedDriver == "sqlite" {
|
||||
logger.Info("Performing sqlite VACUUM after snapshot cleanup")
|
||||
if _, err := ct.Database.DB().ExecContext(ctx, "VACUUM"); err != nil {
|
||||
logger.Warn("VACUUM failed after snapshot cleanup", "error", err)
|
||||
|
||||
Reference in New Issue
Block a user