aboutsummaryrefslogtreecommitdiff
path: root/backend/internal/store/memory.go
diff options
context:
space:
mode:
authorzwlucas <lucas.fariamo08@gmail.com>2026-05-29 20:21:48 +0000
committerzwlucas <lucas.fariamo08@gmail.com>2026-05-29 20:21:48 +0000
commitd186a989b6808ff39fcd43a9f0b478aebc4aa346 (patch)
treeabf32684ea56e6066d8584e0378227ffc397ace2 /backend/internal/store/memory.go
parent6cc0bfd1d79074df790272b8091b1f0226d14283 (diff)
downloadyaum-d186a989b6808ff39fcd43a9f0b478aebc4aa346.tar.gz
yaum-d186a989b6808ff39fcd43a9f0b478aebc4aa346.zip
feat: enhance maintenance management and heartbeat history features
- Updated Store interface to include methods for managing maintenances. - Modified API functions to support pagination for heartbeat history and added CRUD operations for maintenances. - Enhanced types to include paginated responses and initial log entries. - Implemented maintenance management UI in the admin panel with create, edit, and delete functionalities. - Updated service detail page to display paginated heartbeat history and improved chart rendering. - Refactored status page to accommodate new data structures and ensure consistent data handling. Signed-off-by: Lucas Faria Mendes <lucas.fariamo08@gmail.com>
Diffstat (limited to 'backend/internal/store/memory.go')
-rw-r--r--backend/internal/store/memory.go81
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()