56 lines
1.3 KiB
Go
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()
|
|
}
|