refactor(models): split Site into SiteConfig + SiteState
Site now embeds SiteConfig (22 persistent fields) and SiteState (11 ephemeral runtime fields). Field access unchanged via promotion — site.Name and site.Status still work. Store layer deals exclusively in SiteConfig — the DB never sees runtime state. Engine's liveState keeps full Site composites. UpdateSiteConfig reduced from 11-line field-by-field copy to `existing.SiteConfig = cfg`. RunCheck takes SiteConfig (only needs config fields). Checker is now statically prevented from reading/writing runtime state. Backup.Sites changed to []SiteConfig — exports no longer carry zero-valued runtime fields. Import backward-compatible (json ignores unknown fields).
This commit was merged in pull request #109.
This commit is contained in:
@@ -203,7 +203,7 @@ func TestProbeRegister_Failure(t *testing.T) {
|
||||
func TestProbeFetchAssignments_Success(t *testing.T) {
|
||||
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
json.NewEncoder(w).Encode(map[string][]models.Site{
|
||||
"sites": {{ID: 1, Name: "s1", Type: "http", URL: "http://example.com"}},
|
||||
"sites": {{SiteConfig: models.SiteConfig{ID: 1, Name: "s1", Type: "http", URL: "http://example.com"}}},
|
||||
})
|
||||
}))
|
||||
defer srv.Close()
|
||||
@@ -240,8 +240,8 @@ func TestProbeExecuteChecks(t *testing.T) {
|
||||
defer srv.Close()
|
||||
|
||||
sites := []models.Site{
|
||||
{ID: 1, Type: "http", URL: srv.URL},
|
||||
{ID: 2, Type: "http", URL: srv.URL},
|
||||
{SiteConfig: models.SiteConfig{ID: 1, Type: "http", URL: srv.URL}},
|
||||
{SiteConfig: models.SiteConfig{ID: 2, Type: "http", URL: srv.URL}},
|
||||
}
|
||||
|
||||
strict := &http.Client{}
|
||||
@@ -277,7 +277,7 @@ func TestProbeExecuteChecks_Concurrency(t *testing.T) {
|
||||
|
||||
var sites []models.Site
|
||||
for i := 0; i < 20; i++ {
|
||||
sites = append(sites, models.Site{ID: i + 1, Type: "http", URL: srv.URL})
|
||||
sites = append(sites, models.Site{SiteConfig: models.SiteConfig{ID: i + 1, Type: "http", URL: srv.URL}})
|
||||
}
|
||||
|
||||
results := probeExecuteChecks(context.Background(), sites, &http.Client{}, &http.Client{}, true)
|
||||
|
||||
@@ -152,7 +152,7 @@ loop:
|
||||
defer wg.Done()
|
||||
defer func() { <-sem }()
|
||||
|
||||
cr := monitor.RunCheck(ctx, s, strict, insecure, false, allowPrivate)
|
||||
cr := monitor.RunCheck(ctx, s.SiteConfig, strict, insecure, false, allowPrivate)
|
||||
mu.Lock()
|
||||
results = append(results, probeResultItem{
|
||||
SiteID: s.ID,
|
||||
|
||||
Reference in New Issue
Block a user