From aa6abb8cb2f03174e10890f21df411e68c14ba92 Mon Sep 17 00:00:00 2001 From: Nathan Coad Date: Wed, 28 Jan 2026 13:27:05 +1100 Subject: [PATCH] bugfix hourly totals --- internal/report/snapshots.go | 35 ++++++++++++++++++++++++---- internal/tasks/inventorySnapshots.go | 1 + 2 files changed, 32 insertions(+), 4 deletions(-) diff --git a/internal/report/snapshots.go b/internal/report/snapshots.go index fbf4745..9d14cd6 100644 --- a/internal/report/snapshots.go +++ b/internal/report/snapshots.go @@ -795,22 +795,37 @@ func SaveTableReport(logger *slog.Logger, Database db.Database, ctx context.Cont } func addTotalsChartSheet(logger *slog.Logger, database db.Database, ctx context.Context, xlsx *excelize.File, tableName string) { + if logger == nil { + logger = slog.Default() + } if strings.HasPrefix(tableName, "inventory_daily_summary_") { suffix := strings.TrimPrefix(tableName, "inventory_daily_summary_") dayStart, err := time.ParseInLocation("20060102", suffix, time.Local) if err != nil { + logger.Debug("hourly totals skip: invalid daily summary suffix", "table", tableName, "suffix", suffix, "error", err) return } dayEnd := dayStart.AddDate(0, 0, 1) if err := EnsureSnapshotRegistry(ctx, database); err != nil { + logger.Debug("hourly totals skip: snapshot registry unavailable", "table", tableName, "error", err) return } records, err := SnapshotRecordsWithFallback(ctx, database, "hourly", "inventory_hourly_", "epoch", dayStart, dayEnd.Add(2*time.Hour)) - if err != nil || len(records) == 0 { + if err != nil { + logger.Debug("hourly totals skip: failed to load hourly snapshots", "table", tableName, "error", err) + return + } + if len(records) == 0 { + logger.Debug("hourly totals skip: no hourly snapshots found", "table", tableName, "window_start", dayStart, "window_end", dayEnd) return } points, err := buildHourlyTotals(ctx, logger, database.DB(), records, dayStart, dayEnd) - if err != nil || len(points) == 0 { + if err != nil { + logger.Debug("hourly totals skip: build failed", "table", tableName, "error", err) + return + } + if len(points) == 0 { + logger.Debug("hourly totals skip: no hourly totals points", "table", tableName, "window_start", dayStart, "window_end", dayEnd) return } writeTotalsChart(logger, xlsx, "Hourly Totals", points) @@ -821,18 +836,30 @@ func addTotalsChartSheet(logger *slog.Logger, database db.Database, ctx context. suffix := strings.TrimPrefix(tableName, "inventory_monthly_summary_") monthStart, err := time.ParseInLocation("200601", suffix, time.Local) if err != nil { + logger.Debug("daily totals skip: invalid monthly summary suffix", "table", tableName, "suffix", suffix, "error", err) return } monthEnd := monthStart.AddDate(0, 1, 0) if err := EnsureSnapshotRegistry(ctx, database); err != nil { + logger.Debug("daily totals skip: snapshot registry unavailable", "table", tableName, "error", err) return } records, err := SnapshotRecordsWithFallback(ctx, database, "daily", "inventory_daily_summary_", "20060102", monthStart, monthEnd) - if err != nil || len(records) == 0 { + if err != nil { + logger.Debug("daily totals skip: failed to load daily snapshots", "table", tableName, "error", err) + return + } + if len(records) == 0 { + logger.Debug("daily totals skip: no daily snapshots found", "table", tableName, "window_start", monthStart, "window_end", monthEnd) return } points, err := buildDailyTotals(ctx, database.DB(), records, true) - if err != nil || len(points) == 0 { + if err != nil { + logger.Debug("daily totals skip: build failed", "table", tableName, "error", err) + return + } + if len(points) == 0 { + logger.Debug("daily totals skip: no daily totals points", "table", tableName, "window_start", monthStart, "window_end", monthEnd) return } writeTotalsChart(logger, xlsx, "Daily Totals", points) diff --git a/internal/tasks/inventorySnapshots.go b/internal/tasks/inventorySnapshots.go index 9f86dfd..9a66d17 100644 --- a/internal/tasks/inventorySnapshots.go +++ b/internal/tasks/inventorySnapshots.go @@ -204,6 +204,7 @@ func (c *CronTask) RunVcenterSnapshotHourly(ctx context.Context, logger *slog.Lo rowCount, err := db.TableRowCount(ctx, dbConn, tableName) if err != nil { c.Logger.Warn("unable to count hourly snapshot rows", "error", err, "table", tableName) + rowCount = -1 } if err := report.RegisterSnapshot(ctx, c.Database, "hourly", tableName, startTime, rowCount); err != nil { c.Logger.Warn("failed to register hourly snapshot", "error", err, "table", tableName)