diff options
| author | zwlucas <lucas.fariamo08@gmail.com> | 2026-05-29 20:41:33 +0000 |
|---|---|---|
| committer | zwlucas <lucas.fariamo08@gmail.com> | 2026-05-29 20:41:33 +0000 |
| commit | 9218d22954d61296a32c49373ab0f17f0be59cfe (patch) | |
| tree | 595b94ce7c2b5eed9760f79e7781653d6b554d18 /backend/internal/store | |
| parent | d186a989b6808ff39fcd43a9f0b478aebc4aa346 (diff) | |
| download | yaum-9218d22954d61296a32c49373ab0f17f0be59cfe.tar.gz yaum-9218d22954d61296a32c49373ab0f17f0be59cfe.zip | |
feat: add SSL info tracking and server metrics collection
Signed-off-by: zwlucas <lucas.fariamo08@gmail.com>
Diffstat (limited to 'backend/internal/store')
| -rw-r--r-- | backend/internal/store/memory.go | 19 | ||||
| -rw-r--r-- | backend/internal/store/postgres.go | 28 | ||||
| -rw-r--r-- | backend/internal/store/store.go | 3 |
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 } |