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
+24
View File
@@ -70,8 +70,32 @@ func (s *Store) SaveRuns(runs []model.Run) error {
return writeJSONAtomic(s.runsPath(), runs, 0600)
}
func (s *Store) LoadBackupMetrics() ([]model.BackupMetric, error) {
s.mu.RLock()
defer s.mu.RUnlock()
var metrics []model.BackupMetric
if err := readJSON(s.backupMetricsPath(), &metrics); errors.Is(err, os.ErrNotExist) {
return []model.BackupMetric{}, nil
} else if err != nil {
return nil, err
}
return metrics, nil
}
func (s *Store) SaveBackupMetrics(metrics []model.BackupMetric) error {
s.mu.Lock()
defer s.mu.Unlock()
if len(metrics) > 5000 {
metrics = metrics[len(metrics)-5000:]
}
return writeJSONAtomic(s.backupMetricsPath(), metrics, 0600)
}
func (s *Store) configPath() string { return filepath.Join(s.dir, "config.json") }
func (s *Store) runsPath() string { return filepath.Join(s.dir, "runs.json") }
func (s *Store) backupMetricsPath() string {
return filepath.Join(s.dir, "backup-metrics.json")
}
func readJSON(path string, target any) error {
b, err := os.ReadFile(path)