-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.go
85 lines (66 loc) · 1.77 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
package main
// Export wireless station metrics from an Omada WiFi Controller
import (
"flag"
"io"
"net/http"
"os"
"github.com/jamessanford/omada-controller-exporter/collector"
"github.com/jamessanford/omada-controller-exporter/omada"
"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus/promhttp"
"go.uber.org/zap"
)
var (
configFile = flag.String("config", "", "path to YAML config")
httpAddr = flag.String("http", ":6779", "listen on this address")
)
const usageMessage = `Connect to a TP-Link Omada Controller and expose metrics.
Usage:
omada-controller-exporter [-config <file>] [-http <listen address>]
Configuration:
Use either -config <file> against a YAML file like this:
path: https://192.168.255.123:8043/
user: admin
pass: foo
secure: false
Or configure via environment variables:
OMADA_PATH=https://192.168.255.123:8043/
OMADA_USER=admin
OMADA_PASS=foo
OMADA_SECURE=false
Options:
`
func usage() {
os.Stderr.Write([]byte(usageMessage))
flag.PrintDefaults()
}
func main() {
flag.Usage = usage
flag.Parse()
logger, err := zap.NewProduction()
if err != nil {
panic(err)
}
config, err := omada.ParseConfig(*configFile)
if err != nil {
panic(err)
}
controller, err := omada.NewClient(logger, config)
if err != nil {
panic(err)
}
prometheus.MustRegister(collector.NewOmadaCollector(logger, controller))
http.HandleFunc("/", func(w http.ResponseWriter, _ *http.Request) {
w.WriteHeader(http.StatusNotFound)
_, _ = io.WriteString(w, "omada-controller-exporter")
})
http.Handle("/metrics", promhttp.Handler())
logger.Info(
"listening",
zap.String("address", *httpAddr),
)
if err := http.ListenAndServe(*httpAddr, nil); err != nil {
logger.Fatal("ListenAndServe", zap.Error(err))
}
}