Files
YMhut-box-C-/server/unified-management/internal/health/health.go
T

56 lines
1.3 KiB
Go

package health
import (
"sync"
"time"
"ymhut-box/server/unified-management/internal/config"
"ymhut-box/server/unified-management/internal/db"
)
type Service struct {
cfg *config.Config
store *db.Store
mu sync.RWMutex
checks []config.Check
checkedAt time.Time
}
func NewService(cfg *config.Config, store *db.Store) *Service {
service := &Service{cfg: cfg, store: store}
service.RefreshPreflight()
return service
}
func (s *Service) RefreshPreflight() []config.Check {
checks := config.Preflight(s.cfg)
s.mu.Lock()
s.checks = append([]config.Check(nil), checks...)
s.checkedAt = time.Now().UTC()
s.mu.Unlock()
return checks
}
func (s *Service) Snapshot() map[string]any {
s.mu.RLock()
checks := append([]config.Check(nil), s.checks...)
checkedAt := s.checkedAt
s.mu.RUnlock()
return map[string]any{
"ok": true,
"version": config.Version,
"service": map[string]any{
"name": "YMhut Unified Management",
"baseUrl": s.cfg.BaseURL,
"cdnBaseUrl": s.cfg.CDNBaseURL,
},
"database": s.store.Status(),
"preflight": checks,
"preflightCheckedAt": checkedAt.Format(time.RFC3339),
}
}
func Snapshot(cfg *config.Config, store *db.Store) map[string]any {
return NewService(cfg, store).Snapshot()
}