forked from mreading/voltdb_exporter
-
Notifications
You must be signed in to change notification settings - Fork 1
/
voltdb_exporter.go
103 lines (90 loc) · 3.32 KB
/
voltdb_exporter.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
package main
import (
"flag"
"net/http"
"os"
"strings"
"github.com/opsgang/prometheus_voltdb_exporter/lib"
"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus/promhttp"
"github.com/prometheus/common/log"
)
var (
addresses string
username string
password string
namespace string
listenAddress string
metricPath string
useHTTP bool
insecureHTTPS bool
)
// Parse CLI for flags and set variables; also acts as bootstrap --help
func init() {
flag.StringVar(&addresses, "h", "localhost:8080", "List of cluster addresses, comma seperated")
flag.StringVar(&username, "u", "", "Username for database authentication")
flag.StringVar(&password, "p", "", "Password for database authentication")
flag.StringVar(&namespace, "n", "voltdb", "Namespace for metrics")
flag.StringVar(&listenAddress, "l", ":9469", "Address to listen on for web interface and telemetry.")
flag.StringVar(&metricPath, "m", "/metrics", "Path under which to expose metrics.")
flag.BoolVar(&useHTTP, "H", false, "Use http connectins")
flag.BoolVar(&insecureHTTPS, "i", false, "Skip certificate check")
}
// Override values if the ENV vars are set
func envOverrides() {
envVarHost, isEnvVarHostSet := os.LookupEnv("VOLTDB_EXPORTER_HOST")
envVarUser, isEnvVarUserSet := os.LookupEnv("VOLTDB_EXPORTER_USER")
envVarPass, isEnvVarPassSet := os.LookupEnv("VOLTDB_EXPORTER_PASS")
envVarNamespace, isEnvVarNamespaceSet := os.LookupEnv("VOLTDB_EXPORTER_NAMESPACE")
envVarListen, isEnvVarListenSet := os.LookupEnv("VOLTDB_EXPORTER_LISTEN")
envVarPath, isEnvVarPathSet := os.LookupEnv("VOLTDB_EXPORTER_PATH")
envVarProto, isEnvVarProtoSet := os.LookupEnv("VOLTDB_EXPORTER_USE_HTTP")
envVarInsecure, isEnvVarInsecureSet := os.LookupEnv("VOLTDB_EXPORTER_INSECURE")
if isEnvVarHostSet && len(envVarHost) > 0 {
addresses = envVarHost
}
if isEnvVarUserSet && len(envVarUser) > 0 {
username = envVarUser
}
if isEnvVarPassSet && len(envVarPass) > 0 {
password = envVarPass
}
if isEnvVarNamespaceSet && len(envVarNamespace) > 0 {
namespace = envVarNamespace
}
if isEnvVarListenSet && len(envVarListen) > 0 {
listenAddress = envVarListen
}
if isEnvVarPathSet && len(envVarPath) > 0 {
metricPath = envVarPath
}
if isEnvVarProtoSet && (envVarProto == "true" || envVarProto == "1" || envVarProto == "yes") {
useHTTP = true
}
if isEnvVarInsecureSet && (envVarInsecure == "true" || envVarInsecure == "1" || envVarInsecure == "yes") {
insecureHTTPS = true
}
}
func main() {
flag.Parse()
envOverrides()
// split comma seperated string into list of databases
databases := strings.Split(addresses, ",")
// Configure base HTTP page with link to metrics
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte(`<html>
<head><title>VoltDB exporter</title></head>
<body>
<h1>VoltDB exporter</h1>
<p><a href='` + metricPath + `'>Metrics</a></p>
</body>
</html>
`))
})
// Initialize exporter, link to Prometheus, and configure metrics HTTP page
prometheus.MustRegister(lib.NewVoltDBExporter(namespace, username, password, databases, useHTTP, insecureHTTPS))
http.Handle(metricPath, promhttp.Handler())
// Start HTTP server and prepare for scraping
log.Infof("listening at %s", listenAddress)
log.Fatal(http.ListenAndServe(listenAddress, nil))
}