func recentHandlerWs( w http.ResponseWriter, r *http.Request, stream *wsutil.WebSocketStream) { args, err := ParseArguments(r) if err != nil { stream.Fatalf("Invalid arguments; %v", err) return } if err := sendRecent(stream, args); err != nil { stream.Fatalf("%v", err) return } }
func tailHandlerWs( w http.ResponseWriter, r *http.Request, stream *wsutil.WebSocketStream) { args, err := ParseArguments(r) if err != nil { stream.Fatalf("Invalid arguments; %v", err) return } if err := sendRecent(stream, args); err != nil { stream.Fatalf("%v", err) return } d, err := drain.NewAppLogDrain(args.GUID) if err != nil { stream.Fatalf("Unable to create drain: %v", err) return } ch, err := d.Start() if err != nil { stream.Fatalf("Unable to start drain: %v", err) } err = stream.Forward(ch) if err != nil { log.Infof("%v", err) d.Stop(err) } // We expect drain.Wait to not block at this point. if err := d.Wait(); err != nil { if _, ok := err.(wsutil.WebSocketStreamError); !ok { log.Warnf("Error from app log drain server: %v", err) } } }