diff options
Diffstat (limited to 'backend/internal/store/memory.go')
| -rw-r--r-- | backend/internal/store/memory.go | 81 |
1 files changed, 76 insertions, 5 deletions
diff --git a/backend/internal/store/memory.go b/backend/internal/store/memory.go index a77e877..1ee2e05 100644 --- a/backend/internal/store/memory.go +++ b/backend/internal/store/memory.go @@ -49,6 +49,17 @@ func (s *MemoryStore) SeedMockData() { s.heartbeats[svc.ID] = make([]*model.Heartbeat, 0) s.seedHistory(svc.ID) } + + s.maintenances = []model.Maintenance{ + { + ID: s.nextMtnID, + Title: "Manutenção Programada — Servidores", + StartTime: now.Add(-1 * time.Hour), + EndTime: now.Add(1 * time.Hour), + IsActive: true, + }, + } + s.nextMtnID++ } func (s *MemoryStore) seedHistory(serviceID int) { @@ -187,21 +198,35 @@ func (s *MemoryStore) AddHeartbeat(hb model.Heartbeat) error { return nil } -func (s *MemoryStore) GetHistory(serviceID int, limit int) ([]model.Heartbeat, error) { +func (s *MemoryStore) GetHistory(serviceID int, limit int, offset int) ([]model.Heartbeat, error) { s.mu.RLock() defer s.mu.RUnlock() hbs := s.heartbeats[serviceID] - if len(hbs) > limit { - hbs = hbs[len(hbs)-limit:] - } - result := make([]model.Heartbeat, len(hbs)) + reverse := make([]*model.Heartbeat, len(hbs)) for i, hb := range hbs { + reverse[len(hbs)-1-i] = hb + } + if offset >= len(reverse) { + return []model.Heartbeat{}, nil + } + if offset+limit > len(reverse) { + limit = len(reverse) - offset + } + page := reverse[offset : offset+limit] + result := make([]model.Heartbeat, len(page)) + for i, hb := range page { result[i] = *hb } return result, nil } +func (s *MemoryStore) CountHeartbeats(serviceID int) (int, error) { + s.mu.RLock() + defer s.mu.RUnlock() + return len(s.heartbeats[serviceID]), nil +} + func (s *MemoryStore) GetLastHeartbeat(serviceID int) (*model.Heartbeat, error) { s.mu.RLock() defer s.mu.RUnlock() @@ -225,6 +250,52 @@ func (s *MemoryStore) GetActiveMaintenance(now time.Time) (*model.Maintenance, e return nil, nil } +func (s *MemoryStore) ListMaintenances() ([]model.Maintenance, error) { + s.mu.RLock() + defer s.mu.RUnlock() + + result := make([]model.Maintenance, len(s.maintenances)) + copy(result, s.maintenances) + return result, nil +} + +func (s *MemoryStore) AddMaintenance(m model.Maintenance) (*model.Maintenance, error) { + s.mu.Lock() + defer s.mu.Unlock() + + m.ID = s.nextMtnID + s.nextMtnID++ + s.maintenances = append(s.maintenances, m) + return &m, nil +} + +func (s *MemoryStore) UpdateMaintenance(id int, m model.Maintenance) (*model.Maintenance, error) { + s.mu.Lock() + defer s.mu.Unlock() + + for i, existing := range s.maintenances { + if existing.ID == id { + m.ID = id + s.maintenances[i] = m + return &m, nil + } + } + return nil, errors.New("manutencao nao encontrada") +} + +func (s *MemoryStore) DeleteMaintenance(id int) error { + s.mu.Lock() + defer s.mu.Unlock() + + for i, m := range s.maintenances { + if m.ID == id { + s.maintenances = append(s.maintenances[:i], s.maintenances[i+1:]...) + return nil + } + } + return errors.New("manutencao nao encontrada") +} + func (s *MemoryStore) GetServiceStats(serviceID int) (*model.ServiceStats, error) { s.mu.RLock() defer s.mu.RUnlock() |