-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.go
71 lines (60 loc) · 1.52 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
package main
import (
"log"
"os"
"os/signal"
"syscall"
"time"
conf "github.com/brentahughes/service_tester/pkg/config"
"github.com/brentahughes/service_tester/pkg/models"
"github.com/brentahughes/service_tester/pkg/service"
"github.com/brentahughes/service_tester/pkg/servicecheck"
"github.com/brentahughes/service_tester/pkg/webserver"
"github.com/dgraph-io/badger"
)
func init() {
conf.Init()
}
func main() {
c, err := conf.LoadEnvConfig()
if err != nil {
log.Fatal(err)
}
opts := badger.DefaultOptions(".db").WithSyncWrites(false)
db, err := badger.Open(opts)
if err != nil {
log.Fatal("error opening database: ", err)
}
defer db.Close()
go keepCurrentHostUpdated(db, c)
s := service.NewService(c.ServicePort)
go s.Start()
checker, err := servicecheck.NewChecker(db, c)
if err != nil {
log.Fatal(err)
}
go checker.Start()
defer checker.Stop()
server := webserver.NewServer(*c, db, c.Port)
go func() {
if err := server.Start(); err != nil {
log.Fatal("error starting web interface", err)
}
}()
defer server.Stop()
sig := make(chan os.Signal, 1)
signal.Notify(sig, os.Interrupt, syscall.SIGTERM)
<-sig
log.Printf("Shutdown signal received")
}
func keepCurrentHostUpdated(db *badger.DB, c *conf.Config) {
if err := models.UpdateCurrentHost(db, c, true); err != nil {
log.Fatal("Error updating current host: ", err)
}
t := time.NewTicker(time.Hour)
for range t.C {
if err := models.UpdateCurrentHost(db, c, false); err != nil {
log.Println("Error updating current host: ", err)
}
}
}