This commit is contained in:
@@ -97,11 +97,19 @@ func execLog(ctx context.Context, dbConn *sqlx.DB, query string, args ...interfa
|
|||||||
res, err := dbConn.ExecContext(ctx, query, args...)
|
res, err := dbConn.ExecContext(ctx, query, args...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
q := strings.TrimSpace(query)
|
q := strings.TrimSpace(query)
|
||||||
|
const maxQueryLogChars = 240
|
||||||
|
truncated := false
|
||||||
|
if len(q) > maxQueryLogChars {
|
||||||
|
q = q[:maxQueryLogChars] + " ... [truncated]"
|
||||||
|
truncated = true
|
||||||
|
}
|
||||||
msg := strings.ToLower(err.Error())
|
msg := strings.ToLower(err.Error())
|
||||||
if strings.Contains(msg, "duplicate column name") || strings.Contains(msg, "already exists") {
|
if strings.Contains(msg, "duplicate column name") || strings.Contains(msg, "already exists") {
|
||||||
slog.Debug("db exec skipped (already exists)", "query", q, "error", err)
|
slog.Debug("db exec skipped (already exists)", "query", q, "query_truncated", truncated, "error", err)
|
||||||
|
} else if errors.Is(err, context.DeadlineExceeded) || errors.Is(err, context.Canceled) || strings.Contains(msg, "statement timeout") {
|
||||||
|
slog.Debug("db exec timed out", "query", q, "query_truncated", truncated, "error", err)
|
||||||
} else {
|
} else {
|
||||||
slog.Warn("db exec failed", "query", q, "error", err)
|
slog.Warn("db exec failed", "query", q, "query_truncated", truncated, "error", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return res, err
|
return res, err
|
||||||
@@ -2680,6 +2688,22 @@ WITH snapshots AS (
|
|||||||
MAX(s."SnapshotTime") AS last_seen
|
MAX(s."SnapshotTime") AS last_seen
|
||||||
FROM snapshots s
|
FROM snapshots s
|
||||||
GROUP BY s."VmId", s."VmUuid", s."Name", s."Vcenter"
|
GROUP BY s."VmId", s."VmUuid", s."Name", s."Vcenter"
|
||||||
|
), timeline_enriched AS (
|
||||||
|
SELECT
|
||||||
|
tl."VmId",
|
||||||
|
tl."VmUuid",
|
||||||
|
tl."Name",
|
||||||
|
tl."Vcenter",
|
||||||
|
tl.any_creation,
|
||||||
|
tl.first_seen,
|
||||||
|
tl.last_seen,
|
||||||
|
MIN(t2.first_seen) AS t_last_after
|
||||||
|
FROM timeline tl
|
||||||
|
LEFT JOIN timeline t2
|
||||||
|
ON t2."Vcenter" = tl."Vcenter"
|
||||||
|
AND COALESCE(t2."VmId", '') = COALESCE(tl."VmId", '')
|
||||||
|
AND t2.first_seen > tl.last_seen
|
||||||
|
GROUP BY tl."VmId", tl."VmUuid", tl."Name", tl."Vcenter", tl.any_creation, tl.first_seen, tl.last_seen
|
||||||
)
|
)
|
||||||
UPDATE %s dst
|
UPDATE %s dst
|
||||||
SET
|
SET
|
||||||
@@ -2688,23 +2712,12 @@ SET
|
|||||||
ELSE dst."CreationTime"
|
ELSE dst."CreationTime"
|
||||||
END,
|
END,
|
||||||
"DeletionTime" = CASE
|
"DeletionTime" = CASE
|
||||||
WHEN t_last_after IS NOT NULL
|
WHEN t.t_last_after IS NOT NULL
|
||||||
AND (dst."DeletionTime" IS NULL OR dst."DeletionTime" = 0)
|
AND (dst."DeletionTime" IS NULL OR dst."DeletionTime" = 0)
|
||||||
THEN t_last_after
|
THEN t.t_last_after
|
||||||
ELSE dst."DeletionTime"
|
ELSE dst."DeletionTime"
|
||||||
END
|
END
|
||||||
FROM (
|
FROM timeline_enriched t
|
||||||
SELECT
|
|
||||||
tl.*,
|
|
||||||
(
|
|
||||||
SELECT MIN(s2."SnapshotTime")
|
|
||||||
FROM snapshots s2
|
|
||||||
WHERE s2."Vcenter" = tl."Vcenter"
|
|
||||||
AND COALESCE(s2."VmId", '') = COALESCE(tl."VmId", '')
|
|
||||||
AND s2."SnapshotTime" > tl.last_seen
|
|
||||||
) AS t_last_after
|
|
||||||
FROM timeline tl
|
|
||||||
) t
|
|
||||||
WHERE dst."Vcenter" = t."Vcenter"
|
WHERE dst."Vcenter" = t."Vcenter"
|
||||||
AND (
|
AND (
|
||||||
(dst."VmId" IS NOT DISTINCT FROM t."VmId")
|
(dst."VmId" IS NOT DISTINCT FROM t."VmId")
|
||||||
|
|||||||
Reference in New Issue
Block a user