A lot more to go, but this is the core. Need to think about how to test the queue handlers.
79 lines
1.6 KiB
Go
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
|
|
}
|