this repo has no description

feat: do a little better at cleanup

Changed files
+37 -15
cmd
mostliked
pkg
mostliked
+36 -8
cmd/mostliked/main.go
···
package main
import (
+
"database/sql"
"log"
+
"os"
+
"os/signal"
+
"syscall"
"github.com/edavis/bsky-feeds/pkg/mostliked"
"github.com/gorilla/websocket"
+
_ "github.com/mattn/go-sqlite3"
)
func main() {
···
log.Fatal("websocket connection error:", err)
}
defer conn.Close()
+
+
dbCnx, err := sql.Open("sqlite3", "data/mostliked.db?_journal=WAL&_fk=on")
+
if err != nil {
+
log.Fatal("error opening db")
+
}
+
defer dbCnx.Close()
jetstreamEvents := make(chan []byte)
-
go mostliked.Handler(jetstreamEvents)
+
go mostliked.Handler(jetstreamEvents, dbCnx)
+
+
signalChan := make(chan os.Signal, 1)
+
cleanupDone := make(chan struct{})
+
signal.Notify(signalChan, os.Interrupt, syscall.SIGINT, syscall.SIGTERM)
+
+
go func(conn *websocket.Conn, dbCnx *sql.DB, jetstreamEvents chan []byte) {
+
<-signalChan
+
log.Println("shutting down...")
+
close(jetstreamEvents)
+
dbCnx.Close()
+
conn.Close()
+
close(cleanupDone)
+
}(conn, dbCnx, jetstreamEvents)
log.Println("starting up")
-
for {
-
_, message, err := conn.ReadMessage()
-
if err != nil {
-
log.Println("error reading from websocket:", err)
-
break
+
go func(conn *websocket.Conn) {
+
for {
+
_, message, err := conn.ReadMessage()
+
if err != nil {
+
log.Println("error reading from websocket:", err)
+
break
+
}
+
jetstreamEvents <- message
}
-
jetstreamEvents <- message
-
}
+
}(conn)
+
+
<-cleanupDone
}
+1 -7
pkg/mostliked/handler.go
···
return ""
}
-
func Handler(events <-chan []byte) {
+
func Handler(events <-chan []byte, dbCnx *sql.DB) {
ctx := context.Background()
-
dbCnx, err := sql.Open("sqlite3", "data/mostliked.db?_journal=WAL&_fk=on")
-
if err != nil {
-
log.Fatal("error opening db")
-
}
if _, err := dbCnx.ExecContext(ctx, ddl); err != nil {
log.Fatal("couldn't create tables")
}
-
defer dbCnx.Close()
-
queries := db.New(dbCnx)
drafts := ccache.New(ccache.Configure[DraftPost]().MaxSize(50_000).GetsPerPromote(1))