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  }