tangled
alpha
login
or
join now
tjh.dev
/
test
forked from
tangled.org/core
0
fork
atom
Mirror of @tangled.org/core. Running on a Raspberry Pi Zero 2 (Please be gentle).
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
reviewed
···
1
1
package db
2
2
3
3
import (
4
4
-
"log"
5
4
"sort"
6
5
"time"
7
6
)
···
25
26
}
26
27
27
28
for _, repo := range repos {
28
28
-
log.Println(repo.Created)
29
29
events = append(events, TimelineEvent{
30
30
Repo: &repo,
31
31
Follow: nil,
+50
appview/state/jetstream.go
reviewed
···
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
reviewed
···
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"
···
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
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
65
-
err = jc.StartJetstream(context.Background(), func(ctx context.Context, e *models.Event) error {
66
66
-
if e.Kind != models.EventKindCommit {
67
67
-
return nil
68
68
-
}
69
69
-
70
70
-
did := e.Did
71
71
-
raw := json.RawMessage(e.Commit.Record)
72
72
-
73
73
-
switch e.Commit.Collection {
74
74
-
case tangled.GraphFollowNSID:
75
75
-
record := tangled.GraphFollow{}
76
76
-
err := json.Unmarshal(raw, &record)
77
77
-
if err != nil {
78
78
-
log.Println("invalid record")
79
79
-
return err
80
80
-
}
81
81
-
err = db.AddFollow(did, record.Subject, e.Commit.RKey)
82
82
-
if err != nil {
83
83
-
return fmt.Errorf("failed to add follow to db: %w", err)
84
84
-
}
85
85
-
return db.UpdateLastTimeUs(e.TimeUS)
86
86
-
}
87
87
-
88
88
-
return nil
89
89
-
})
67
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
reviewed
···
4
4
"crypto/hmac"
5
5
"crypto/sha256"
6
6
"encoding/hex"
7
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
17
-
log.Println(signature)
18
18
if signature == "" || !h.verifyHMAC(signature, r) {
19
19
writeError(w, "signature verification failed", http.StatusForbidden)
20
20
return