import (
"encoding/json"
- "fmt"
"log"
"net/http"
"sync"
+ "time"
"git.curoverse.com/arvados.git/sdk/go/arvados"
"golang.org/x/net/websocket"
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)
}