fix(monitor): inject time into ComputeDailyBreakdown for testability
Test failed near midnight when outage events fell in previous day's bucket. Accept a now parameter instead of calling time.Now() internally.
This commit was merged in pull request #91.
This commit is contained in:
@@ -127,8 +127,7 @@ func ComputeSLA(changes []models.StateChange, currentStatus string, window time.
|
||||
return report
|
||||
}
|
||||
|
||||
func ComputeDailyBreakdown(changes []models.StateChange, currentStatus string, days int) []DayReport {
|
||||
now := time.Now()
|
||||
func ComputeDailyBreakdown(changes []models.StateChange, currentStatus string, days int, now time.Time) []DayReport {
|
||||
reports := make([]DayReport, days)
|
||||
|
||||
for i := 0; i < days; i++ {
|
||||
|
||||
@@ -118,13 +118,14 @@ func TestComputeSLA_LateNotDown(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestComputeDailyBreakdown(t *testing.T) {
|
||||
now := time.Now()
|
||||
// Use a fixed time well past midnight so the outage always falls within today's window.
|
||||
now := time.Date(2026, 6, 4, 15, 0, 0, 0, time.UTC)
|
||||
changes := []models.StateChange{
|
||||
{ToStatus: "UP", ChangedAt: now.Add(-1 * time.Hour)},
|
||||
{ToStatus: "DOWN", FromStatus: "UP", ChangedAt: now.Add(-2 * time.Hour)},
|
||||
}
|
||||
|
||||
days := ComputeDailyBreakdown(changes, "UP", 7)
|
||||
days := ComputeDailyBreakdown(changes, "UP", 7, now)
|
||||
|
||||
if len(days) != 7 {
|
||||
t.Fatalf("expected 7 days, got %d", len(days))
|
||||
|
||||
@@ -329,7 +329,7 @@ func (m *Model) recomputeSLA() {
|
||||
}
|
||||
|
||||
m.slaReport = monitor.ComputeSLA(changes, currentStatus, period.duration)
|
||||
m.slaDailyBreakdown = monitor.ComputeDailyBreakdown(changes, currentStatus, period.days)
|
||||
m.slaDailyBreakdown = monitor.ComputeDailyBreakdown(changes, currentStatus, period.days, time.Now())
|
||||
|
||||
m.slaViewport = viewport.New(
|
||||
m.termWidth-chromePadH,
|
||||
|
||||
Reference in New Issue
Block a user