package server import ( "encoding/json" "net/http" "git.mchus.pro/mchus/logpile/internal/exporter" "git.mchus.pro/mchus/logpile/internal/models" "git.mchus.pro/mchus/logpile/internal/topology" ) func currentTopologyDocument(result *models.AnalysisResult) (*models.TopologyDocument, error) { if result == nil || result.Hardware == nil { return &models.TopologyDocument{Version: topology.ContractVersion}, nil } snapshot, err := exporter.ConvertToReanimator(result) if err != nil { return nil, err } return topology.Build(snapshot, result.TopologyEvidence), nil } func (s *Server) handleTopologyCurrent(w http.ResponseWriter, r *http.Request) { doc, err := currentTopologyDocument(s.GetResult()) if err != nil { s.htmlError(w, "failed to build topology", http.StatusInternalServerError) return } w.Header().Set("Content-Type", "text/html; charset=utf-8") _, _ = w.Write(topology.RenderHTML(doc)) } func (s *Server) handleGetTopology(w http.ResponseWriter, r *http.Request) { doc, err := currentTopologyDocument(s.GetResult()) if err != nil { jsonError(w, "Failed to build topology", http.StatusInternalServerError) return } w.Header().Set("Content-Type", "application/json; charset=utf-8") enc := json.NewEncoder(w) enc.SetIndent("", " ") _ = enc.Encode(doc) }