-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.go
executable file
·74 lines (58 loc) · 1.56 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
package main
import (
"context"
"log"
"os"
"os/signal"
"syscall"
"time"
"github.com/ezeql/appcues-increment-simple/internal/storage"
"github.com/go-redis/redis/v7"
"github.com/jackc/pgx/v4/pgxpool"
)
const (
// Redis host environment var name
redisHostEnvName = "REDIS"
dbHostEnvName = "DATABASE_URL"
batchSize = 100
prefetchLimit = 500
pollDuration = 100 * time.Millisecond
batchTimeout = time.Second
)
func main() {
log.SetOutput(os.Stdout)
log.Printf("worker-db started")
// check for redis env var
redisHost, found := os.LookupEnv(redisHostEnvName)
if !found {
log.Fatalf("required environment var not defined: %v\n", redisHostEnvName)
}
// check for db env var
dbHost, found := os.LookupEnv(dbHostEnvName)
if !found {
log.Fatalf("required environment var not defined: %v\n", dbHost)
}
redisClient := redis.NewClient(&redis.Options{Addr: redisHost})
pool, err := pgxpool.Connect(context.Background(), dbHost)
if err != nil {
log.Fatalf("failed to open a connection to pgsql: %v\n", err)
}
defer pool.Close()
worker, err := storage.NewStoreWorker(redisClient, pool, &storage.StoreConfig{
PrefetchLimit: prefetchLimit,
PollDuration: pollDuration,
})
if err != nil {
log.Fatalf("couldn't start worker: %v\n", err)
}
defer worker.StopAll()
// TODO: Missing handle graceful shutdown
signals := make(chan os.Signal, 1)
signal.Notify(signals, syscall.SIGINT)
defer signal.Stop(signals)
<-signals // wait for signal
go func() {
<-signals // hard exit on second signal (in case shutdown gets stuck)
os.Exit(1)
}()
}