tangled
alpha
login
or
join now
edavis.dev
/
recordcollector
18
fork
atom
this repo has no description
18
fork
atom
overview
issues
2
pulls
pipelines
restart jetstream if disconnects
Eric Davis
1 year ago
7f8ad436
66fbed45
+33
-17
1 changed file
expand all
collapse all
unified
split
cmd
recordcollector
main.go
+33
-17
cmd/recordcollector/main.go
···
30
30
"app.bsky",
31
31
"chat.bsky",
32
32
"blue.flashes",
33
33
+
"social.pinksky",
33
34
"jp.5leaf",
34
35
}
35
36
···
113
114
log.Fatalf("failed to create jetstream client: %v", err)
114
115
}
115
116
116
116
-
var cursor int64
117
117
-
err = dbCnx.QueryRowContext(ctx, "select val from config where key = 'cursor'").Scan(&cursor)
118
118
-
if err == sql.ErrNoRows {
119
119
-
logger.Info("no persisted cursor found")
120
120
-
} else if err != nil {
121
121
-
logger.Error("failed obtaining past cursor", "err", err)
122
122
-
} else {
123
123
-
logger.Info("found cursor in db", "cursor", cursor)
124
124
-
}
117
117
+
// https://bsky.app/profile/icyphox.sh/post/3lkt5wpjbcc2f
118
118
+
for {
119
119
+
var cursor int64
120
120
+
err = dbCnx.QueryRowContext(ctx, "select val from config where key = 'cursor'").Scan(&cursor)
121
121
+
if err == sql.ErrNoRows {
122
122
+
logger.Info("no persisted cursor found")
123
123
+
} else if err != nil {
124
124
+
logger.Error("failed obtaining past cursor", "err", err)
125
125
+
} else {
126
126
+
logger.Info("found cursor in db", "cursor", cursor)
127
127
+
}
125
128
126
126
-
var connectCursor *int64
127
127
-
if cursor > 0 {
128
128
-
connectCursor = &cursor
129
129
-
}
129
129
+
var connectCursor *int64
130
130
+
if cursor > 0 {
131
131
+
connectCursor = &cursor
132
132
+
}
133
133
+
134
134
+
connCtx, cancel := context.WithCancel(ctx)
135
135
+
defer cancel()
136
136
+
if err := jetstreamClient.ConnectAndRead(connCtx, connectCursor); err != nil {
137
137
+
logger.Error("error in ConnectAndRead", "err", err)
138
138
+
cancel()
139
139
+
}
130
140
131
131
-
if err := jetstreamClient.ConnectAndRead(ctx, connectCursor); err != nil {
132
132
-
log.Fatalf("failed to connect: %v", err)
141
141
+
select {
142
142
+
case <-ctx.Done():
143
143
+
logger.Info("stopping")
144
144
+
return
145
145
+
case <-connCtx.Done():
146
146
+
logger.Info("restarting")
147
147
+
continue
148
148
+
}
133
149
}
134
150
135
151
logger.Info("shutdown")
···
238
254
h.count++
239
255
if h.count%5000 == 0 {
240
256
cursor := event.TimeUS
241
241
-
delta := time.Now().UTC().UnixMicro() - cursor
242
242
-
h.logger.Info("persisting cursor", "cursor", cursor, "delta", delta)
257
257
+
delta := (time.Now().UTC().UnixMicro() - cursor) / 1_000_000
258
258
+
h.logger.Info("persisting cursor", "cursor", cursor, "deltaSeconds", delta)
243
259
updateQuery := "insert into config (key, val) values ('cursor', ?) on conflict do update set val = ?"
244
260
if _, err := h.db.ExecContext(ctx, updateQuery, cursor, cursor); err != nil {
245
261
h.logger.Error("failed persisting cursor", "err", err)