Persist dashboard backup metrics separately

This commit is contained in:
Mikei386
2026-07-13 20:39:31 +02:00
parent 2ecdcdf602
commit b1fba3ed16
15 changed files with 183 additions and 14 deletions
+35
View File
@@ -8,6 +8,7 @@ import (
"time"
"git.casaderoll.de/michael/urbm/internal/model"
"git.casaderoll.de/michael/urbm/internal/store"
)
func TestRepositoryLockHonorsContextCancellation(t *testing.T) {
@@ -25,6 +26,40 @@ func TestRepositoryLockHonorsContextCancellation(t *testing.T) {
unlock()
}
func TestBackupMetricsSurviveClearedRunSnapshot(t *testing.T) {
st := store.New(t.TempDir())
if err := st.Init(); err != nil {
t.Fatal(err)
}
s := &Service{store: st, persistRuns: make(chan []model.Run, 1)}
finished := time.Date(2026, 7, 13, 1, 30, 0, 0, time.UTC)
run := model.Run{ID: "run-1", JobID: "job-1", TaskType: "backup", Status: "success", FinishedAt: &finished, BytesProcessed: 1024, FilesProcessed: 12}
s.queuePersistence([]model.Run{run})
s.queuePersistence(nil)
metrics := s.BackupMetrics()
if len(metrics) != 1 || metrics[0].RunID != run.ID || metrics[0].FilesProcessed != 12 {
t.Fatalf("backup metrics after clear = %#v", metrics)
}
}
func TestBackupMetricsOnlyCaptureCompletedSuccessfulBackupsOnce(t *testing.T) {
st := store.New(t.TempDir())
s := &Service{store: st}
finished := time.Now().UTC()
valid := model.Run{ID: "valid", JobID: "job-1", TaskType: "backup", Status: "warning", FinishedAt: &finished}
s.captureBackupMetrics([]model.Run{
valid,
valid,
{ID: "failed", TaskType: "backup", Status: "failed", FinishedAt: &finished},
{ID: "active", TaskType: "backup", Status: "running"},
{ID: "rsync", TaskType: "rsync", Status: "success", FinishedAt: &finished},
})
metrics := s.BackupMetrics()
if len(metrics) != 1 || metrics[0].RunID != valid.ID {
t.Fatalf("captured backup metrics = %#v", metrics)
}
}
func TestPersistentRunLogsAreWrittenAndPruned(t *testing.T) {
dir := t.TempDir()
config := model.DefaultConfig()