diff --git a/frontend/frontend.go b/frontend/frontend.go index 387f9c756..9c866aafe 100644 --- a/frontend/frontend.go +++ b/frontend/frontend.go @@ -16,20 +16,13 @@ import ( //TODO: log last update -// Frontend holds a gin Engine and the Sergequeue object -type Frontend struct { - Router *gin.Engine - SubmitQueue *submitqueue.SubmitQueue -} - //loadTemplate loads a single template from statikFS and returns a template object func loadTemplate(templateName string, funcMap template.FuncMap) (*template.Template, error) { + tmpl := template.New(templateName).Funcs(funcMap) statikFS, err := fs.New() if err != nil { return nil, err } - - tmpl := template.New(templateName).Funcs(funcMap) r, err := statikFS.Open("/" + templateName) if err != nil { return nil, err @@ -43,42 +36,34 @@ func loadTemplate(templateName string, funcMap template.FuncMap) (*template.Temp } // MakeFrontend configures the router and returns a new Frontend struct -func MakeFrontend(runner *submitqueue.Runner) *Frontend { +func MakeFrontend(runner *submitqueue.Runner) http.Handler { router := gin.Default() - submitQueue := runner.GetSubmitQueue() - - funcMap := template.FuncMap{ - "isAutoSubmittable": func(serie *submitqueue.Serie) bool { - return submitQueue.IsAutoSubmittable(serie) - }, - "changesetURL": func(changeset *gerrit.Changeset) string { - return submitQueue.GetChangesetURL(changeset) - }, - } - - tmpl := template.Must(loadTemplate("submit-queue.tmpl.html", funcMap)) - - router.SetHTMLTemplate(tmpl) - router.GET("/submit-queue.json", func(c *gin.Context) { + submitQueue, _, _ := runner.GetState() c.JSON(http.StatusOK, submitQueue) }) router.GET("/", func(c *gin.Context) { - c.HTML(http.StatusOK, "submit-queue.tmpl.html", gin.H{ + submitQueue, _, _ := runner.GetState() + + funcMap := template.FuncMap{ + "isAutoSubmittable": func(serie *submitqueue.Serie) bool { + return submitQueue.IsAutoSubmittable(serie) + }, + "changesetURL": func(changeset *gerrit.Changeset) string { + return submitQueue.GetChangesetURL(changeset) + }, + } + + tmpl := template.Must(loadTemplate("submit-queue.tmpl.html", funcMap)) + + tmpl.ExecuteTemplate(c.Writer, "submit-queue.tmpl.html", gin.H{ "series": submitQueue.Series, "projectName": submitQueue.ProjectName, "branchName": submitQueue.BranchName, "HEAD": submitQueue.HEAD, }) }) - return &Frontend{ - Router: router, - SubmitQueue: submitQueue, - } -} - -func (f *Frontend) ServeHTTP(w http.ResponseWriter, r *http.Request) { - f.Router.ServeHTTP(w, r) + return router } diff --git a/submitqueue/runner.go b/submitqueue/runner.go index 6c8d37a30..456e49cd1 100644 --- a/submitqueue/runner.go +++ b/submitqueue/runner.go @@ -20,17 +20,11 @@ func NewRunner(sq *SubmitQueue) *Runner { } } -// For the frontend to consume the data -// TODO: extend to return all the submitQueue results -func (r *Runner) GetResults() (*time.Time, []*Result) { +// GetState returns a copy of all the state for the frontend +func (r *Runner) GetState() (SubmitQueue, *time.Time, []*Result) { r.mut.Lock() defer r.mut.Unlock() - return r.currentlyRunning, r.results -} - -// GetSubmitQueue returns the submit queue object, to be consumed by the frontend -func (r *Runner) GetSubmitQueue() (*SubmitQueue) { - return r.submitQueue + return *r.submitQueue, r.currentlyRunning, r.results } // Trigger starts a new batch job