[CI SKIP] bugfixes for vm deletion tracking
This commit is contained in:
@@ -452,9 +452,10 @@ func UpsertVmLifecycleCache(ctx context.Context, dbConn *sqlx.DB, vcenter string
|
||||
return err
|
||||
}
|
||||
driver := strings.ToLower(dbConn.DriverName())
|
||||
bindType := sqlx.BindType(driver)
|
||||
query := `
|
||||
INSERT INTO vm_lifecycle_cache ("Vcenter","VmId","VmUuid","Name","Cluster","FirstSeen","LastSeen")
|
||||
VALUES ($1,$2,$3,$4,$5,$6,$6)
|
||||
VALUES (?, ?, ?, ?, ?, ?, ?)
|
||||
ON CONFLICT ("Vcenter","VmId","VmUuid") DO UPDATE SET
|
||||
"Name"=EXCLUDED."Name",
|
||||
"Cluster"=EXCLUDED."Cluster",
|
||||
@@ -462,27 +463,26 @@ ON CONFLICT ("Vcenter","VmId","VmUuid") DO UPDATE SET
|
||||
"FirstSeen"=COALESCE(vm_lifecycle_cache."FirstSeen", EXCLUDED."FirstSeen"),
|
||||
"DeletedAt"=NULL
|
||||
`
|
||||
args := []interface{}{vcenter, vmID, vmUUID, name, cluster, seen.Unix()}
|
||||
if driver == "sqlite" {
|
||||
query = `
|
||||
INSERT OR REPLACE INTO vm_lifecycle_cache ("Vcenter","VmId","VmUuid","Name","Cluster","FirstSeen","LastSeen")
|
||||
VALUES (?,?,?,?,?,?,?)
|
||||
`
|
||||
args = []interface{}{vcenter, vmID, vmUUID, name, cluster, seen.Unix(), seen.Unix()}
|
||||
}
|
||||
query = sqlx.Rebind(bindType, query)
|
||||
args := []interface{}{vcenter, vmID, vmUUID, name, cluster, seen.Unix(), 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)
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
// MarkVmDeleted updates lifecycle cache with a deletion timestamp.
|
||||
func MarkVmDeleted(ctx context.Context, dbConn *sqlx.DB, vcenter, vmID, vmUUID string, deletedAt int64) error {
|
||||
// MarkVmDeleted updates lifecycle cache with a deletion timestamp, carrying optional name/cluster.
|
||||
func MarkVmDeletedWithDetails(ctx context.Context, dbConn *sqlx.DB, vcenter, vmID, vmUUID, name, cluster string, deletedAt int64) error {
|
||||
if err := EnsureVmLifecycleCache(ctx, dbConn); err != nil {
|
||||
return err
|
||||
}
|
||||
driver := strings.ToLower(dbConn.DriverName())
|
||||
bindType := sqlx.BindType(driver)
|
||||
|
||||
query := `
|
||||
INSERT INTO vm_lifecycle_cache ("Vcenter","VmId","VmUuid","DeletedAt","FirstSeen","LastSeen")
|
||||
VALUES ($1,$2,$3,$4,$4,$4)
|
||||
INSERT INTO vm_lifecycle_cache ("Vcenter","VmId","VmUuid","Name","Cluster","DeletedAt","FirstSeen","LastSeen")
|
||||
VALUES (?, ?, ?, ?, ?, ?, ?, ?)
|
||||
ON CONFLICT ("Vcenter","VmId","VmUuid") DO UPDATE SET
|
||||
"DeletedAt"=CASE
|
||||
WHEN vm_lifecycle_cache."DeletedAt" IS NULL OR vm_lifecycle_cache."DeletedAt"=0 OR EXCLUDED."DeletedAt"<vm_lifecycle_cache."DeletedAt"
|
||||
@@ -490,20 +490,24 @@ ON CONFLICT ("Vcenter","VmId","VmUuid") DO UPDATE SET
|
||||
ELSE vm_lifecycle_cache."DeletedAt"
|
||||
END,
|
||||
"LastSeen"=COALESCE(vm_lifecycle_cache."LastSeen", EXCLUDED."LastSeen"),
|
||||
"FirstSeen"=COALESCE(vm_lifecycle_cache."FirstSeen", EXCLUDED."FirstSeen")
|
||||
"FirstSeen"=COALESCE(vm_lifecycle_cache."FirstSeen", EXCLUDED."FirstSeen"),
|
||||
"Name"=COALESCE(NULLIF(vm_lifecycle_cache."Name", ''), EXCLUDED."Name"),
|
||||
"Cluster"=COALESCE(NULLIF(vm_lifecycle_cache."Cluster", ''), EXCLUDED."Cluster")
|
||||
`
|
||||
args := []interface{}{vcenter, vmID, vmUUID, deletedAt}
|
||||
if driver == "sqlite" {
|
||||
query = `
|
||||
INSERT OR REPLACE INTO vm_lifecycle_cache ("Vcenter","VmId","VmUuid","DeletedAt","FirstSeen","LastSeen")
|
||||
VALUES (?,?,?,?,?,?)
|
||||
`
|
||||
args = []interface{}{vcenter, vmID, vmUUID, deletedAt, deletedAt, deletedAt}
|
||||
}
|
||||
query = sqlx.Rebind(bindType, query)
|
||||
args := []interface{}{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)
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
// MarkVmDeleted updates lifecycle cache with a deletion timestamp (legacy signature).
|
||||
func MarkVmDeleted(ctx context.Context, dbConn *sqlx.DB, vcenter, vmID, vmUUID string, deletedAt int64) error {
|
||||
return MarkVmDeletedWithDetails(ctx, dbConn, vcenter, vmID, vmUUID, "", "", deletedAt)
|
||||
}
|
||||
|
||||
// UpsertVmDailyRollup writes/updates a daily rollup row.
|
||||
func UpsertVmDailyRollup(ctx context.Context, dbConn *sqlx.DB, day int64, v VmDailyRollupRow) error {
|
||||
if err := EnsureVmDailyRollup(ctx, dbConn); err != nil {
|
||||
|
||||
Reference in New Issue
Block a user