Reduce metric writes and preserve scheduler history

This commit is contained in:
Mikei386
2026-07-13 20:53:16 +02:00
parent ea97d7dbc9
commit 819055cbf0
12 changed files with 228 additions and 27 deletions
+26 -1
View File
@@ -9,6 +9,7 @@ import (
"time"
"git.casaderoll.de/michael/urbm/internal/model"
"git.casaderoll.de/michael/urbm/internal/queue"
"git.casaderoll.de/michael/urbm/internal/store"
)
@@ -39,7 +40,8 @@ func TestRepositoryLockHonorsContextCancellation(t *testing.T) {
}
func TestBackupMetricsSurviveClearedRunSnapshot(t *testing.T) {
st := store.New(t.TempDir())
dir := t.TempDir()
st := store.New(dir)
if err := st.Init(); err != nil {
t.Fatal(err)
}
@@ -47,13 +49,36 @@ func TestBackupMetricsSurviveClearedRunSnapshot(t *testing.T) {
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})
before, err := os.ReadFile(filepath.Join(dir, "backup-metrics.jsonl"))
if err != nil {
t.Fatal(err)
}
s.queuePersistence(nil)
after, err := os.ReadFile(filepath.Join(dir, "backup-metrics.jsonl"))
if err != nil {
t.Fatal(err)
}
if string(after) != string(before) {
t.Fatal("clearing activities rewrote the backup metric file")
}
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 TestLastRunUsesDurableMetricAfterActivityClear(t *testing.T) {
created := time.Date(2026, 7, 13, 1, 0, 0, 0, time.UTC)
finished := created.Add(3 * time.Hour)
q := queue.New(nil, nil)
q.RestoreHistory([]model.Run{{ID: "run-1", JobID: "job-1", Status: "success", CreatedAt: created}})
s := &Service{queue: q, backupMetrics: []model.BackupMetric{{RunID: "run-1", JobID: "job-1", Status: "success", FinishedAt: finished}}}
q.ClearHistory()
if got := s.LastRun("job-1"); !got.Equal(finished) {
t.Fatalf("last run after activity clear = %v, want %v", got, finished)
}
}
func TestBackupMetricsOnlyCaptureCompletedSuccessfulBackupsOnce(t *testing.T) {
st := store.New(t.TempDir())
s := &Service{store: st}