Mirror of @tangled.org/core. Running on a Raspberry Pi Zero 2 (Please be gentle).

defer last event time in appview ingester

+51 -31
-2
appview/db/timeline.go
··· 1 1 package db 2 2 3 3 import ( 4 - "log" 5 4 "sort" 6 5 "time" 7 6 ) ··· 25 26 } 26 27 27 28 for _, repo := range repos { 28 - log.Println(repo.Created) 29 29 events = append(events, TimelineEvent{ 30 30 Repo: &repo, 31 31 Follow: nil,
+50
appview/state/jetstream.go
··· 1 + package state 2 + 3 + import ( 4 + "context" 5 + "encoding/json" 6 + "fmt" 7 + "log" 8 + 9 + "github.com/bluesky-social/jetstream/pkg/models" 10 + tangled "github.com/sotangled/tangled/api/tangled" 11 + "github.com/sotangled/tangled/appview/db" 12 + ) 13 + 14 + type Ingester func(ctx context.Context, e *models.Event) error 15 + 16 + func jetstreamIngester(db *db.DB) Ingester { 17 + return func(ctx context.Context, e *models.Event) error { 18 + var err error 19 + defer func() { 20 + eventTime := e.TimeUS 21 + lastTimeUs := eventTime + 1 22 + if err := db.UpdateLastTimeUs(lastTimeUs); err != nil { 23 + err = fmt.Errorf("(deferred) failed to save last time us: %w", err) 24 + } 25 + }() 26 + 27 + if e.Kind != models.EventKindCommit { 28 + return nil 29 + } 30 + 31 + did := e.Did 32 + raw := json.RawMessage(e.Commit.Record) 33 + 34 + switch e.Commit.Collection { 35 + case tangled.GraphFollowNSID: 36 + record := tangled.GraphFollow{} 37 + err := json.Unmarshal(raw, &record) 38 + if err != nil { 39 + log.Println("invalid record") 40 + return err 41 + } 42 + err = db.AddFollow(did, record.Subject, e.Commit.RKey) 43 + if err != nil { 44 + return fmt.Errorf("failed to add follow to db: %w", err) 45 + } 46 + } 47 + 48 + return err 49 + } 50 + }
+1 -27
appview/state/state.go
··· 5 5 "crypto/hmac" 6 6 "crypto/sha256" 7 7 "encoding/hex" 8 - "encoding/json" 9 8 "fmt" 10 9 "log" 11 10 "log/slog" ··· 15 16 comatproto "github.com/bluesky-social/indigo/api/atproto" 16 17 "github.com/bluesky-social/indigo/atproto/syntax" 17 18 lexutil "github.com/bluesky-social/indigo/lex/util" 18 - "github.com/bluesky-social/jetstream/pkg/models" 19 19 securejoin "github.com/cyphar/filepath-securejoin" 20 20 "github.com/go-chi/chi/v5" 21 21 tangled "github.com/sotangled/tangled/api/tangled" ··· 62 64 if err != nil { 63 65 return nil, fmt.Errorf("failed to create jetstream client: %w", err) 64 66 } 65 - err = jc.StartJetstream(context.Background(), func(ctx context.Context, e *models.Event) error { 66 - if e.Kind != models.EventKindCommit { 67 - return nil 68 - } 69 - 70 - did := e.Did 71 - raw := json.RawMessage(e.Commit.Record) 72 - 73 - switch e.Commit.Collection { 74 - case tangled.GraphFollowNSID: 75 - record := tangled.GraphFollow{} 76 - err := json.Unmarshal(raw, &record) 77 - if err != nil { 78 - log.Println("invalid record") 79 - return err 80 - } 81 - err = db.AddFollow(did, record.Subject, e.Commit.RKey) 82 - if err != nil { 83 - return fmt.Errorf("failed to add follow to db: %w", err) 84 - } 85 - return db.UpdateLastTimeUs(e.TimeUS) 86 - } 87 - 88 - return nil 89 - }) 67 + err = jc.StartJetstream(context.Background(), jetstreamIngester(db)) 90 68 if err != nil { 91 69 return nil, fmt.Errorf("failed to start jetstream watcher: %w", err) 92 70 }
-2
knotserver/middleware.go
··· 4 4 "crypto/hmac" 5 5 "crypto/sha256" 6 6 "encoding/hex" 7 - "log" 8 7 "net/http" 9 8 "time" 10 9 ) ··· 14 15 } 15 16 return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 16 17 signature := r.Header.Get("X-Signature") 17 - log.Println(signature) 18 18 if signature == "" || !h.verifyHMAC(signature, r) { 19 19 writeError(w, "signature verification failed", http.StatusForbidden) 20 20 return