github.com/cloud-foundations/dominator@v0.0.0-20221004181915-6e4fee580046/fleetmanager/httpd/api.go (about) 1 package httpd 2 3 import ( 4 "fmt" 5 "io" 6 "net" 7 "net/http" 8 "sync" 9 10 "github.com/Cloud-Foundations/Dominator/fleetmanager/topology" 11 "github.com/Cloud-Foundations/Dominator/lib/html" 12 "github.com/Cloud-Foundations/Dominator/lib/log" 13 ) 14 15 type HtmlWriter interface { 16 WriteHtml(writer io.Writer) 17 } 18 19 type Server struct { 20 htmlWriters []HtmlWriter 21 logger log.DebugLogger 22 mutex sync.RWMutex 23 _topology *topology.Topology 24 } 25 26 func StartServer(portNum uint, logger log.DebugLogger) (*Server, error) { 27 listener, err := net.Listen("tcp", fmt.Sprintf(":%d", portNum)) 28 if err != nil { 29 return nil, err 30 } 31 server := &Server{logger: logger} 32 html.HandleFunc("/", server.statusHandler) 33 go http.Serve(listener, nil) 34 return server, nil 35 } 36 37 func (s *Server) AddHtmlWriter(htmlWriter HtmlWriter) { 38 s.htmlWriters = append(s.htmlWriters, htmlWriter) 39 } 40 41 func (s *Server) UpdateTopology(t *topology.Topology) { 42 s.mutex.Lock() 43 defer s.mutex.Unlock() 44 s._topology = t 45 }