New external site management. New external prober heartbeat feature.

This commit is contained in:
ayurishchev committed 2026-08-26 20:47:54 +03:00
1 parent 42f584dd3c
commit ef24cc9858
38 files changed
+1058 -158

No files matched your search

+22 -17
View File
@@ -8,26 +8,12 @@ import (
type sitesPageData struct {
PageData
Items []siteDTO // always exactly 3 entries, index 1..3, SiteID=="" for an empty slot
}
// fillSlots pads control-api's response (which only lists assigned slots)
// out to all three fixed slots, so the table always renders 3 rows.
func fillSlots(sites []siteDTO) []siteDTO {
byIndex := make(map[int]string, len(sites))
for _, s := range sites {
byIndex[s.Index] = s.SiteID
}
out := make([]siteDTO, 3)
for i := 0; i < 3; i++ {
out[i] = siteDTO{Index: i + 1, SiteID: byIndex[i+1]}
}
return out
Items []siteDTO // dynamic length — as many slots as configured, no fixed cap
}
func (s *Server) handleSitesPage(w http.ResponseWriter, r *http.Request) {
items, err := s.CA.ListSites(r.Context())
data := sitesPageData{Items: fillSlots(items)}
data := sitesPageData{Items: items}
data.ActiveNav = "sites"
data.Banner = bannerFor(err)
s.renderPage(w, "sites_page", data)
@@ -38,7 +24,26 @@ func (s *Server) renderSitesTable(w http.ResponseWriter, r *http.Request, action
if actionErr == nil {
actionErr = listErr
}
s.renderFragment(w, "sites_table", sitesPageData{Items: fillSlots(items)}, actionErr)
s.renderFragment(w, "sites_table", sitesPageData{Items: items}, actionErr)
}
// handleSiteCreate adds a brand-new slot via the "add site" form — same
// create-alongside-update pattern as /targets' handleTargetCreate, just
// backed by the same PutSite call the per-row form already uses (there's
// no separate "create" endpoint on control-api since PUT is already an
// upsert).
func (s *Server) handleSiteCreate(w http.ResponseWriter, r *http.Request) {
if err := r.ParseForm(); err != nil {
s.renderSitesTable(w, r, fmt.Errorf("invalid form: %w", err))
return
}
index, convErr := strconv.Atoi(r.PostFormValue("index"))
if convErr != nil {
s.renderSitesTable(w, r, &apiErr{Status: http.StatusBadRequest, Message: "index должен быть числом"})
return
}
err := s.CA.PutSite(r.Context(), index, r.PostFormValue("site_id"))
s.renderSitesTable(w, r, err)
}
func (s *Server) handleSitePut(w http.ResponseWriter, r *http.Request) {