TestDiskAlertExtraFsMultiMinute tests that multi-minute disk alerts correctly use historical per-minute values for extra (non-root) filesystems, not the current live snapshot.
(t *testing.T)
| 19 | // TestDiskAlertExtraFsMultiMinute tests that multi-minute disk alerts correctly use |
| 20 | // historical per-minute values for extra (non-root) filesystems, not the current live snapshot. |
| 21 | func TestDiskAlertExtraFsMultiMinute(t *testing.T) { |
| 22 | hub, user := beszelTests.GetHubWithUser(t) |
| 23 | defer hub.Cleanup() |
| 24 | |
| 25 | systems, err := beszelTests.CreateSystems(hub, 1, user.Id, "up") |
| 26 | require.NoError(t, err) |
| 27 | systemRecord := systems[0] |
| 28 | |
| 29 | // Disk alert: threshold 80%, min=2 (requires historical averaging) |
| 30 | diskAlert, err := beszelTests.CreateRecord(hub, "alerts", map[string]any{ |
| 31 | "name": "Disk", |
| 32 | "system": systemRecord.Id, |
| 33 | "user": user.Id, |
| 34 | "value": 80, // threshold: 80% |
| 35 | "min": 2, // 2 minutes - requires historical averaging |
| 36 | }) |
| 37 | require.NoError(t, err) |
| 38 | assert.False(t, diskAlert.GetBool("triggered"), "Alert should not be triggered initially") |
| 39 | |
| 40 | am := hub.GetAlertManager() |
| 41 | now := time.Now().UTC() |
| 42 | |
| 43 | extraFsHigh := map[string]*system.FsStats{ |
| 44 | "/mnt/data": {DiskTotal: 1000, DiskUsed: 920}, // 92% - above threshold |
| 45 | } |
| 46 | |
| 47 | // Insert 4 historical records spread over 3 minutes (same pattern as battery tests). |
| 48 | // The oldest record must predate (now - 2min) so the alert time window is valid. |
| 49 | recordTimes := []time.Duration{ |
| 50 | -180 * time.Second, // 3 min ago - anchors oldest record before alert.time |
| 51 | -90 * time.Second, |
| 52 | -60 * time.Second, |
| 53 | -30 * time.Second, |
| 54 | } |
| 55 | |
| 56 | for _, offset := range recordTimes { |
| 57 | stats := system.Stats{ |
| 58 | DiskPct: 30, // root disk at 30% - below threshold |
| 59 | ExtraFs: extraFsHigh, |
| 60 | } |
| 61 | statsJSON, _ := json.Marshal(stats) |
| 62 | |
| 63 | recordTime := now.Add(offset) |
| 64 | record, err := beszelTests.CreateRecord(hub, "system_stats", map[string]any{ |
| 65 | "system": systemRecord.Id, |
| 66 | "type": "1m", |
| 67 | "stats": string(statsJSON), |
| 68 | }) |
| 69 | require.NoError(t, err) |
| 70 | record.SetRaw("created", recordTime.Format(types.DefaultDateLayout)) |
| 71 | err = hub.SaveNoValidate(record) |
| 72 | require.NoError(t, err) |
| 73 | } |
| 74 | |
| 75 | combinedDataHigh := &system.CombinedData{ |
| 76 | Stats: system.Stats{ |
| 77 | DiskPct: 30, |
| 78 | ExtraFs: extraFsHigh, |
nothing calls this directly
no test coverage detected