github.com/Cloud-Foundations/Dominator@v0.3.4/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/imagebuilder/logarchiver" 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 Options struct { 20 PortNumber uint 21 } 22 23 type Params struct { 24 Builder *builder.Builder 25 BuildLogReporter logarchiver.BuildLogReporter 26 DaemonMode bool 27 Logger log.DebugLogger 28 } 29 30 type state struct { 31 builder *builder.Builder 32 buildLogReporter logarchiver.BuildLogReporter 33 logger log.DebugLogger 34 } 35 36 var htmlWriters []HtmlWriter 37 38 func StartServer(portNum uint, builderObj *builder.Builder, 39 logReporter logarchiver.BuildLogReporter, daemon bool) error { 40 return StartServerWithOptionsAndParams( 41 Options{PortNumber: portNum}, 42 Params{Builder: builderObj}, 43 ) 44 } 45 46 func StartServerWithOptionsAndParams(options Options, params Params) error { 47 listener, err := net.Listen("tcp", fmt.Sprintf(":%d", options.PortNumber)) 48 if err != nil { 49 return err 50 } 51 myState := state{params.Builder, params.BuildLogReporter, params.Logger} 52 html.HandleFunc("/", myState.statusHandler) 53 html.HandleFunc("/showCurrentBuildLog", myState.showCurrentBuildLogHandler) 54 html.HandleFunc("/showDirectedGraph", myState.showDirectedGraphHandler) 55 html.HandleFunc("/showImageStream", myState.showImageStreamHandler) 56 html.HandleFunc("/showImageStreams", myState.showImageStreamsHandler) 57 html.HandleFunc("/showLastBuildLog", myState.showLastBuildLogHandler) 58 if myState.buildLogReporter != nil { 59 html.HandleFunc("/showAllBuilds", myState.showAllBuildsHandler) 60 html.HandleFunc("/showBuildLog", myState.showBuildLogHandler) 61 html.HandleFunc("/showBuildLogArchive", 62 myState.showBuildLogArchiveHandler) 63 html.HandleFunc("/showGoodBuilds", myState.showGoodBuildsHandler) 64 html.HandleFunc("/showErrorBuilds", myState.showErrorBuildsHandler) 65 html.HandleFunc("/showStreamAllBuilds", 66 myState.showStreamAllBuildsHandler) 67 html.HandleFunc("/showStreamGoodBuilds", 68 myState.showStreamGoodBuildsHandler) 69 html.HandleFunc("/showStreamErrorBuilds", 70 myState.showStreamErrorBuildsHandler) 71 html.HandleFunc("/showRequestorAllBuilds", 72 myState.showRequestorAllBuildsHandler) 73 html.HandleFunc("/showRequestorGoodBuilds", 74 myState.showRequestorGoodBuildsHandler) 75 html.HandleFunc("/showRequestorErrorBuilds", 76 myState.showRequestorErrorBuildsHandler) 77 } 78 if params.DaemonMode { 79 go http.Serve(listener, nil) 80 } else { 81 http.Serve(listener, nil) 82 } 83 return nil 84 } 85 86 func AddHtmlWriter(htmlWriter HtmlWriter) { 87 htmlWriters = append(htmlWriters, htmlWriter) 88 }