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