github.com/Cloud-Foundations/Dominator@v0.3.4/imageserver/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/imageserver/scanner" 10 "github.com/Cloud-Foundations/Dominator/lib/html" 11 "github.com/Cloud-Foundations/Dominator/lib/objectserver/filesystem" 12 ) 13 14 type HtmlWriter interface { 15 WriteHtml(writer io.Writer) 16 } 17 18 var htmlWriters []HtmlWriter 19 20 type state struct { 21 imageDataBase *scanner.ImageDataBase 22 objectServer *filesystem.ObjectServer 23 } 24 25 func StartServer(portNum uint, imdb *scanner.ImageDataBase, 26 objSrv *filesystem.ObjectServer, daemon bool) error { 27 listener, err := net.Listen("tcp", fmt.Sprintf(":%d", portNum)) 28 if err != nil { 29 return err 30 } 31 myState := state{imageDataBase: imdb, objectServer: objSrv} 32 html.HandleFunc("/", statusHandler) 33 html.HandleFunc("/listBuildLog", myState.listBuildLogHandler) 34 html.HandleFunc("/listComputedInodes", myState.listComputedInodesHandler) 35 html.HandleFunc("/listDirectories", myState.listDirectoriesHandler) 36 html.HandleFunc("/listFilter", myState.listFilterHandler) 37 html.HandleFunc("/listImage", myState.listImageHandler) 38 html.HandleFunc("/listImages", myState.listImagesHandler) 39 html.HandleFunc("/listPackages", myState.listPackagesHandler) 40 html.HandleFunc("/listReleaseNotes", myState.listReleaseNotesHandler) 41 html.HandleFunc("/listTriggers", myState.listTriggersHandler) 42 html.HandleFunc("/showImage", myState.showImageHandler) 43 if daemon { 44 go http.Serve(listener, nil) 45 } else { 46 http.Serve(listener, nil) 47 } 48 return nil 49 } 50 51 func AddHtmlWriter(htmlWriter HtmlWriter) { 52 htmlWriters = append(htmlWriters, htmlWriter) 53 }