Skip to content

Commit

Permalink
include elapsed time in header as well as version
Browse files Browse the repository at this point in the history
  • Loading branch information
nicpottier committed May 29, 2017
1 parent 2c25ee3 commit 98f4c72
Show file tree
Hide file tree
Showing 4 changed files with 35 additions and 11 deletions.
26 changes: 23 additions & 3 deletions cmd/flowserver/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ import (
"github.com/rakyll/statik/fs"
"github.com/sirupsen/logrus"

"strconv"

_ "github.com/nyaruka/goflow/cmd/flowserver/statik"
"github.com/nyaruka/goflow/utils"
)
Expand Down Expand Up @@ -114,11 +116,17 @@ func writeError(w http.ResponseWriter, r *http.Request, status int, err error) e
errors = append(errors, vErrs[i].Error())
}
}
return writeJSONResponse(w, status, &errorResponse{errors})
return writeJSONResponse(w, r, status, &errorResponse{errors})
}

func writeJSONResponse(w http.ResponseWriter, statusCode int, response interface{}) error {
func writeJSONResponse(w http.ResponseWriter, r *http.Request, statusCode int, response interface{}) error {
w.Header().Set("Content-Type", "application/json")
w.Header().Set("X-Version", version)
start := r.Context().Value(contextStart)
if start != nil {
elapsed := time.Since(start.(time.Time)).Nanoseconds()
w.Header().Set("X-Elapsed-NS", strconv.FormatInt(elapsed, 10))
}
w.WriteHeader(statusCode)

respJSON, err := json.MarshalIndent(response, "", " ")
Expand All @@ -133,11 +141,13 @@ type jsonHandlerFunc func(http.ResponseWriter, *http.Request) (interface{}, erro

func jsonHandler(handler jsonHandlerFunc) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
// stuff our start time in our context
r = r.WithContext(context.WithValue(r.Context(), contextStart, time.Now()))
value, err := handler(w, r)
if err != nil {
writeError(w, r, http.StatusInternalServerError, err)
} else {
err := writeJSONResponse(w, http.StatusOK, value)
err := writeJSONResponse(w, r, http.StatusOK, value)
if err != nil {
lg.Log(r.Context()).WithError(err).Error()
}
Expand Down Expand Up @@ -168,3 +178,13 @@ func handleVersion(w http.ResponseWriter, r *http.Request) (interface{}, error)
}
return response, nil
}

type contextKey string

func (c contextKey) String() string {
return "flowserver: " + string(c)
}

var (
contextStart = contextKey("start")
)
12 changes: 6 additions & 6 deletions cmd/flowserver/static/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -67,20 +67,20 @@
// get our content
var body = ace.edit("request").getValue();

// post it to our start endpoint
var start = performance.now()
$.ajax({
method: "post",
url: $(this).data("url"),
data: body,
dataType: "json",
success: function (data) {
$("#response_status").text("200 - " + (performance.now() - start).toString().substr(0, 6) + "ms");
complete: function (xhr, status) {
elapsed = xhr.getResponseHeader("X-Elapsed-Ns")
$("#response_status").text("200 - " + (elapsed / 1000000.0) + "ms")
var response = ace.edit("response");
response.setValue(JSON.stringify(data, null, " "), -1);
response.setValue(xhr.responseText, -1);
},
error: function (xhr, status, error) {
$("#response_status").text(status + " - " + (performance.now() - start).toString().substr(0, 6) + "ms");
elapsed = xhr.getResponseHeader("X-Elapsed-Ns")
$("#response_status").text(status + " - " + (elapsed / 1000000.0) + "ms")
var response = ace.edit("response");
response.setValue(xhr.responseText, -1);
}
Expand Down
2 changes: 1 addition & 1 deletion cmd/flowserver/statik/statik.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,6 @@ import (
)

func init() {
data := "PK\x03\x04\x14\x00\x08\x00\x08\x00r\xa1\xbdJ\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n\x00\x00\x00index.html\xd4W]s\xd3<\x16\xbe\xef\xaf8#\xca\x8c3\x8d\xe5\xa4-]H\xe3,\x0b\x0b,\xbb\x0b\x1dh\x0b\x0b7\x8cb\x1f\xdbJe\xc9\xe8\xc8\xf9X\xa6\xff}Gv\x12\xf2\xd5Y\xe6\x1dn^\xcdtl\xf9|?z\xceQ3,\\\xa9FGG\xc3\x02E::\x02\x00\x18\x96\xe8\x04hQb\xcc\xa6\x12g\x95\xb1\x8eAb\xb4C\xedb6\x93\xa9+\xe2\x14\xa72\xc1\xb0\xd9tAj\xe9\xa4P!%Ba\xdcgKGJ\xea;\xb0\xa8bFn\xa1\x90\nD\xc7\xa0\xb0\x98\xc5,\x8a2\xa3\x1d\xf1\xdc\x98\\\xa1\xa8$\xf1\xc4\x94QB\xf4\xd7L\x94R-\xe2\x8ffl\x9c\x19\x9c\xf5z\xdd\xb3^O:\xa1d\xd2\xfdK\xaf\xe7\xff\xda\xdd\xaf\xc5\xa9uu\x977\xce\xab\xdabB\xf4\xbc\xc7/\xf8i4\xae\xa5J\x9boa)5O\x88\x18H\xed0\xb7\xd2-bF\x858{z\x1e\xde~\x90o2z\xf6\xf6\xa5\xc9O\xfe=+\xf0\xc5\xf5\xc7\x97\xaeo\x9e$\xe3\xc5\xbf\xde\xfec<\x9b|\xa6d\x82\xe5\xe2\xc5\xbb\x9bg_^\xde\xbe\xfb\x9aetq\xfb\xfd\xf6&\xed\x15W\xe3\xff\xfc\x9d5)\xfa\x95XCd\xac\xcc\xa5\x8e\x99\xd0F/JS\xd3\xaa\x06J\xac\xac\x1c\x90M|\xceI\xaa\xf9\x84RTrj\xb9F\x17\xe5\x91H\xf0y\x9f\x9f\xf2\x8b\xa0\x94\xda\xef\xf8\x84N\xfckiR\x0c'd\xf4\xea\x83+\xb0\xc4\x90\x8c\x12V\xfe\x17\xd3o\xa9\xb0w\x0f\xc9\x94\xcc\x0b\xc7'\xd4\xf9\x99\xa7[T\x183\x87s\x17M\xc4T\xb4\x891H\na ]\xccj\x97=e\xa3a\xd4\n\x0e\xa7oR\xe4\x93\xef5\xdaE\x03|\xfb\x1a\x9e\xf1S\xde\xe7\x1e\xec\xc9\x1e\xd6\xa7O.\xc2b\x96\x9f\xe74\xcf_\x7f-\xae\xe8\xd5+Q\xa6W_\xde\xbc\xc8\xfag\xaf\x17\x1fjy3S\x7f\xfb\x90\xcf?]\xbf\xcf\xddy\xcc\x1e\xc4s73O\x89\xd1\xba:\xcfw\xf8\xb1\xde\xfa\xe5\x89\x18\xb6\xa4\x1b@\xcb\xba\xcb\xb5\xc2\xfd\xd1\xfa\xf5\x91\xc5\xef5\x92\xdb1\xaf\x0cI'\x8d\x1ex\n\n'\xa7x\xb9%ozd\x00\xfd^\xef\xf1\xb6\xa0@\x0f\xfe\x00\xce\x9f=~(\x1eUF\x13\xfe\xf6\x80O\x1f\x08\xe8\x87\x00\xda\x9dp\xa9\xa4J\x89\xc5\x00\xc2\x19\x8e\xef\xa4\x0b3\x85\xf3\xcb\xc3*\xdb\xa2C\xb5|#'\\M\xbbG\xa0p\x1e\xe6\xd6\xcc\x06\xd0\xdfv]\x894\x95:\x1f\xc0\x93j'\xa8gh(\x94\xcc=\x10\xbe\xb0m\xb1\x92\x1a\xc3U\xc5\xa7[\xd6\xf7-3\xa2%5\x86Q;\xfc\x8e\x86c\x93.\x96\xb4I\xe5\x14d\x1a\xb3\x16\x12\xf6\x93@k\xc9\xb8v\xceh\xda\x105b\x01\x89\x12D1\xcb\xa4Eh\xc6K\xab\xb9\x9aH\x8f\x18\xa4\xc2\x89\xb0\xb6*f<\xca\x94\x99E\xe4\x84ult\xed\x1f\xc3H\xfc\x0e\x97\x16\xa9.\x91\x8d>6\xcf-\xa7\xc3(\x95\xd3\xd1\xd1~I;\x87\xe4{\xa9\xd1\xdc0\xda\xd2\xc7T:c\xe9\x10:\xcb^a\xab\xd4[U6\xfa\xf1\x038\xdc\xdfox;\x98\xc1\x9e\xdd~&\xed\xfbf\xaf\xfbu\x1c0\xbe\xb4\xe9p\x14I\x11d\xb5N|\xbb@\xd0\xd9a\xddTXhu!\x06?Q\xfd&p\x85\xa4\xce6\x97Z%\x9e\xa3\xbbF\"it\xd0\xe1\x84\xee\x96\xf0\xb3\xb1wh\x83L(\xc2_3zgR\x0c\x98H\xb0\x19\xdc\x91\x1f\xdcl\xc3\xf2\xbes\xf9\xf3`\xd69\xad\xe1l\\\xdc\xf8!\xde\xfah\xe6y\xb4=\xeb7\xddmzX\"\xfb\xff\\4W\x02\xdbL\xc3c\xea\xa9\xc7:\xdc\xe8\x80%J&w\xac\x0b\x0f\x03\x1bE\x90\xa3\x03S\xdb\xd5\xff\x0d{\xb8\xfbV\xdbD}\xa3\xc2\x1c\xdd'\xa1j\x0c6sX\xba\xad\x0c9\x90\x0e\x9ci\xbc7}\x03\xa8\xd3\xca\xc8\x03AZq\x0c\x15\xda\xcc\xd8R\xe8\x04\xb96\xb3\xa0\xb3\xa5y\xcc\xc5D\xcc\x83\xed\x12\xfc*\xd1\x15&\x1d\x00\xf3QYwO^[5\x80\xe3\x960\xdc7`\xc0j\xabXg_\xd3\x0b\x07M\xcd\x87e7\x8b\n\x07\xc0\x1a2\xeckP\x9d$H4\xd8@\xdc\x1b\xed\xa2\xbeZ\xc7\x01\xdb\x1d\xb7\xac\xc3\xfd\xb8\x0c\xd8i\xaf\x07!08\x81`\x0f\x14\x08[\xc0:\xdc\x99kg\xa5\xce=c\xeb19\x1b\xf4\xbap\xd1\x81\x13`%\xb1\x1d\x9e\xaf\x96\x07|}c\xc5\x07\x99w\xd8p%\xf7\xbcl\x0f\xfe\x9f\xd7W\xef95)\xc8l\xd1\x14\xdb\x05]+\xd5\x05\x06\xc0:]\x08\xfb\x07\x9c\xdd\xefC\x87\xd6\x1a\xbb \xdc\xbc\xb0]hA\xe9\xb6\xd2?\x00\xe3\xf2\x0e;\x01\xf6'\x00s^X\xbe\xfaz\x83s\xf7\x10x[_\xeewF\x12\xb4\x17\xe6r\xd8\xfa+\xd3\xffn\xf8_\x00\x00\x00\xff\xffPK\x07\x08\x89\xe42\x9a\xa1\x04\x00\x00>\x0c\x00\x00PK\x03\x04\x14\x00\x08\x00\x08\x00\xb4\x96\xbdJ\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n\x00\x00\x00start.json\x9cR=o\xdb0\x10\xdd\xf3+X-\x19Z\x06$ER\x94\xa6\xa2@\x8b\x0e\x1d\xbb\xa4E\x10\x9c\xc8\x93,D&\x03\x99jj\x18\xfe\xef\x85\xe4X\xb6\xfc\x91\xa2=h\x10\xef\xde}\xbd{\x9b\x1bB\x08I\xaa6\xbc\xac\x92\x82\xfc\x1c\x9f\x83m\xa6\xbf\x11\xd0\xf7\x8dK\n\x92\x94\x90\n(AQ\xad\xb9\xa3R\x1bFKUe\xd4\x19&\xa5D\x99 c\x93\x0f\xf3\\\x0fK\x1cr?\xdbE _\xda\xf0r\nh\xc1\xd7=\xd4#\x08}}\x96\x1f\x1c\xce\x87\xdb\xdb\xe6\xccC\x8e\x87e\xe8l\xa5TN\x95HS*\x1d\xb7\xb4,\x11(7\xda\xe8\xd2\x88\\\x8a\xec\xa4\xd9T\x03ll\x82\xbf\xdcvo\x97\xdb\xefm\x1a\x03\xac\xb5\xc0RF\xb3\\\xa7Tj\xcdh.0\xa7\xaa4\xda\xa9Jp\xc7\xd4\x951\xa6Zq\xfd<\xd2\xd3\xe1s\xbb\xfe+\x18\x7f\xc7\x01|\x1fz\xb2\x82\xc6\x91\xdb\x8f\x8d\x7f\xee\xe3\xdd\x10\xb8M\xae&o/F\x1e\xce\xbcs\xdc!\xbe\xf3?\xec\xa6Kl\xf0\x11\xec0\xc8\x81\xa7\x89\x93\xcc:\xb4Nr\xcaU\xa9\xa9\x94\"\xa3\x86\x19M\x05\xe6V\xa8\xd4:\xc6\xe1h\xcdIC\x9f\xd0\x93\xafP\xd7\xd8\xc5c\x1a\xde\x90P\xd2w\x17\xce\x98Dl\x8b\xf7\\0\xad\x94\xe2\x82\x8bS\xd1U`\xb1\x0c\xe1\xa9X\x82}jq\x19:<\x10\xf7pT\xbej\xb0u\xab\xd9\x96\xa3\xbfl\xba\xb8x\\#tg12\xdbh\xc0\x91\xfb\x01w~\xd6]\xf5\xff l*\xf0\x0b\xda~\xec\xc3s\x93^\x02\xd8\x0e!\xa2{\x0c~@ \xc63\xca\x14\x15\xf9wn\n%\n\x99\xdfq)T&\xa4N\x7f\xcc\xa5\xb3=9\xfc\xf6\xf5\xf0\xa3\xd6\xe6g?h\xe1_\x17\x99\x94\xbf\\\xd5\x8f\x8d\x9fE^e\xfe\x0d\xe3\xed\x8a\xd4\x81\xc4E\xd7T\xb1\xf1\xf5\xbbc\x98]\x80\xf7\xd8\x0eHS\xa5\xce\xd9\\P\xc7dE\xa5`\x8aB\xca\x05-\xc12\xd0\x98r\x8e\xd5\x89t\x86\xb47\xb4r\x9d>\xc6\x8a\xf1\xbbc{\xa3\xe3{\xc7\xe1\xf6f\xfb'\x00\x00\xff\xffPK\x07\x08s>w\xdb \x02\x00\x00{\x05\x00\x00PK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00r\xa1\xbdJ\x89\xe42\x9a\xa1\x04\x00\x00>\x0c\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x81\x00\x00\x00\x00index.htmlPK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00\xb4\x96\xbdJs>w\xdb \x02\x00\x00{\x05\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x81\xd9\x04\x00\x00start.jsonPK\x05\x06\x00\x00\x00\x00\x02\x00\x02\x00p\x00\x00\x00\x1a\x07\x00\x00\x00\x00"
data := "PK\x03\x04\x14\x00\x08\x00\x08\x00d\xa6\xbdJ\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n\x00\x00\x00index.html\xd4Wio\xdb8\x13\xfe\x9e_A\xb0- #\x16%'i\xdeV\xb1\xfcv\xdb\xed\x85\xdd\xb6h\x8e^_\nZ\x1aI\xb4)R\xe5P>\xb6\xf0\x7f_P\xb2]\x9f\xd8~(\xb0X\x02\x81D\xcd\xc1\x99g\x9e\x19\xc6\xfd\xc2\x96rpr\xd2/\x80\xa7\x83\x13B\x08\xe9\x97`9Q\xbc\x84\x98N\x04L+m,%\x89V\x16\x94\x8d\xe9T\xa4\xb6\x88S\x98\x88\x04\xfcf\xd3%B +\xb8\xf41\xe1\x12\xe2\x1e]:\x92B\x8d\x89\x01\x19S\xb4s X\x00XJ\n\x03YL\x83 \xd3\xca\"\xcb\xb5\xce%\xf0J Kt\x19$\x88\xff\xcfx)\xe4<\xbe\xd6Cmut\x1e\x86\xdd\xf30\x14\x96K\x91t\xff\x17\x86\xee\xaf\xdd\xfd\xdc9\xb5\xaa\xc6y\xe3\xbc\xaa\x0d$\x88OBv\xc9\xce\x82a-d\xda|\xf3K\xa1X\x82H\x89P\x16r#\xec<\xa6X\xf0\xf3G\x17\xfe\xdd{\xf12\xc3\xc7\xaf\x9f\xe9\xfc\xf4\xcfi\x01Oo\xae\x9f\xd9\x9e~\x98\x0c\xe7\x7f\xbc~5\x9c\x8e>b2\x82r\xfe\xf4\xcd\xed\xe3\xcf\xcf\xee\xde|\xc92\xbc\xbc\xfbvw\x9b\x86\xc5\xbb\xe1\xa7\xdfi\x13\xa2[\x89\xd1\x88\xda\x88\\\xa8\x98r\xa5\xd5\xbc\xd45\xaer\xc0\xc4\x88\xca\x124\x89\x8b9I\x15\x1ba\nRL\x0cS`\x83<\xe0 <\xe9\xb13v\xe9\x95B\xb9\x1d\x1b\xe1\xa9{-u\n\xfe\x08\xb5Z}\xb0\x05\x94\xe0\xa3\x96\xdc\x88\xbf \xfd\x9ar3>&\x93\"/,\x1ba\xe7G\x9cv^AL-\xccl0\xe2\x13\xde\x06FIRp\x83`cZ\xdb\xec\x11\x1d\xf4\x83Vp8|\x9d\x02\x1b}\xab\xc1\xcc\x1b\xe0\xdbW\xff\x9c\x9d\xb1\x1es`\x8f\xf6\xb0>{x\xe9\x17\xd3\xfc\"\xc7Y\xfe\xe2K\xf1\x0e\x9f?\xe7e\xfa\xee\xf3\xcb\xa7Y\xef\xfc\xc5\xfc}-n\xa7\xf2\xb7\xf7\xf9\xec\xc3\xcd\xdb\xdc^\xc4\xf4(\x9e\xbb\x919J\x0c\xd6\xd99\xbe\x93\xef\xeb\xad[\x8e\x88~K\xba\x88\xb4\xac\xbbZ+,N\xd6\xaf\xf7\x0c|\xab\x01\xed\x8ey\xa5QX\xa1U\xe4(\xc8\xad\x98\xc0\xd5\x96\xbc\xe9\x91\x88\xf4\xc2\xf0\xc1\xb6\xa0\x00\x07~D.\x1e?8v\x1eVZ!\xfc\xf2\x03\x1f\x1d9\xd0\x0d\x010;\xc7\xa5\x02+\xc9\xe7\x11\xf1\xa70\x1c\x0b\xebg\x12fW\x87U\xb6E\x87r\xf9\x8a\x96\xdb\x1awK a\xe6\xe7FO#\xd2\xdbv]\xf14\x15*\x8f\xc8\xc3j\xe7P\xc7P\x9fK\x91; \\b\xdbb)\x14\xf8\xab\x8c\xcf\xb6\xac\x17-3\x82%5\xfaA;\xfcN\xfaC\x9d\xce\x97\xb4I\xc5\x84\x884\xa6-$\xf4\x07\x81\xd6\x92am\xadV\xb8!j\xc4\x9c$\x92#\xc64\x13\x06H3^Z\xcd\xd5D\xbaGI\xca-\xf7k#c\xca\x82L\xeai\x80\x96\x1bK\x077\xee\xd1\x0f\xf8\xafpi\x00\xeb\x12\xe8\xe0\xbayn9\xed\x07\xa9\x98\x0cN\xf6S\xda)\x92\xeb\xa5Fs\xc3hK\x1fRa\xb5\xc1C\xe8,{\x85\xaeBoU\xe9\xe0\xfbw\xc2\xc8b\xb1\xe1\xed`\x04{v\xfb\x91\xb4\xef\x9b\xbd\xee\xd6}\x8f\xb2\xa5M\x87\x01O\n/\xabU\xe2\xda\x85x\x9d\x1d\xd6M\xb8!\xad.\x89\x89\x9b\xa8n\xe3\xd9B`g\x9bK\xad\x12\xcb\xc1\xde\x00\xa2\xd0\xca\xeb0\x04{\x87\xf0Q\x9b1\x18/\xe3\x12\xe1\xe7\x8c\xde\xe8\x14<\xca\x13h\x06w\xe0\x067\xdd\xb0\\t\xae~\x14f\x1d\xd3\x1a\xce\xc6\xc5\xad\x1b\xe2\xad\x8ff\x9e\x07\xdb\xb3~\xd3\xdd\xa6\x87%\xb2\xff\xe4\xa2\xb9\x12\xe8f\x18\x0eSG=\xdaaZy4\x91\"\x19\xd3.9\x0el\x10\x90\x1c,\xd1\xb5Y\xfd\xdf\xb0\x87\xbbk\xb5M\xd472\xcc\xc1~\xe0\xb2\x06o3\x86&\x0e\xc6G|\xe6m\x9f\xe5V \xb6\xd0iDh\xa5\xd1\xd2\xee\x9e\xbc62\"\xf7\xdb\xca2\xd7)\x1e\xad\x8d\xa4\x9d}M'\x8c\x9a\xe0\x0e\xcbn\xe7\x15D\x846U\xdb\xd7HtYI\xb0\x10m`3+L\x97\xb4\xfd\xb4\x0b\xd3j\x81\xe4\x15BJb2+\x1a\xc2\\/k\xf5\xaa\x19>\x1e\xfd\xe4?oU\xfc\xb7H;\x07}\xdc\xf7\xe8\xee\x8c\xa5\x1d\xe6f\xa4G\xcf\xc2\x90\xf8\x84\x92S\xe2\xad\x8e\n\xdc\xf5\xe0\x16\x0b;\xe4\x94\xd0\xf2\x98_W\xab\xf5=\x14\x1f\xe4\xd3\xd5A\xc3\x95\xdc\xb1\xad-\xa7Kn\xf5\xf5\x16f\xb6K\xfc\xde\x01\xe3\xc5>\xae`\x8c6G@\xed\xb6\xd2\x7f \xdb\xe5mvJ\xe8\x7f \xe1\xad/\x8b\x9d\xe9C\xda\xbbq9W\xdd\xed\xe8~\"\xfc\x1d\x00\x00\xff\xffPK\x07\x08f\xd7\xc0\x11s\x04\x00\x00)\x0c\x00\x00PK\x03\x04\x14\x00\x08\x00\x08\x00\xb4\x96\xbdJ\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n\x00\x00\x00start.json\x9cR=o\xdb0\x10\xdd\xf3+X-\x19Z\x06$ER\x94\xa6\xa2@\x8b\x0e\x1d\xbb\xa4E\x10\x9c\xc8\x93,D&\x03\x99jj\x18\xfe\xef\x85\xe4X\xb6\xfc\x91\xa2=h\x10\xef\xde}\xbd{\x9b\x1bB\x08I\xaa6\xbc\xac\x92\x82\xfc\x1c\x9f\x83m\xa6\xbf\x11\xd0\xf7\x8dK\n\x92\x94\x90\n(AQ\xad\xb9\xa3R\x1bFKUe\xd4\x19&\xa5D\x99 c\x93\x0f\xf3\\\x0fK\x1cr?\xdbE _\xda\xf0r\nh\xc1\xd7=\xd4#\x08}}\x96\x1f\x1c\xce\x87\xdb\xdb\xe6\xccC\x8e\x87e\xe8l\xa5TN\x95HS*\x1d\xb7\xb4,\x11(7\xda\xe8\xd2\x88\\\x8a\xec\xa4\xd9T\x03ll\x82\xbf\xdcvo\x97\xdb\xefm\x1a\x03\xac\xb5\xc0RF\xb3\\\xa7Tj\xcdh.0\xa7\xaa4\xda\xa9Jp\xc7\xd4\x951\xa6Zq\xfd<\xd2\xd3\xe1s\xbb\xfe+\x18\x7f\xc7\x01|\x1fz\xb2\x82\xc6\x91\xdb\x8f\x8d\x7f\xee\xe3\xdd\x10\xb8M\xae&o/F\x1e\xce\xbcs\xdc!\xbe\xf3?\xec\xa6Kl\xf0\x11\xec0\xc8\x81\xa7\x89\x93\xcc:\xb4Nr\xcaU\xa9\xa9\x94\"\xa3\x86\x19M\x05\xe6V\xa8\xd4:\xc6\xe1h\xcdIC\x9f\xd0\x93\xafP\xd7\xd8\xc5c\x1a\xde\x90P\xd2w\x17\xce\x98Dl\x8b\xf7\\0\xad\x94\xe2\x82\x8bS\xd1U`\xb1\x0c\xe1\xa9X\x82}jq\x19:<\x10\xf7pT\xbej\xb0u\xab\xd9\x96\xa3\xbfl\xba\xb8x\\#tg12\xdbh\xc0\x91\xfb\x01w~\xd6]\xf5\xff l*\xf0\x0b\xda~\xec\xc3s\x93^\x02\xd8\x0e!\xa2{\x0c~@ \xc63\xca\x14\x15\xf9wn\n%\n\x99\xdfq)T&\xa4N\x7f\xcc\xa5\xb3=9\xfc\xf6\xf5\xf0\xa3\xd6\xe6g?h\xe1_\x17\x99\x94\xbf\\\xd5\x8f\x8d\x9fE^e\xfe\x0d\xe3\xed\x8a\xd4\x81\xc4E\xd7T\xb1\xf1\xf5\xbbc\x98]\x80\xf7\xd8\x0eHS\xa5\xce\xd9\\P\xc7dE\xa5`\x8aB\xca\x05-\xc12\xd0\x98r\x8e\xd5\x89t\x86\xb47\xb4r\x9d>\xc6\x8a\xf1\xbbc{\xa3\xe3{\xc7\xe1\xf6f\xfb'\x00\x00\xff\xffPK\x07\x08s>w\xdb \x02\x00\x00{\x05\x00\x00PK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00d\xa6\xbdJf\xd7\xc0\x11s\x04\x00\x00)\x0c\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x81\x00\x00\x00\x00index.htmlPK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00\xb4\x96\xbdJs>w\xdb \x02\x00\x00{\x05\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x81\xab\x04\x00\x00start.jsonPK\x05\x06\x00\x00\x00\x00\x02\x00\x02\x00p\x00\x00\x00\xec\x06\x00\x00\x00\x00"
fs.Register(data)
}
6 changes: 5 additions & 1 deletion cmd/flowserver/templates.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package main

import (
"bytes"
"encoding/json"
"fmt"
"html/template"
"io/ioutil"
Expand All @@ -25,6 +27,8 @@ func indexHandler(fs http.FileSystem, w http.ResponseWriter, r *http.Request) er
fmt.Printf("start doesn't exit\n")
return err
}
indented := bytes.Buffer{}
json.Indent(&indented, []byte(startFlow), "", " ")

indexTpl, err := readFSFile(fs, "/index.html")
if err != nil {
Expand All @@ -37,5 +41,5 @@ func indexHandler(fs http.FileSystem, w http.ResponseWriter, r *http.Request) er
if err != nil {
return err
}
return t.ExecuteTemplate(w, "index.html", startFlow)
return t.ExecuteTemplate(w, "index.html", indented.String())
}

0 comments on commit 98f4c72

Please sign in to comment.