10 "git.curoverse.com/arvados.git/sdk/go/arvados"
11 "golang.org/x/net/websocket"
17 eventSource eventSource
22 func (rtr *router) setup() {
23 rtr.mux = http.NewServeMux()
24 rtr.mux.Handle("/websocket", rtr.makeServer(NewSessionV0))
25 rtr.mux.Handle("/arvados/v1/events.ws", rtr.makeServer(NewSessionV1))
28 func (rtr *router) makeServer(newSession func(wsConn, arvados.Client) (session, error)) *websocket.Server {
30 Client: rtr.Config.Client,
31 PingTimeout: rtr.Config.PingTimeout.Duration(),
32 QueueSize: rtr.Config.ClientEventQueue,
33 NewSession: newSession,
35 return &websocket.Server{
36 Handshake: func(c *websocket.Config, r *http.Request) error {
39 Handler: websocket.Handler(func(ws *websocket.Conn) {
40 sink := rtr.eventSource.NewSink()
41 handler.Handle(ws, sink.Channel())
48 func (rtr *router) ServeHTTP(resp http.ResponseWriter, req *http.Request) {
49 rtr.setupOnce.Do(rtr.setup)
51 reqLog(map[string]interface{}{
52 "Connect": req.RemoteAddr,
53 "RemoteAddr": req.RemoteAddr,
54 "X-Forwarded-For": req.Header.Get("X-Forwarded-For"),
57 rtr.mux.ServeHTTP(resp, req)
59 reqLog(map[string]interface{}{
60 "Disconnect": req.RemoteAddr,
61 "RemoteAddr": req.RemoteAddr,
62 "X-Forwarded-For": req.Header.Get("X-Forwarded-For"),
64 "Elapsed": time.Now().Sub(t0).Seconds(),
68 func reqLog(m map[string]interface{}) {
69 j, err := json.Marshal(m)