Files
grosbeak/cmd/api/init.go
Matt Jadud f53639af2f Queueing, prepping to fetch
A lot more to go, but this is the core.

Need to think about how to test the queue handlers.
2025-11-30 21:29:30 -05:00

79 lines
1.6 KiB
Go

package main
import (
"context"
"database/sql"
"fmt"
"log"
"os"
"time"
"git.jadud.com/jadudm/grosbeak/internal/domain64"
"git.jadud.com/jadudm/grosbeak/internal/engine"
liteq "git.jadud.com/jadudm/grosbeak/internal/liteq"
"git.jadud.com/jadudm/grosbeak/internal/types"
_ "modernc.org/sqlite"
)
func setupDB() *sql.DB {
// FIXME: This path needs to come from the env.
db, err := sql.Open("sqlite", "grosbeak.sqlite")
db.SetMaxOpenConns(1)
if err != nil {
fmt.Println(err)
os.Exit(1)
}
return db
}
func runQ(queue *liteq.JobQueue, queueName string, worker types.QueueWorker) {
for {
log.Printf("runQ %s\n", queueName)
err := queue.Consume(context.Background(), liteq.ConsumeParams{
Queue: queueName,
PoolSize: 3,
VisibilityTimeout: 20,
Worker: worker,
})
if err != nil {
log.Printf("runQ/%s: %s", queueName, err.Error())
time.Sleep(2 * time.Second)
}
time.Sleep(1 * time.Second)
}
}
func setupLiteQ(db *sql.DB, d64m *domain64.Domain64Map) *liteq.JobQueue {
liteq.Setup(db)
queue := liteq.New(db)
// The queue processes as long as this context is not cancelled.
log.Println("setting up worker queues...")
queues := []struct {
queueName string
worker types.QueueWorker
}{
{"fetch", engine.Fetch(d64m)},
}
for _, q := range queues {
go runQ(queue, q.queueName, q.worker)
}
return queue
}
func setupDomain64Map(db *sql.DB) *domain64.Domain64Map {
d64m, err := domain64.NewDomain64Map()
if err != nil {
log.Printf("newdomain64map err: %s", err.Error())
os.Exit(1)
}
d64m.Setup(db)
return d64m
}