diff --git a/db/helpers.go b/db/helpers.go index 44ed485..f51c930 100644 --- a/db/helpers.go +++ b/db/helpers.go @@ -1017,8 +1017,11 @@ WITH snapshots AS ( MIN(s."SnapshotTime") AS first_present, MAX(s."SnapshotTime") AS last_present, COUNT(*) AS samples_present, - s."Datacenter", s."Cluster", s."Folder", s."ProvisionedDisk", s."VcpuCount", - s."RamGB", s."IsTemplate", s."PoweredOn", s."SrmPlaceholder", s."VmUuid", + s."Datacenter", s."Cluster", s."Folder", + AVG(COALESCE(s."ProvisionedDisk",0)) AS avg_disk, + AVG(COALESCE(s."VcpuCount",0)) AS avg_vcpu_raw, + AVG(COALESCE(s."RamGB",0)) AS avg_ram_raw, + s."IsTemplate", s."PoweredOn", s."SrmPlaceholder", s."VmUuid", SUM(CASE WHEN s."VcpuCount" IS NOT NULL THEN s."VcpuCount" ELSE 0 END) AS sum_vcpu, SUM(CASE WHEN s."RamGB" IS NOT NULL THEN s."RamGB" ELSE 0 END) AS sum_ram, SUM(CASE WHEN s."ProvisionedDisk" IS NOT NULL THEN s."ProvisionedDisk" ELSE 0 END) AS sum_disk, @@ -1030,8 +1033,8 @@ WITH snapshots AS ( 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", s."ProvisionedDisk", s."VcpuCount", - s."RamGB", s."IsTemplate", s."PoweredOn", s."SrmPlaceholder", s."VmUuid" + s."Datacenter", s."Cluster", s."Folder", + s."IsTemplate", s."PoweredOn", s."SrmPlaceholder", s."VmUuid" ) INSERT INTO %s ( "InventoryId", "Name", "Vcenter", "VmId", "EventKey", "CloudId", "CreationTime", "DeletionTime", @@ -1062,8 +1065,32 @@ SELECT ORDER BY s2."SnapshotTime" DESC LIMIT 1 ) AS "ResourcePool", - agg."Datacenter", agg."Cluster", agg."Folder", agg."ProvisionedDisk", agg."VcpuCount", - agg."RamGB", agg."IsTemplate", agg."PoweredOn", agg."SrmPlaceholder", agg."VmUuid", + agg."Datacenter", agg."Cluster", agg."Folder", + ( + SELECT s2."ProvisionedDisk" + FROM snapshots s2 + WHERE s2."VmId" = agg."VmId" + AND s2."Vcenter" = agg."Vcenter" + ORDER BY s2."SnapshotTime" DESC + LIMIT 1 + ) AS "ProvisionedDisk", + ( + SELECT s2."VcpuCount" + FROM snapshots s2 + WHERE s2."VmId" = agg."VmId" + AND s2."Vcenter" = agg."Vcenter" + ORDER BY s2."SnapshotTime" DESC + LIMIT 1 + ) AS "VcpuCount", + ( + SELECT s2."RamGB" + FROM snapshots s2 + WHERE s2."VmId" = agg."VmId" + AND s2."Vcenter" = agg."Vcenter" + ORDER BY s2."SnapshotTime" DESC + LIMIT 1 + ) AS "RamGB", + agg."IsTemplate", agg."PoweredOn", agg."SrmPlaceholder", agg."VmUuid", agg.samples_present AS "SamplesPresent", CASE WHEN totals.total_samples > 0 THEN 1.0 * agg.sum_vcpu / totals.total_samples @@ -1105,8 +1132,8 @@ FROM agg CROSS JOIN totals GROUP BY agg."InventoryId", agg."Name", agg."Vcenter", agg."VmId", agg."EventKey", agg."CloudId", - agg."Datacenter", agg."Cluster", agg."Folder", agg."ProvisionedDisk", agg."VcpuCount", - agg."RamGB", agg."IsTemplate", agg."PoweredOn", agg."SrmPlaceholder", agg."VmUuid", + agg."Datacenter", agg."Cluster", agg."Folder", + agg."IsTemplate", agg."PoweredOn", agg."SrmPlaceholder", agg."VmUuid", agg.any_creation, agg.any_deletion, agg.first_present, agg.last_present, totals.total_samples; `, unionQuery, tableName)