···
···
log.Fatalf("failed to create jetstream client: %v", err)
117
-
err = dbCnx.QueryRowContext(ctx, "select val from config where key = 'cursor'").Scan(&cursor)
118
-
if err == sql.ErrNoRows {
119
-
logger.Info("no persisted cursor found")
120
-
} else if err != nil {
121
-
logger.Error("failed obtaining past cursor", "err", err)
123
-
logger.Info("found cursor in db", "cursor", cursor)
117
+
// https://bsky.app/profile/icyphox.sh/post/3lkt5wpjbcc2f
120
+
err = dbCnx.QueryRowContext(ctx, "select val from config where key = 'cursor'").Scan(&cursor)
121
+
if err == sql.ErrNoRows {
122
+
logger.Info("no persisted cursor found")
123
+
} else if err != nil {
124
+
logger.Error("failed obtaining past cursor", "err", err)
126
+
logger.Info("found cursor in db", "cursor", cursor)
126
-
var connectCursor *int64
128
-
connectCursor = &cursor
129
+
var connectCursor *int64
131
+
connectCursor = &cursor
134
+
connCtx, cancel := context.WithCancel(ctx)
136
+
if err := jetstreamClient.ConnectAndRead(connCtx, connectCursor); err != nil {
137
+
logger.Error("error in ConnectAndRead", "err", err)
131
-
if err := jetstreamClient.ConnectAndRead(ctx, connectCursor); err != nil {
132
-
log.Fatalf("failed to connect: %v", err)
143
+
logger.Info("stopping")
145
+
case <-connCtx.Done():
146
+
logger.Info("restarting")
···
241
-
delta := time.Now().UTC().UnixMicro() - cursor
242
-
h.logger.Info("persisting cursor", "cursor", cursor, "delta", delta)
257
+
delta := (time.Now().UTC().UnixMicro() - cursor) / 1_000_000
258
+
h.logger.Info("persisting cursor", "cursor", cursor, "deltaSeconds", delta)
updateQuery := "insert into config (key, val) values ('cursor', ?) on conflict do update set val = ?"
if _, err := h.db.ExecContext(ctx, updateQuery, cursor, cursor); err != nil {
h.logger.Error("failed persisting cursor", "err", err)