this repo has no description
at master 1.6 kB view raw
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}