refactor(core): remove store global singleton, thread store explicitly

Remove store.Get()/SetGlobal()/Current. Store is now passed explicitly
to all consumers via constructor parameters and function arguments.

- TUI Model holds store field, set via InitialModel(isAdmin, store)
- monitor.StartEngine(s) and InitHistoryFromStore(s) accept store
- server.Start(cfg, s) closes over store in HTTP handlers
- main.go threads store to SSH server, TUI, monitor, server
- isKeyAllowed receives store as parameter

No more hidden dependency on package-level mutable state in store pkg.
Monitor package still uses package-level state (LiveState, etc.) — will
be encapsulated into Engine struct in Phase 7.
This commit is contained in:
2026-05-15 00:45:07 -04:00
parent d4f4012c8a
commit a6bb9a7aff
9 changed files with 62 additions and 94 deletions
+3 -7
View File
@@ -20,11 +20,7 @@ var (
historyMu sync.RWMutex
)
func InitHistoryFromStore() {
s := store.Get()
if s == nil {
return
}
func InitHistoryFromStore(s store.Store) {
all, err := s.LoadAllHistory(maxHistoryLen)
if err != nil {
AddLog("Failed to load check history: " + err.Error())
@@ -74,8 +70,8 @@ func RecordCheck(siteID int, latency time.Duration, isUp bool) {
h.Statuses = h.Statuses[len(h.Statuses)-maxHistoryLen:]
}
if s := store.Get(); s != nil {
go func() { _ = s.SaveCheck(siteID, latency.Nanoseconds(), isUp) }()
if db != nil {
go func() { _ = db.SaveCheck(siteID, latency.Nanoseconds(), isUp) }()
}
}
+7 -11
View File
@@ -55,6 +55,8 @@ var (
insecureSkipVerify bool
db store.Store
strictClient = &http.Client{
Transport: &http.Transport{TLSClientConfig: &tls.Config{InsecureSkipVerify: false}},
}
@@ -119,16 +121,11 @@ func RecordHeartbeat(token string) bool {
return true
}
func StartEngine() {
func StartEngine(s store.Store) {
db = s
go func() {
for {
s_instance := store.Get()
if s_instance == nil {
time.Sleep(1 * time.Second)
continue
}
sites, err := s_instance.GetSites()
sites, err := db.GetSites()
if err != nil {
AddLog(fmt.Sprintf("Failed to load sites: %v", err))
time.Sleep(5 * time.Second)
@@ -407,11 +404,10 @@ func handleStatusChange(site models.Site, rawStatus string, code int, latency ti
}
func triggerAlert(alertID int, title, message string) {
s_instance := store.Get()
if s_instance == nil {
if db == nil {
return
}
cfg, err := s_instance.GetAlert(alertID)
cfg, err := db.GetAlert(alertID)
if err != nil {
return
}