Refactor code to use 'any' type and improve context handling
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:
@@ -45,8 +45,32 @@ type ensureOnceState struct {
|
||||
done bool
|
||||
}
|
||||
|
||||
type loggerContextKey struct{}
|
||||
|
||||
var ensureOnceRegistry sync.Map
|
||||
|
||||
// WithLoggerContext stores a logger in context for downstream DB helper logging.
|
||||
func WithLoggerContext(ctx context.Context, logger *slog.Logger) context.Context {
|
||||
if ctx == nil {
|
||||
ctx = context.Background()
|
||||
}
|
||||
if logger == nil {
|
||||
return ctx
|
||||
}
|
||||
return context.WithValue(ctx, loggerContextKey{}, logger)
|
||||
}
|
||||
|
||||
// LoggerFromContext returns a logger previously stored via WithLoggerContext.
|
||||
func LoggerFromContext(ctx context.Context) *slog.Logger {
|
||||
if ctx == nil {
|
||||
return nil
|
||||
}
|
||||
if logger, ok := ctx.Value(loggerContextKey{}).(*slog.Logger); ok && logger != nil {
|
||||
return logger
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// ensureOncePerDB runs fn once per DB connection for a given logical key.
|
||||
// The function is considered complete only when fn returns nil.
|
||||
func ensureOncePerDB(dbConn *sqlx.DB, name string, fn func() error) error {
|
||||
@@ -98,7 +122,7 @@ func EnsureColumns(ctx context.Context, dbConn *sqlx.DB, tableName string, colum
|
||||
return nil
|
||||
}
|
||||
|
||||
func execLog(ctx context.Context, dbConn *sqlx.DB, query string, args ...interface{}) (sql.Result, error) {
|
||||
func execLog(ctx context.Context, dbConn *sqlx.DB, query string, args ...any) (sql.Result, error) {
|
||||
res, err := dbConn.ExecContext(ctx, query, args...)
|
||||
if err != nil {
|
||||
q := strings.TrimSpace(query)
|
||||
@@ -120,7 +144,7 @@ func execLog(ctx context.Context, dbConn *sqlx.DB, query string, args ...interfa
|
||||
return res, err
|
||||
}
|
||||
|
||||
func getLog(ctx context.Context, dbConn *sqlx.DB, dest interface{}, query string, args ...interface{}) error {
|
||||
func getLog(ctx context.Context, dbConn *sqlx.DB, dest any, query string, args ...any) error {
|
||||
err := dbConn.GetContext(ctx, dest, query, args...)
|
||||
if err != nil {
|
||||
if errors.Is(err, sql.ErrNoRows) {
|
||||
@@ -137,7 +161,7 @@ func getLog(ctx context.Context, dbConn *sqlx.DB, dest interface{}, query string
|
||||
return err
|
||||
}
|
||||
|
||||
func selectLog(ctx context.Context, dbConn *sqlx.DB, dest interface{}, query string, args ...interface{}) error {
|
||||
func selectLog(ctx context.Context, dbConn *sqlx.DB, dest any, query string, args ...any) error {
|
||||
err := dbConn.SelectContext(ctx, dest, query, args...)
|
||||
if err != nil {
|
||||
if errors.Is(err, context.DeadlineExceeded) || errors.Is(err, context.Canceled) {
|
||||
@@ -602,7 +626,7 @@ func ApplySQLiteTuning(ctx context.Context, dbConn *sqlx.DB) {
|
||||
pragmaCtx, cancel := context.WithTimeout(ctx, 2*time.Second)
|
||||
_, err := execLog(pragmaCtx, dbConn, pragma)
|
||||
cancel()
|
||||
if logger, ok := ctx.Value("logger").(*slog.Logger); ok && logger != nil {
|
||||
if logger := LoggerFromContext(ctx); logger != nil {
|
||||
logger.Debug("Applied SQLite tuning pragma", "pragma", pragma, "error", err)
|
||||
}
|
||||
}
|
||||
@@ -783,7 +807,7 @@ ON CONFLICT ("Vcenter","VmId","VmUuid") DO UPDATE SET
|
||||
"DeletedAt"=NULL
|
||||
`
|
||||
query = sqlx.Rebind(bindType, query)
|
||||
args := []interface{}{vcenter, vmID, vmUUID, name, cluster, firstSeen, seen.Unix()}
|
||||
args := []any{vcenter, vmID, vmUUID, name, cluster, firstSeen, seen.Unix()}
|
||||
_, err := dbConn.ExecContext(ctx, query, args...)
|
||||
if err != nil {
|
||||
slog.Warn("lifecycle upsert exec failed", "vcenter", vcenter, "vm_id", vmID, "vm_uuid", vmUUID, "driver", driver, "args_len", len(args), "args", fmt.Sprint(args), "query", strings.TrimSpace(query), "error", err)
|
||||
@@ -814,7 +838,7 @@ ON CONFLICT ("Vcenter","VmId","VmUuid") DO UPDATE SET
|
||||
"Cluster"=COALESCE(NULLIF(vm_lifecycle_cache."Cluster", ''), EXCLUDED."Cluster")
|
||||
`
|
||||
query = sqlx.Rebind(bindType, query)
|
||||
args := []interface{}{vcenter, vmID, vmUUID, name, cluster, deletedAt, deletedAt, deletedAt}
|
||||
args := []any{vcenter, vmID, vmUUID, name, cluster, deletedAt, deletedAt, deletedAt}
|
||||
_, err := dbConn.ExecContext(ctx, query, args...)
|
||||
if err != nil {
|
||||
slog.Warn("lifecycle delete exec failed", "vcenter", vcenter, "vm_id", vmID, "vm_uuid", vmUUID, "driver", driver, "args_len", len(args), "args", fmt.Sprint(args), "query", strings.TrimSpace(query), "error", err)
|
||||
@@ -845,7 +869,7 @@ ON CONFLICT ("Vcenter","VmId","VmUuid") DO UPDATE SET
|
||||
"Cluster"=COALESCE(NULLIF(vm_lifecycle_cache."Cluster", ''), EXCLUDED."Cluster")
|
||||
`
|
||||
query = sqlx.Rebind(bindType, query)
|
||||
args := []interface{}{vcenter, vmID, vmUUID, name, cluster, deletedAt, deletedAt, deletedAt}
|
||||
args := []any{vcenter, vmID, vmUUID, name, cluster, deletedAt, deletedAt, deletedAt}
|
||||
_, err := dbConn.ExecContext(ctx, query, args...)
|
||||
if err != nil {
|
||||
slog.Warn("lifecycle delete event exec failed", "vcenter", vcenter, "vm_id", vmID, "vm_uuid", vmUUID, "driver", driver, "args_len", len(args), "args", fmt.Sprint(args), "query", strings.TrimSpace(query), "error", err)
|
||||
@@ -988,7 +1012,7 @@ ON CONFLICT ("Date","Vcenter","VmId","VmUuid") DO UPDATE SET
|
||||
"PoweredOn"=$25,
|
||||
"SrmPlaceholder"=$26
|
||||
`
|
||||
args := []interface{}{
|
||||
args := []any{
|
||||
day, v.Vcenter, v.VmId, v.VmUuid, v.Name, v.CreationTime, v.DeletionTime, v.SamplesPresent, v.TotalSamples,
|
||||
v.SumVcpu, v.SumRam, v.SumDisk, v.TinHits, v.BronzeHits, v.SilverHits, v.GoldHits,
|
||||
v.LastResourcePool, v.LastDatacenter, v.LastCluster, v.LastFolder, v.LastProvisionedDisk, v.LastVcpuCount, v.LastRamGB, v.IsTemplate, v.PoweredOn, v.SrmPlaceholder,
|
||||
@@ -1469,7 +1493,7 @@ WHERE "Vcenter" = $4 AND "VmId" = $5 AND "VmUuid" = $6
|
||||
return err
|
||||
}
|
||||
|
||||
func nullString(val sql.NullString) interface{} {
|
||||
func nullString(val sql.NullString) any {
|
||||
if val.Valid {
|
||||
return val.String
|
||||
}
|
||||
@@ -2088,17 +2112,17 @@ type VmLifecycleDiagnostics struct {
|
||||
FinalLifecycle VmLifecycle
|
||||
}
|
||||
|
||||
func vmLookupPredicate(vmID, vmUUID, name string) (string, []interface{}, bool) {
|
||||
func vmLookupPredicate(vmID, vmUUID, name string) (string, []any, bool) {
|
||||
vmID = strings.TrimSpace(vmID)
|
||||
vmUUID = strings.TrimSpace(vmUUID)
|
||||
name = strings.TrimSpace(name)
|
||||
switch {
|
||||
case vmID != "":
|
||||
return `"VmId" = ?`, []interface{}{vmID}, true
|
||||
return `"VmId" = ?`, []any{vmID}, true
|
||||
case vmUUID != "":
|
||||
return `"VmUuid" = ?`, []interface{}{vmUUID}, true
|
||||
return `"VmUuid" = ?`, []any{vmUUID}, true
|
||||
case name != "":
|
||||
return `lower("Name") = ?`, []interface{}{strings.ToLower(name)}, true
|
||||
return `lower("Name") = ?`, []any{strings.ToLower(name)}, true
|
||||
default:
|
||||
return "", nil, false
|
||||
}
|
||||
@@ -2960,7 +2984,7 @@ SET "AvgIsPresent" = CASE
|
||||
END
|
||||
`, summaryTable, endExpr, startExpr, endExpr, startExpr)
|
||||
query = dbConn.Rebind(query)
|
||||
args := []interface{}{
|
||||
args := []any{
|
||||
windowEnd, windowEnd,
|
||||
windowStart, windowStart,
|
||||
windowEnd, windowEnd,
|
||||
@@ -3530,7 +3554,7 @@ FROM snapshot_runs
|
||||
WHERE "Success" = 'FALSE' AND "Attempts" < ?
|
||||
ORDER BY "LastAttempt" ASC
|
||||
`
|
||||
args := []interface{}{maxAttempts}
|
||||
args := []any{maxAttempts}
|
||||
if driver == "pgx" || driver == "postgres" {
|
||||
query = `
|
||||
SELECT "Vcenter","SnapshotTime","Attempts"
|
||||
|
||||
Reference in New Issue
Block a user