this repo has no description
1package main
2
3import (
4 "context"
5 "database/sql"
6 "log"
7 "os"
8 "os/signal"
9 "syscall"
10
11 "github.com/edavis/bsky-feeds/pkg/mostliked"
12 "github.com/gorilla/websocket"
13 _ "github.com/mattn/go-sqlite3"
14)
15
16const JetstreamUrl = `wss://jetstream2.us-west.bsky.network/subscribe?wantedCollections=app.bsky.feed.post&wantedCollections=app.bsky.feed.like`
17
18func main() {
19 ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt, syscall.SIGINT, syscall.SIGTERM)
20 defer stop()
21
22 conn, _, err := websocket.DefaultDialer.Dial(JetstreamUrl, nil)
23 if err != nil {
24 log.Fatalf("failed to open websocket: %v\n", err)
25 }
26 defer func() {
27 if err := conn.Close(); err != nil {
28 log.Printf("failed to close websocket: %v\n", err)
29 }
30 log.Printf("websocket closed\n")
31 }()
32
33 dbCnx, err := sql.Open("sqlite3", "data/mostliked.db?_journal=WAL&_fk=on&_timeout=5000&_sync=1&_txlock=immediate")
34 if err != nil {
35 log.Fatalf("failed to open database: %v\n", err)
36 }
37 defer func() {
38 if _, err := dbCnx.Exec("PRAGMA wal_checkpoint(TRUNCATE)"); err != nil {
39 log.Printf("error doing final WAL checkpoint: %v\n", err)
40 }
41 if err := dbCnx.Close(); err != nil {
42 log.Printf("failed to close db: %v\n", err)
43 }
44 log.Printf("db closed\n")
45 }()
46
47 jetstreamEvents := make(chan []byte)
48 go mostliked.Handler(ctx, jetstreamEvents, dbCnx)
49
50 log.Printf("starting up\n")
51 go func() {
52 for {
53 _, message, err := conn.ReadMessage()
54 if err != nil {
55 log.Printf("ReadJSON error: %v\n", err)
56 stop()
57 break
58 }
59 jetstreamEvents <- message
60 }
61 }()
62
63 <-ctx.Done()
64 log.Printf("shutting down\n")
65}