From 79f2528419015a21df7d6e917a061fcf707dfd09 Mon Sep 17 00:00:00 2001 From: Victor Vrantchan Date: Fri, 3 Mar 2017 19:49:55 -0500 Subject: [PATCH] provide context for ServeFrontend 500 errors (#1349) Closes #1343 --- cli/serve.go | 2 +- server/service/frontend.go | 16 +++++++++++----- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/cli/serve.go b/cli/serve.go index 53309e5443..f2a5ce6e65 100644 --- a/cli/serve.go +++ b/cli/serve.go @@ -122,7 +122,7 @@ the way that the kolide server works. var apiHandler, frontendHandler http.Handler { - frontendHandler = prometheus.InstrumentHandler("get_frontend", service.ServeFrontend()) + frontendHandler = prometheus.InstrumentHandler("get_frontend", service.ServeFrontend(httpLogger)) apiHandler = service.MakeHandler(ctx, svc, config.Auth.JwtKey, httpLogger) setupRequired, err := service.RequireSetup(svc) diff --git a/server/service/frontend.go b/server/service/frontend.go index d5239c2b7d..f9f3e00ee6 100644 --- a/server/service/frontend.go +++ b/server/service/frontend.go @@ -6,6 +6,7 @@ import ( "net/http" assetfs "github.com/elazarl/go-bindata-assetfs" + "github.com/go-kit/kit/log" ) func newBinaryFileSystem(root string) *assetfs.AssetFS { @@ -17,26 +18,31 @@ func newBinaryFileSystem(root string) *assetfs.AssetFS { } } -func ServeFrontend() http.Handler { +func ServeFrontend(logger log.Logger) http.Handler { + herr := func(w http.ResponseWriter, err string) { + logger.Log("err", err) + http.Error(w, err, http.StatusInternalServerError) + return + } return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { fs := newBinaryFileSystem("/frontend") file, err := fs.Open("templates/react.tmpl") if err != nil { - http.Error(w, err.Error(), http.StatusInternalServerError) + herr(w, "load react template: "+err.Error()) return } data, err := ioutil.ReadAll(file) if err != nil { - http.Error(w, err.Error(), http.StatusInternalServerError) + herr(w, "read bindata file: "+err.Error()) return } t, err := template.New("react").Parse(string(data)) if err != nil { - http.Error(w, err.Error(), http.StatusInternalServerError) + herr(w, "create react template: "+err.Error()) return } if err := t.Execute(w, nil); err != nil { - http.Error(w, err.Error(), http.StatusInternalServerError) + herr(w, "execute react template: "+err.Error()) return } })