aboutsummaryrefslogtreecommitdiff
path: root/backend/internal/store
diff options
context:
space:
mode:
Diffstat (limited to 'backend/internal/store')
-rw-r--r--backend/internal/store/memory.go19
-rw-r--r--backend/internal/store/postgres.go28
-rw-r--r--backend/internal/store/store.go3
3 files changed, 50 insertions, 0 deletions
diff --git a/backend/internal/store/memory.go b/backend/internal/store/memory.go
index 1ee2e05..78defcd 100644
--- a/backend/internal/store/memory.go
+++ b/backend/internal/store/memory.go
@@ -14,6 +14,7 @@ type MemoryStore struct {
services map[int]*model.Service
heartbeats map[int][]*model.Heartbeat
maintenances []model.Maintenance
+ sslInfo map[int]model.SSLInfo
nextSvcID int
nextHbID int
nextMtnID int
@@ -24,6 +25,7 @@ func NewMemoryStore() *MemoryStore {
services: make(map[int]*model.Service),
heartbeats: make(map[int][]*model.Heartbeat),
maintenances: make([]model.Maintenance, 0),
+ sslInfo: make(map[int]model.SSLInfo),
nextSvcID: 1,
nextHbID: 1,
nextMtnID: 1,
@@ -346,3 +348,20 @@ func (s *MemoryStore) GetServiceStats(serviceID int) (*model.ServiceStats, error
TotalChecks30d: t30,
}, nil
}
+
+func (s *MemoryStore) GetSSLInfo(serviceID int) (*model.SSLInfo, error) {
+ s.mu.RLock()
+ defer s.mu.RUnlock()
+ info, ok := s.sslInfo[serviceID]
+ if !ok {
+ return nil, nil
+ }
+ return &info, nil
+}
+
+func (s *MemoryStore) SaveSSLInfo(info model.SSLInfo) error {
+ s.mu.Lock()
+ defer s.mu.Unlock()
+ s.sslInfo[info.ServiceID] = info
+ return nil
+}
diff --git a/backend/internal/store/postgres.go b/backend/internal/store/postgres.go
index 57fa258..fb07bdc 100644
--- a/backend/internal/store/postgres.go
+++ b/backend/internal/store/postgres.go
@@ -393,3 +393,31 @@ func (s *PostgresStore) DeleteMaintenance(id int) error {
}
return nil
}
+
+func (s *PostgresStore) GetSSLInfo(serviceID int) (*model.SSLInfo, error) {
+ var info model.SSLInfo
+ err := s.pool.QueryRow(context.Background(),
+ `SELECT service_id, issuer, expires_at, days_remaining, checked_at FROM ssl_info WHERE service_id = $1`,
+ serviceID,
+ ).Scan(&info.ServiceID, &info.Issuer, &info.ExpiresAt, &info.DaysRemaining, &info.CheckedAt)
+ if err != nil {
+ if err == pgx.ErrNoRows {
+ return nil, nil
+ }
+ return nil, fmt.Errorf("get ssl info: %w", err)
+ }
+ return &info, nil
+}
+
+func (s *PostgresStore) SaveSSLInfo(info model.SSLInfo) error {
+ _, err := s.pool.Exec(context.Background(),
+ `INSERT INTO ssl_info (service_id, issuer, expires_at, days_remaining, checked_at)
+ VALUES ($1, $2, $3, $4, $5)
+ ON CONFLICT (service_id) DO UPDATE SET issuer=$2, expires_at=$3, days_remaining=$4, checked_at=$5`,
+ info.ServiceID, info.Issuer, info.ExpiresAt, info.DaysRemaining, info.CheckedAt,
+ )
+ if err != nil {
+ return fmt.Errorf("save ssl info: %w", err)
+ }
+ return nil
+}
diff --git a/backend/internal/store/store.go b/backend/internal/store/store.go
index 2c34b1c..3fc348d 100644
--- a/backend/internal/store/store.go
+++ b/backend/internal/store/store.go
@@ -25,4 +25,7 @@ type Store interface {
AddMaintenance(model.Maintenance) (*model.Maintenance, error)
UpdateMaintenance(int, model.Maintenance) (*model.Maintenance, error)
DeleteMaintenance(int) error
+
+ GetSSLInfo(int) (*model.SSLInfo, error)
+ SaveSSLInfo(model.SSLInfo) error
}