forked from mperham/inspeqtor-pro
/
main.go
118 lines (97 loc) · 2.43 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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
package main
import (
"log"
"os"
"github.com/mperham/inspeqtor"
_ "github.com/mperham/inspeqtor-pro/channels"
"github.com/mperham/inspeqtor-pro/expose"
"github.com/mperham/inspeqtor-pro/jobs"
_ "github.com/mperham/inspeqtor-pro/ownership"
"github.com/mperham/inspeqtor-pro/statsd"
"github.com/mperham/inspeqtor/cli"
"github.com/mperham/inspeqtor/util"
)
func main() {
inspeqtor.Name = "Inspeqtor Pro"
cli.StartupInfo = func() {
}
cli.SetupLogging()
options := cli.ParseArguments()
_, err := verifyLicense(options.ConfigDirectory)
if err != nil {
util.Warn("Error verifying license file: %s", err)
os.Exit(127)
}
ins, err := inspeqtor.New(options.ConfigDirectory, options.SocketPath)
if err != nil {
log.Fatalln(err)
}
err = ins.Parse()
if err != nil {
log.Fatalln(err)
}
err = bootstrapJobs(ins, options.ConfigDirectory)
if err != nil {
log.Fatalln(err)
}
err = bootstrapStatsd(ins, options.ConfigDirectory)
if err != nil {
log.Fatalln(err)
}
err = expose.Bootstrap(ins)
if err != nil {
log.Fatalln(err)
}
if options.TestConfig {
util.Info("Configuration parsed ok.")
os.Exit(0)
} else if options.TestAlertRoutes {
ins.TestAlertRoutes()
} else {
ins.Start()
inspeqtor.HandleSignals()
}
}
func bootstrapStatsd(ins *inspeqtor.Inspeqtor, cfgDir string) error {
err := statsdReload(nil, ins)
if err != nil {
return err
}
inspeqtor.Reloaders = append(inspeqtor.Reloaders, statsdReload)
return nil
}
func statsdReload(_ *inspeqtor.Inspeqtor, newi *inspeqtor.Inspeqtor) error {
val, ok := newi.GlobalConfig.Variables["statsd_location"]
if !ok {
util.Debug("No statsd_location configured, skipping...")
return nil
}
util.Info("Pushing metrics to statsd at %s", val)
conn, err := statsd.Dial(val)
if err != nil {
return err
}
newi.Listen("cycleComplete", func(ins *inspeqtor.Inspeqtor) error {
return statsd.Export(conn, ins)
})
newi.Listen("shutdown", func(ins *inspeqtor.Inspeqtor) error {
return conn.Close()
})
return nil
}
func bootstrapJobs(ins *inspeqtor.Inspeqtor, cfgDir string) error {
recurring, err := jobs.Parse(ins.GlobalConfig, cfgDir)
if err != nil {
return err
}
jobs.Watch(ins, recurring)
inspeqtor.Reloaders = append(inspeqtor.Reloaders, func(old *inspeqtor.Inspeqtor, newi *inspeqtor.Inspeqtor) error {
recurring, err := jobs.Parse(newi.GlobalConfig, cfgDir)
if err != nil {
return err
}
jobs.Watch(newi, recurring)
return nil
})
return nil
}