mirror of
https://github.com/rcourtman/Pulse.git
synced 2026-02-18 00:17:39 +01:00
fix(pro): add error tracking to patrol history store
- Add lastSaveError, lastSaveTime, onSaveError fields to PatrolRunHistoryStore - Add GetPersistenceStatus() and SetOnSaveError() methods - Consistent with findings store and cost store error handling
This commit is contained in:
@@ -110,6 +110,11 @@ type PatrolRunHistoryStore struct {
|
||||
saveTimer *time.Timer
|
||||
savePending bool
|
||||
saveDebounce time.Duration
|
||||
|
||||
// Error tracking for persistence
|
||||
lastSaveError error
|
||||
lastSaveTime time.Time
|
||||
onSaveError func(err error)
|
||||
}
|
||||
|
||||
// NewPatrolRunHistoryStore creates a new patrol run history store
|
||||
@@ -228,11 +233,36 @@ func (s *PatrolRunHistoryStore) scheduleSaveLocked() {
|
||||
if persistence != nil {
|
||||
if err := persistence.SavePatrolRunHistory(runs); err != nil {
|
||||
log.Error().Err(err).Msg("Failed to save patrol run history")
|
||||
s.mu.Lock()
|
||||
s.lastSaveError = err
|
||||
s.mu.Unlock()
|
||||
if onErr := s.onSaveError; onErr != nil {
|
||||
onErr(err)
|
||||
}
|
||||
} else {
|
||||
s.mu.Lock()
|
||||
s.lastSaveError = nil
|
||||
s.lastSaveTime = time.Now()
|
||||
s.mu.Unlock()
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// SetOnSaveError sets a callback that is called when persistence fails.
|
||||
func (s *PatrolRunHistoryStore) SetOnSaveError(fn func(err error)) {
|
||||
s.mu.Lock()
|
||||
defer s.mu.Unlock()
|
||||
s.onSaveError = fn
|
||||
}
|
||||
|
||||
// GetPersistenceStatus returns the last save error, last save time, and whether persistence is configured.
|
||||
func (s *PatrolRunHistoryStore) GetPersistenceStatus() (lastError error, lastSaveTime time.Time, hasPersistence bool) {
|
||||
s.mu.RLock()
|
||||
defer s.mu.RUnlock()
|
||||
return s.lastSaveError, s.lastSaveTime, s.persistence != nil
|
||||
}
|
||||
|
||||
// FlushPersistence immediately saves any pending changes
|
||||
func (s *PatrolRunHistoryStore) FlushPersistence() error {
|
||||
s.mu.Lock()
|
||||
|
||||
Reference in New Issue
Block a user