fix creationtime in aggregations
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:
@@ -574,7 +574,6 @@ WHERE EXISTS (
|
||||
OR (l."VmUuid" IS NOT NULL AND %[1]s."VmUuid" IS NOT NULL AND l."VmUuid" = %[1]s."VmUuid")
|
||||
OR (l."Name" IS NOT NULL AND %[1]s."Name" IS NOT NULL AND l."Name" = %[1]s."Name")
|
||||
)
|
||||
AND (%[1]s."DeletionTime" IS NULL OR %[1]s."DeletionTime" = 0 OR l."DeletedAt" < %[1]s."DeletionTime")
|
||||
);
|
||||
`, summaryTable)
|
||||
bind := dbConn.Rebind(query)
|
||||
@@ -589,6 +588,51 @@ WHERE EXISTS (
|
||||
return rows, nil
|
||||
}
|
||||
|
||||
// ApplyLifecycleCreationToSummary updates CreationTime values in a summary table from vm_lifecycle_cache.
|
||||
func ApplyLifecycleCreationToSummary(ctx context.Context, dbConn *sqlx.DB, summaryTable string) (int64, error) {
|
||||
if err := ValidateTableName(summaryTable); err != nil {
|
||||
return 0, err
|
||||
}
|
||||
if err := EnsureVmLifecycleCache(ctx, dbConn); err != nil {
|
||||
return 0, err
|
||||
}
|
||||
query := fmt.Sprintf(`
|
||||
UPDATE %[1]s
|
||||
SET "CreationTime" = (
|
||||
SELECT MIN(l."FirstSeen")
|
||||
FROM vm_lifecycle_cache l
|
||||
WHERE l."Vcenter" = %[1]s."Vcenter"
|
||||
AND l."FirstSeen" IS NOT NULL AND l."FirstSeen" > 0
|
||||
AND (
|
||||
(l."VmId" IS NOT NULL AND %[1]s."VmId" IS NOT NULL AND l."VmId" = %[1]s."VmId")
|
||||
OR (l."VmUuid" IS NOT NULL AND %[1]s."VmUuid" IS NOT NULL AND l."VmUuid" = %[1]s."VmUuid")
|
||||
OR (l."Name" IS NOT NULL AND %[1]s."Name" IS NOT NULL AND l."Name" = %[1]s."Name")
|
||||
)
|
||||
)
|
||||
WHERE ("CreationTime" IS NULL OR "CreationTime" = 0)
|
||||
AND EXISTS (
|
||||
SELECT 1 FROM vm_lifecycle_cache l
|
||||
WHERE l."Vcenter" = %[1]s."Vcenter"
|
||||
AND l."FirstSeen" IS NOT NULL AND l."FirstSeen" > 0
|
||||
AND (
|
||||
(l."VmId" IS NOT NULL AND %[1]s."VmId" IS NOT NULL AND l."VmId" = %[1]s."VmId")
|
||||
OR (l."VmUuid" IS NOT NULL AND %[1]s."VmUuid" IS NOT NULL AND l."VmUuid" = %[1]s."VmUuid")
|
||||
OR (l."Name" IS NOT NULL AND %[1]s."Name" IS NOT NULL AND l."Name" = %[1]s."Name")
|
||||
)
|
||||
);
|
||||
`, summaryTable)
|
||||
bind := dbConn.Rebind(query)
|
||||
res, err := execLog(ctx, dbConn, bind)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
rows, err := res.RowsAffected()
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
return rows, nil
|
||||
}
|
||||
|
||||
// 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 {
|
||||
@@ -1348,7 +1392,6 @@ WITH snapshots AS (
|
||||
s."InventoryId", s."Name", s."Vcenter", s."VmId", s."EventKey", s."CloudId",
|
||||
MIN(NULLIF(s."CreationTime", 0)) AS any_creation,
|
||||
MAX(NULLIF(s."DeletionTime", 0)) AS any_deletion,
|
||||
MAX(COALESCE(inv."DeletionTime", 0)) AS inv_deletion,
|
||||
MIN(s."SnapshotTime") AS first_present,
|
||||
MAX(s."SnapshotTime") AS last_present,
|
||||
COUNT(*) AS samples_present,
|
||||
@@ -1365,7 +1408,6 @@ WITH snapshots AS (
|
||||
SUM(CASE WHEN LOWER(s."ResourcePool") = 'silver' THEN 1 ELSE 0 END) AS silver_hits,
|
||||
SUM(CASE WHEN LOWER(s."ResourcePool") = 'gold' THEN 1 ELSE 0 END) AS gold_hits
|
||||
FROM snapshots s
|
||||
LEFT JOIN inventory inv ON inv."VmId" = s."VmId" AND inv."Vcenter" = s."Vcenter"
|
||||
GROUP BY
|
||||
s."InventoryId", s."Name", s."Vcenter", s."VmId", s."EventKey", s."CloudId",
|
||||
s."Datacenter", s."Cluster", s."Folder",
|
||||
@@ -1381,9 +1423,8 @@ INSERT INTO %s (
|
||||
)
|
||||
SELECT
|
||||
agg."InventoryId", agg."Name", agg."Vcenter", agg."VmId", agg."EventKey", agg."CloudId",
|
||||
COALESCE(agg.any_creation, agg.first_present, 0) AS "CreationTime",
|
||||
COALESCE(agg.any_creation, 0) AS "CreationTime",
|
||||
CASE
|
||||
WHEN NULLIF(agg.inv_deletion, 0) IS NOT NULL THEN NULLIF(agg.inv_deletion, 0)
|
||||
WHEN totals.max_snapshot IS NOT NULL AND agg.last_present < totals.max_snapshot THEN COALESCE(
|
||||
NULLIF(agg.any_deletion, 0),
|
||||
(SELECT MIN(s2."SnapshotTime") FROM snapshots s2 WHERE s2."SnapshotTime" > agg.last_present),
|
||||
@@ -1429,46 +1470,13 @@ SELECT
|
||||
agg.last_present AS "SnapshotTime",
|
||||
agg.samples_present AS "SamplesPresent",
|
||||
CASE WHEN totals.total_samples > 0
|
||||
THEN (1.0 * agg.samples_present / totals.total_samples) * (
|
||||
SELECT s2."VcpuCount"
|
||||
FROM snapshots s2
|
||||
WHERE s2."Vcenter" = agg."Vcenter"
|
||||
AND (
|
||||
(s2."VmId" = agg."VmId" AND s2."VmId" IS NOT NULL AND agg."VmId" IS NOT NULL)
|
||||
OR (s2."VmUuid" = agg."VmUuid" AND s2."VmUuid" IS NOT NULL AND agg."VmUuid" IS NOT NULL)
|
||||
OR (LOWER(s2."Name") = LOWER(agg."Name") AND s2."Name" IS NOT NULL AND agg."Name" IS NOT NULL)
|
||||
)
|
||||
ORDER BY s2."SnapshotTime" DESC
|
||||
LIMIT 1
|
||||
)
|
||||
THEN 1.0 * agg.sum_vcpu / totals.total_samples
|
||||
ELSE NULL END AS "AvgVcpuCount",
|
||||
CASE WHEN totals.total_samples > 0
|
||||
THEN (1.0 * agg.samples_present / totals.total_samples) * (
|
||||
SELECT s2."RamGB"
|
||||
FROM snapshots s2
|
||||
WHERE s2."Vcenter" = agg."Vcenter"
|
||||
AND (
|
||||
(s2."VmId" = agg."VmId" AND s2."VmId" IS NOT NULL AND agg."VmId" IS NOT NULL)
|
||||
OR (s2."VmUuid" = agg."VmUuid" AND s2."VmUuid" IS NOT NULL AND agg."VmUuid" IS NOT NULL)
|
||||
OR (LOWER(s2."Name") = LOWER(agg."Name") AND s2."Name" IS NOT NULL AND agg."Name" IS NOT NULL)
|
||||
)
|
||||
ORDER BY s2."SnapshotTime" DESC
|
||||
LIMIT 1
|
||||
)
|
||||
THEN 1.0 * agg.sum_ram / totals.total_samples
|
||||
ELSE NULL END AS "AvgRamGB",
|
||||
CASE WHEN totals.total_samples > 0
|
||||
THEN (1.0 * agg.samples_present / totals.total_samples) * (
|
||||
SELECT s2."ProvisionedDisk"
|
||||
FROM snapshots s2
|
||||
WHERE s2."Vcenter" = agg."Vcenter"
|
||||
AND (
|
||||
(s2."VmId" = agg."VmId" AND s2."VmId" IS NOT NULL AND agg."VmId" IS NOT NULL)
|
||||
OR (s2."VmUuid" = agg."VmUuid" AND s2."VmUuid" IS NOT NULL AND agg."VmUuid" IS NOT NULL)
|
||||
OR (LOWER(s2."Name") = LOWER(agg."Name") AND s2."Name" IS NOT NULL AND agg."Name" IS NOT NULL)
|
||||
)
|
||||
ORDER BY s2."SnapshotTime" DESC
|
||||
LIMIT 1
|
||||
)
|
||||
THEN 1.0 * agg.sum_disk / totals.total_samples
|
||||
ELSE NULL END AS "AvgProvisionedDisk",
|
||||
CASE WHEN totals.total_samples > 0
|
||||
THEN 1.0 * agg.samples_present / totals.total_samples
|
||||
@@ -1543,7 +1551,6 @@ UPDATE %s dst
|
||||
SET
|
||||
"CreationTime" = CASE
|
||||
WHEN t.any_creation IS NOT NULL AND t.any_creation > 0 THEN LEAST(COALESCE(NULLIF(dst."CreationTime", 0), t.any_creation), t.any_creation)
|
||||
WHEN t.first_seen IS NOT NULL THEN LEAST(COALESCE(NULLIF(dst."CreationTime", 0), t.first_seen), t.first_seen)
|
||||
ELSE dst."CreationTime"
|
||||
END,
|
||||
"DeletionTime" = CASE
|
||||
@@ -1605,7 +1612,6 @@ SET
|
||||
(
|
||||
SELECT CASE
|
||||
WHEN t.any_creation IS NOT NULL AND t.any_creation > 0 AND COALESCE(NULLIF(%[2]s."CreationTime", 0), t.any_creation) > t.any_creation THEN t.any_creation
|
||||
WHEN t.any_creation IS NULL AND t.first_seen IS NOT NULL AND COALESCE(NULLIF(%[2]s."CreationTime", 0), t.first_seen) > t.first_seen THEN t.first_seen
|
||||
ELSE NULL
|
||||
END
|
||||
FROM enriched t
|
||||
|
||||
Reference in New Issue
Block a user