8460: JSON request log.
authorTom Clegg <tom@curoverse.com>
Tue, 15 Nov 2016 07:42:25 +0000 (02:42 -0500)
committerTom Clegg <tom@curoverse.com>
Tue, 15 Nov 2016 07:58:23 +0000 (02:58 -0500)
services/ws/router.go

index e829ce88d72f0f211622da089c734c179fedcdbc..69654cbe529affde9ff46b7906ff6392240096ef 100644 (file)
@@ -2,10 +2,10 @@ package main
 
 import (
        "encoding/json"
-       "fmt"
        "log"
        "net/http"
        "sync"
+       "time"
 
        "git.curoverse.com/arvados.git/sdk/go/arvados"
        "golang.org/x/net/websocket"
@@ -37,22 +37,36 @@ func (rtr *router) makeServer(newSession func(wsConn, arvados.Client) (session,
                        return nil
                },
                Handler: websocket.Handler(func(ws *websocket.Conn) {
-                       log.Printf("%v accepted", ws.Request().RemoteAddr)
                        sink := rtr.eventSource.NewSink()
                        handler.Handle(ws, sink.Channel())
                        sink.Stop()
                        ws.Close()
-                       log.Printf("%v disconnected", ws.Request().RemoteAddr)
                }),
        }
 }
 
 func (rtr *router) ServeHTTP(resp http.ResponseWriter, req *http.Request) {
        rtr.setupOnce.Do(rtr.setup)
+       t0 := time.Now()
+       reqLog(map[string]interface{}{
+               "Connect":         req.RemoteAddr,
+               "RemoteAddr":      req.RemoteAddr,
+               "X-Forwarded-For": req.Header.Get("X-Forwarded-For"),
+               "Time":            t0.UTC(),
+       })
        rtr.mux.ServeHTTP(resp, req)
-       j, err := json.Marshal(map[string]interface{}{
-               "req": fmt.Sprintf("%+v", req),
+       t1 := time.Now()
+       reqLog(map[string]interface{}{
+               "Disconnect":      req.RemoteAddr,
+               "RemoteAddr":      req.RemoteAddr,
+               "X-Forwarded-For": req.Header.Get("X-Forwarded-For"),
+               "Time":            t1.UTC(),
+               "Elapsed":         time.Now().Sub(t0).Seconds(),
        })
+}
+
+func reqLog(m map[string]interface{}) {
+       j, err := json.Marshal(m)
        if err != nil {
                log.Fatal(err)
        }