improve logging and concurrent vcenter inventory
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:
@@ -75,7 +75,12 @@ func getLog(ctx context.Context, dbConn *sqlx.DB, dest interface{}, query string
|
||||
slog.Debug("db get returned no rows", "query", strings.TrimSpace(query))
|
||||
return err
|
||||
}
|
||||
slog.Warn("db get failed", "query", strings.TrimSpace(query), "error", err)
|
||||
// Soften logging for timeout/cancel scenarios commonly hit during best-effort probes.
|
||||
if errors.Is(err, context.DeadlineExceeded) || errors.Is(err, context.Canceled) {
|
||||
slog.Debug("db get timed out", "query", strings.TrimSpace(query), "error", err)
|
||||
} else {
|
||||
slog.Warn("db get failed", "query", strings.TrimSpace(query), "error", err)
|
||||
}
|
||||
}
|
||||
return err
|
||||
}
|
||||
@@ -83,7 +88,11 @@ func getLog(ctx context.Context, dbConn *sqlx.DB, dest interface{}, query string
|
||||
func selectLog(ctx context.Context, dbConn *sqlx.DB, dest interface{}, query string, args ...interface{}) error {
|
||||
err := dbConn.SelectContext(ctx, dest, query, args...)
|
||||
if err != nil {
|
||||
slog.Warn("db select failed", "query", strings.TrimSpace(query), "error", err)
|
||||
if errors.Is(err, context.DeadlineExceeded) || errors.Is(err, context.Canceled) {
|
||||
slog.Debug("db select timed out", "query", strings.TrimSpace(query), "error", err)
|
||||
} else {
|
||||
slog.Warn("db select failed", "query", strings.TrimSpace(query), "error", err)
|
||||
}
|
||||
}
|
||||
return err
|
||||
}
|
||||
@@ -395,6 +404,7 @@ func ApplySQLiteTuning(ctx context.Context, dbConn *sqlx.DB) {
|
||||
`PRAGMA synchronous=NORMAL;`,
|
||||
`PRAGMA temp_store=MEMORY;`,
|
||||
`PRAGMA optimize;`,
|
||||
`PRAGMA busy_timeout=5000;`,
|
||||
}
|
||||
for _, pragma := range pragmas {
|
||||
_, err = execLog(ctx, dbConn, pragma)
|
||||
@@ -404,6 +414,20 @@ func ApplySQLiteTuning(ctx context.Context, dbConn *sqlx.DB) {
|
||||
}
|
||||
}
|
||||
|
||||
// CheckpointSQLite forces a WAL checkpoint (truncate) when using SQLite. No-op for other drivers.
|
||||
func CheckpointSQLite(ctx context.Context, dbConn *sqlx.DB) error {
|
||||
if strings.ToLower(dbConn.DriverName()) != "sqlite" {
|
||||
return nil
|
||||
}
|
||||
if ctx == nil {
|
||||
ctx = context.Background()
|
||||
}
|
||||
cctx, cancel := context.WithTimeout(ctx, 10*time.Second)
|
||||
defer cancel()
|
||||
_, err := dbConn.ExecContext(cctx, `PRAGMA wal_checkpoint(TRUNCATE);`)
|
||||
return err
|
||||
}
|
||||
|
||||
// EnsureVmHourlyStats creates the shared per-snapshot cache table used by Go aggregations.
|
||||
func EnsureVmHourlyStats(ctx context.Context, dbConn *sqlx.DB) error {
|
||||
ddl := `
|
||||
|
||||
Reference in New Issue
Block a user