From d2406ba03163d1517d672151bd519051da39f7fd Mon Sep 17 00:00:00 2001 From: Chris Goller Date: Fri, 16 Sep 2016 12:05:09 -0500 Subject: [PATCH 1/4] Add simple static asset packaging. Closes #5 --- .gitignore | 4 +++- Makefile | 8 +++++++- restapi/configure_mr_fusion.go | 21 +++++++++++++++++++-- 3 files changed, 29 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index 546b776bae..254c880ee6 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ -dist/ +dist/*.js +dist/*.html .pull-request node_modules +mrfusion diff --git a/Makefile b/Makefile index 2da364920c..ddc083cefd 100644 --- a/Makefile +++ b/Makefile @@ -17,9 +17,15 @@ docker-${BINARY}: $(SOURCES) CGO_ENABLED=0 GOOS=linux go build -installsuffix cgo -o ${BINARY} ${LDFLAGS} \ ./cmd/mr-fusion-server/main.go -prepare: +bindata: + go-bindata -o dist/dist_gen.go -ignore 'map|go' -pkg dist -nocompress=true dist/... + +dev: go get github.com/sparrc/gdm gdm restore + go get -u github.com/jteeuwen/go-bindata/... + +prepare: dev bindata clean: if [ -f ${BINARY} ] ; then rm ${BINARY} ; fi diff --git a/restapi/configure_mr_fusion.go b/restapi/configure_mr_fusion.go index 57a450df60..8427a07fdf 100644 --- a/restapi/configure_mr_fusion.go +++ b/restapi/configure_mr_fusion.go @@ -2,13 +2,17 @@ package restapi import ( "crypto/tls" + "fmt" + "log" "net/http" + "strings" errors "github.com/go-openapi/errors" runtime "github.com/go-openapi/runtime" middleware "github.com/go-openapi/runtime/middleware" "golang.org/x/net/context" + "github.com/influxdata/mrfusion/dist" "github.com/influxdata/mrfusion/mock" "github.com/influxdata/mrfusion/restapi/operations" ) @@ -125,7 +129,8 @@ func configureAPI(api *operations.MrFusionAPI) http.Handler { api.ServerShutdown = func() {} - return setupGlobalMiddleware(api.Serve(setupMiddlewares)) + handler := setupGlobalMiddleware(api.Serve(setupMiddlewares)) + return handler } // The TLS configuration before HTTPS server starts. @@ -142,5 +147,17 @@ func setupMiddlewares(handler http.Handler) http.Handler { // The middleware configuration happens before anything, this middleware also applies to serving the swagger.json document. // So this is a good place to plug in a panic handling middleware, logging and metrics func setupGlobalMiddleware(handler http.Handler) http.Handler { - return handler + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + log.Printf("%s %s %s\n", r.RemoteAddr, r.Method, r.URL) + if r.URL.Path == "//" || r.URL.Path == "/" || strings.Contains(r.URL.Path, "/index.html") { + octets, _ := dist.Asset("dist/index.html") + fmt.Fprintf(w, "%s\n", string(octets)) + return + } else if strings.Contains(r.URL.Path, "/bundle.js") { + octets, _ := dist.Asset("dist/bundle.js") + fmt.Fprintf(w, "%s\n", string(octets)) + return + } + handler.ServeHTTP(w, r) + }) } From 1f052fa3c3ef18e32bbb34c39e16048b3b960d3f Mon Sep 17 00:00:00 2001 From: Chris Goller Date: Fri, 16 Sep 2016 12:53:13 -0500 Subject: [PATCH 2/4] Remove docker builds from circle for the moment --- circle.yml | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/circle.yml b/circle.yml index a8487700b4..4f577f43a7 100644 --- a/circle.yml +++ b/circle.yml @@ -1,7 +1,5 @@ --- machine: - services: - - docker post: - go version - go version | grep 1.7.1 || (sudo rm -rf /usr/local/go && wget https://storage.googleapis.com/golang/go1.7.1.linux-amd64.tar.gz && sudo tar -C /usr/local -xzf go1.7.1.linux-amd64.tar.gz) @@ -13,20 +11,7 @@ dependencies: - mkdir -p ${HOME}/.go_workspace/src/github.com/influxdata - ln -sf ${HOME}/mrfusion ${HOME}/.go_workspace/src/github.com/influxdata - cd ${HOME}/.go_workspace/src/github.com/influxdata/mrfusion && make - override: - - docker info test: override: - make test - - docker build --rm=false -t influxdata/mrfusion . - - docker run -d -p 8080:5000 -e PORT=5000 influxdata/mrfusion; sleep 10 - - curl --retry 10 --retry-delay 5 -v http://localhost:8080 - -deployment: - heroku: - branch: develop - commands: - - docker login -e $HEROKU_EMAIL -u $HEROKU_EMAIL -p $HEROKU_PASS registry.heroku.com - - docker tag influxdata/mrfusion registry.heroku.com/mrfusion-acc/web - - docker push registry.heroku.com/mrfusion-acc/web From 1de8b616828b1f51ef851ea347974139fce2ba0b Mon Sep 17 00:00:00 2001 From: Chris Goller Date: Fri, 16 Sep 2016 13:47:58 -0500 Subject: [PATCH 3/4] Update static assets to use ui/build --- Makefile | 5 +++-- restapi/configure_mr_fusion.go | 22 ++++++++++++++-------- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/Makefile b/Makefile index ddc083cefd..2c395ba90a 100644 --- a/Makefile +++ b/Makefile @@ -17,8 +17,9 @@ docker-${BINARY}: $(SOURCES) CGO_ENABLED=0 GOOS=linux go build -installsuffix cgo -o ${BINARY} ${LDFLAGS} \ ./cmd/mr-fusion-server/main.go -bindata: - go-bindata -o dist/dist_gen.go -ignore 'map|go' -pkg dist -nocompress=true dist/... +assets: + mkdir -p ui/build + go-bindata -o ui/ui.go -ignore 'map|go' -pkg ui -nocompress=true ui/build/... dev: go get github.com/sparrc/gdm diff --git a/restapi/configure_mr_fusion.go b/restapi/configure_mr_fusion.go index 8427a07fdf..06bcc61e10 100644 --- a/restapi/configure_mr_fusion.go +++ b/restapi/configure_mr_fusion.go @@ -12,9 +12,9 @@ import ( middleware "github.com/go-openapi/runtime/middleware" "golang.org/x/net/context" - "github.com/influxdata/mrfusion/dist" "github.com/influxdata/mrfusion/mock" "github.com/influxdata/mrfusion/restapi/operations" + "github.com/influxdata/mrfusion/ui" ) // This file is safe to edit. Once it exists it will not be overwritten @@ -149,15 +149,21 @@ func setupMiddlewares(handler http.Handler) http.Handler { func setupGlobalMiddleware(handler http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { log.Printf("%s %s %s\n", r.RemoteAddr, r.Method, r.URL) - if r.URL.Path == "//" || r.URL.Path == "/" || strings.Contains(r.URL.Path, "/index.html") { - octets, _ := dist.Asset("dist/index.html") - fmt.Fprintf(w, "%s\n", string(octets)) + if strings.Contains(r.URL.Path, "/chronograf/v1") { + handler.ServeHTTP(w, r) return - } else if strings.Contains(r.URL.Path, "/bundle.js") { - octets, _ := dist.Asset("dist/bundle.js") - fmt.Fprintf(w, "%s\n", string(octets)) + } else if r.URL.Path == "/ui/build/" { + octets, _ := ui.Asset("ui/build/index.html") + fmt.Fprintf(w, "%s", string(octets)) + return + } else if strings.Index(r.URL.Path, "/ui/build/") == 0 { + octets, err := ui.Asset(r.URL.Path[1:]) + if err != nil { + http.NotFound(w, r) + } + fmt.Fprintf(w, "%s", string(octets)) return } - handler.ServeHTTP(w, r) + http.Redirect(w, r, "/ui/build/index.html", http.StatusFound) }) } From 360d6ef577a021ac75c99b3ff753f071f2932867 Mon Sep 17 00:00:00 2001 From: Chris Goller Date: Fri, 16 Sep 2016 13:51:01 -0500 Subject: [PATCH 4/4] Update Makefile to use assets --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 2c395ba90a..946f14871f 100644 --- a/Makefile +++ b/Makefile @@ -26,7 +26,7 @@ dev: gdm restore go get -u github.com/jteeuwen/go-bindata/... -prepare: dev bindata +prepare: dev assets clean: if [ -f ${BINARY} ] ; then rm ${BINARY} ; fi