···
"github.com/bluesky-social/indigo/events"
"github.com/bluesky-social/indigo/lex/util"
···
func (s *Server) handleSyncSubscribeRepos(e echo.Context) error {
conn, err := websocket.Upgrade(e.Response().Writer, e.Request(), e.Response().Header(), 1<<10, 1<<10)
-
s.logger.Info("new connection", "ua", e.Request().UserAgent())
-
ctx := e.Request().Context()
ident := e.RealIP() + "-" + e.Request().UserAgent()
evts, cancel, err := s.evtman.Subscribe(ctx, ident, func(evt *events.XRPCStreamEvent) bool {
···
wc, err := conn.NextWriter(websocket.BinaryMessage)
header.Op = events.EvtKindErrorFrame
···
-
return fmt.Errorf("unrecognized event kind")
if err := header.MarshalCBOR(wc); err != nil {
-
return fmt.Errorf("failed to write header: %w", err)
if err := obj.MarshalCBOR(wc); err != nil {
-
return fmt.Errorf("failed to write event: %w", err)
if err := wc.Close(); err != nil {
-
return fmt.Errorf("failed to flush-close our event write: %w", err)
···
"github.com/bluesky-social/indigo/events"
"github.com/bluesky-social/indigo/lex/util"
···
func (s *Server) handleSyncSubscribeRepos(e echo.Context) error {
+
ctx := e.Request().Context()
+
logger := s.logger.With("component", "subscribe-repos-websocket")
conn, err := websocket.Upgrade(e.Response().Writer, e.Request(), e.Response().Header(), 1<<10, 1<<10)
+
logger.Error("unable to establish websocket with relay", "err", err)
ident := e.RealIP() + "-" + e.Request().UserAgent()
+
logger = logger.With("ident", ident)
+
logger.Info("new connection established")
evts, cancel, err := s.evtman.Subscribe(ctx, ident, func(evt *events.XRPCStreamEvent) bool {
···
wc, err := conn.NextWriter(websocket.BinaryMessage)
+
logger.Error("error writing message to relay", "err", err)
+
logger.Error("context error", "err", err)
header.Op = events.EvtKindErrorFrame
···
+
logger.Warn("unrecognized event kind")
if err := header.MarshalCBOR(wc); err != nil {
+
logger.Error("failed to write header to relay", "err", err)
if err := obj.MarshalCBOR(wc); err != nil {
+
logger.Error("failed to write event to relay", "err", err)
if err := wc.Close(); err != nil {
+
logger.Error("failed to flush-close our event write", "err", err)
+
// we should tell the relay to request a new crawl at this point if we got disconnected
+
// use a new context since the old one might be cancelled at this point
+
ctx, cancel = context.WithTimeout(context.Background(), 10*time.Second)
+
if err := s.requestCrawl(ctx); err != nil {
+
logger.Error("error requesting crawls", "err", err)