Monorepo for Tangled tangled.org
5

Configure Feed

Select the types of activity you want to include in your feed.

at icy/yovxsu 1.3 kB View raw
1package knotserver 2 3import ( 4 "context" 5 "errors" 6 "net/http" 7 "time" 8 9 "github.com/bluesky-social/indigo/xrpc" 10 "tangled.org/core/api/tangled" 11 "tangled.org/core/eventstream" 12 "tangled.org/core/log" 13) 14 15func (h *Knot) Events(w http.ResponseWriter, r *http.Request) { 16 l := log.SubLogger(h.l, "eventstream") 17 l.Debug("received new connection") 18 19 err := eventstream.Stream(w, r, eventstream.StreamConfig{ 20 Backend: h.db, 21 Notifier: h.n, 22 Logger: l, 23 }) 24 if err != nil && !errors.Is(err, eventstream.ErrDrainCap) { 25 l.Error("event stream ended with error", "err", err) 26 } 27 28 go func() { 29 retryCtx, retryCancel := context.WithTimeout(context.Background(), 10*time.Second) 30 defer retryCancel() 31 if err := h.requestCrawl(retryCtx); err != nil { 32 l.Error("error requesting crawls", "err", err) 33 } 34 }() 35} 36 37func (h *Knot) requestCrawl(ctx context.Context) error { 38 h.l.Info("requesting crawl", "mirrors", h.c.KnotMirrors) 39 input := &tangled.SyncRequestCrawl_Input{ 40 Hostname: h.c.Server.Hostname, 41 } 42 for _, knotmirror := range h.c.KnotMirrors { 43 xrpcc := xrpc.Client{Host: knotmirror} 44 if err := tangled.SyncRequestCrawl(ctx, &xrpcc, input); err != nil { 45 h.l.Error("error requesting crawl", "err", err) 46 } else { 47 h.l.Info("crawl requested successfully") 48 } 49 } 50 return nil 51}