github.com/cloud-foundations/dominator@v0.0.0-20221004181915-6e4fee580046/hypervisor/httpd/api.go (about) 1 package httpd 2 3 import ( 4 "fmt" 5 "io" 6 "net" 7 "net/http" 8 9 "github.com/Cloud-Foundations/Dominator/hypervisor/manager" 10 "github.com/Cloud-Foundations/Dominator/lib/html" 11 ) 12 13 type HtmlWriter interface { 14 WriteHtml(writer io.Writer) 15 } 16 17 var htmlWriters []HtmlWriter 18 19 type state struct { 20 manager *manager.Manager 21 } 22 23 func StartServer(portNum uint, managerObj *manager.Manager, daemon bool) error { 24 listener, err := net.Listen("tcp", fmt.Sprintf(":%d", portNum)) 25 if err != nil { 26 return err 27 } 28 myState := state{managerObj} 29 html.HandleFunc("/", myState.statusHandler) 30 html.HandleFunc("/listAvailableAddresses", 31 myState.listAvailableAddressesHandler) 32 html.HandleFunc("/listRegisteredAddresses", 33 myState.listRegisteredAddressesHandler) 34 html.HandleFunc("/listSubnets", myState.listSubnetsHandler) 35 html.HandleFunc("/listVMs", myState.listVMsHandler) 36 html.HandleFunc("/showVmBootLog", myState.showBootLogHandler) 37 html.HandleFunc("/showVM", myState.showVMHandler) 38 if daemon { 39 go http.Serve(listener, nil) 40 } else { 41 http.Serve(listener, nil) 42 } 43 return nil 44 } 45 46 func AddHtmlWriter(htmlWriter HtmlWriter) { 47 htmlWriters = append(htmlWriters, htmlWriter) 48 }