github.com/cloud-foundations/dominator@v0.0.0-20221004181915-6e4fee580046/imagebuilder/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/imagebuilder/builder" 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 builder *builder.Builder 21 } 22 23 func StartServer(portNum uint, builderObj *builder.Builder, 24 daemon bool) error { 25 listener, err := net.Listen("tcp", fmt.Sprintf(":%d", portNum)) 26 if err != nil { 27 return err 28 } 29 myState := state{builderObj} 30 html.HandleFunc("/", myState.statusHandler) 31 html.HandleFunc("/showCurrentBuildLog", myState.showCurrentBuildLogHandler) 32 html.HandleFunc("/showImageStream", myState.showImageStreamHandler) 33 html.HandleFunc("/showImageStreams", myState.showImageStreamsHandler) 34 html.HandleFunc("/showLastBuildLog", myState.showLastBuildLogHandler) 35 if daemon { 36 go http.Serve(listener, nil) 37 } else { 38 http.Serve(listener, nil) 39 } 40 return nil 41 } 42 43 func AddHtmlWriter(htmlWriter HtmlWriter) { 44 htmlWriters = append(htmlWriters, htmlWriter) 45 }