This repository has been archived by the owner on Mar 20, 2024. It is now read-only.
/
main.go
88 lines (67 loc) · 1.64 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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
package main
import (
"log"
"time"
"github.com/jonjam/stock-checker/config"
"github.com/jonjam/stock-checker/services"
"github.com/jonjam/stock-checker/stores"
"github.com/go-co-op/gocron"
"go.uber.org/zap"
)
func main() {
c := config.NewAppConfig()
var logger *zap.Logger
var err error
if c.GetLogConfig().Development {
logger, err = zap.NewDevelopment()
} else {
logger, err = zap.NewProduction()
}
if err != nil {
log.Fatalf("Could not create logger: %s.\n", err)
}
defer func() {
if err := logger.Sync(); err != nil {
logger.Error("Failed to flush logs.", zap.Error(err))
}
}()
s := gocron.NewScheduler(time.UTC)
i := c.GetSchedulerConfig().Interval
_, err = s.Every(i).Hour().Do(func() {
checkStores(c, logger)
})
if err != nil {
logger.Fatal("Failed to create job.", zap.Error(err))
return
}
s.StartBlocking()
}
func checkStores(c config.Config, logger *zap.Logger) {
logger.Info("Starting task.")
s := []stores.Store{
stores.NewArgos(logger),
stores.NewAmazon(logger),
stores.NewCurrys(logger),
// TODO Re-enable Game once add timeout
// stores.NewGame(logger),
// TODO John Lewis doesn't work in headless mode
// stores.NewJohnLewis(logger),
stores.NewShopTo(logger),
stores.NewSmyths(logger),
}
storesChecker := services.NewStoresChecker(c, logger)
results := storesChecker.CheckStores(s)
hasStock := false
for _, v := range results {
if v.Status == stores.InStock {
hasStock = true
break
}
}
if hasStock {
t := services.NewTwilioClient(c)
n := services.NewNotifier(c, logger, t)
n.Notify(results)
}
logger.Info("Task complete.", zap.Any("results", results))
}