-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy pathmain.go
96 lines (82 loc) · 2.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
89
90
91
92
93
94
95
96
package main
import (
"fmt"
_ "net/http/pprof"
"os"
"path/filepath"
"github.com/go-kit/log"
"github.com/go-kit/log/level"
"github.com/criteo/blackbox-prober/pkg/aerospike"
"github.com/criteo/blackbox-prober/pkg/common"
"github.com/criteo/blackbox-prober/pkg/discovery"
"github.com/criteo/blackbox-prober/pkg/scheduler"
asl "github.com/aerospike/aerospike-client-go/v7/logger"
"github.com/criteo/blackbox-prober/pkg/topology"
"github.com/pkg/errors"
"github.com/prometheus/common/promlog"
"gopkg.in/alecthomas/kingpin.v2"
)
// TODO: add timeouts
func main() {
// CLI Flags
commonCfg := common.ProbeConfig{
LogConfig: promlog.Config{},
}
aerospikeCfg := aerospike.AerospikeProbeCommandLine{}
a := kingpin.New(filepath.Base(os.Args[0]), "Aerospike blackbox probe").UsageWriter(os.Stdout)
common.AddFlags(a, &commonCfg)
aerospike.AddFlags(a, &aerospikeCfg)
_, err := a.Parse(os.Args[1:])
if err != nil {
fmt.Fprintln(os.Stderr, errors.Wrapf(err, "Error parsing commandline arguments"))
a.Usage(os.Args[1:])
os.Exit(2)
}
// Init loggger
logger := commonCfg.GetLogger()
aslLevel, err := aerospike.GetLevel(aerospikeCfg.AerospikeLogLevel)
if err != nil {
fmt.Fprintln(os.Stderr, err)
a.Usage(os.Args[1:])
os.Exit(2)
}
asl.Logger.SetLevel(aslLevel)
// Parse config file
config := aerospike.AerospikeProbeConfig{}
err = commonCfg.ParseConfigFile(&config)
if err != nil {
level.Error(logger).Log("msg", "Fatal: error during parsing of config file", "err", err)
os.Exit(2)
}
// Metrics/pprof server
commonCfg.StartHttpServer()
// DISCO stuff
topo := make(chan topology.ClusterMap, 1)
discoverer, err := discovery.NewConsulDiscoverer(log.With(logger), config.DiscoveryConfig.ConsulConfig, topo, config.NamespacedTopologyBuilder())
if err != nil {
level.Error(logger).Log("msg", "Fatal: error during init of service discovery", "err", err)
os.Exit(2)
}
go discoverer.Start()
// Scheduler stuff
p := scheduler.NewProbingScheduler(log.With(logger), topo)
if config.AerospikeChecksConfigs.LatencyCheckConfig.Enable {
p.RegisterNewClusterCheck(scheduler.Check{
Name: "latency_check",
PrepareFn: scheduler.Noop,
CheckFn: aerospike.LatencyCheck,
TeardownFn: scheduler.Noop,
Interval: config.AerospikeChecksConfigs.LatencyCheckConfig.Interval,
})
}
if config.AerospikeChecksConfigs.DurabilityCheckConfig.Enable {
p.RegisterNewClusterCheck(scheduler.Check{
Name: "durability_check",
PrepareFn: aerospike.DurabilityPrepare,
CheckFn: aerospike.DurabilityCheck,
TeardownFn: scheduler.Noop,
Interval: config.AerospikeChecksConfigs.DurabilityCheckConfig.Interval,
})
}
p.Start()
}