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 }