Files
GL/application/health/service.go
T

57 lines
1.2 KiB
Go

// Package health provides the service readiness use case.
package health
import (
"context"
"gl/domain/ledger"
)
type Database interface {
Ping(context.Context) error
}
type SettlementMonitor interface {
Stats(context.Context) (ledger.SettlementStats, error)
}
type Status struct {
Serving bool
DatabaseReady bool
SettlementEnabled bool
SettlementReady bool
SettlementStats ledger.SettlementStats
}
type Service struct {
database Database
settlement SettlementMonitor
settlementEnabled bool
}
func NewService(database Database, settlement ...SettlementMonitor) *Service {
service := &Service{database: database}
if len(settlement) > 0 && settlement[0] != nil {
service.settlement = settlement[0]
service.settlementEnabled = true
}
return service
}
func (s *Service) Check(ctx context.Context) Status {
status := Status{}
if s.database != nil {
status.DatabaseReady = s.database.Ping(ctx) == nil
}
status.Serving = status.DatabaseReady
status.SettlementEnabled = s.settlementEnabled
if status.DatabaseReady && s.settlementEnabled {
stats, err := s.settlement.Stats(ctx)
if err == nil {
status.SettlementStats = stats
status.SettlementReady = true
}
}
return status
}