gh-3 config file entry and cli flag to enable the Prometheus exporter. Disabled by default.
This commit is contained in:
parent
df9e6d5471
commit
4062e62071
|
@ -44,6 +44,7 @@ type Conf struct {
|
||||||
Username string `yaml:"username"`
|
Username string `yaml:"username"`
|
||||||
Password string `yaml:"password"`
|
Password string `yaml:"password"`
|
||||||
Interval int `yaml:"interval"`
|
Interval int `yaml:"interval"`
|
||||||
|
EnableMetrics bool `yaml:"enable_metrics"`
|
||||||
LogAccess bool `yaml:"log_access"`
|
LogAccess bool `yaml:"log_access"`
|
||||||
Debug bool `yaml:"debug"`
|
Debug bool `yaml:"debug"`
|
||||||
}
|
}
|
||||||
|
@ -198,7 +199,9 @@ func serve(cert, key *string) {
|
||||||
http.HandleFunc("/api/v1/status", authHandlerFunc(status))
|
http.HandleFunc("/api/v1/status", authHandlerFunc(status))
|
||||||
http.HandleFunc("/api/v1/registers/", authHandlerFunc(registers))
|
http.HandleFunc("/api/v1/registers/", authHandlerFunc(registers))
|
||||||
http.HandleFunc("/api/v1/temperature/", authHandlerFunc(temperature))
|
http.HandleFunc("/api/v1/temperature/", authHandlerFunc(temperature))
|
||||||
|
if config.EnableMetrics {
|
||||||
http.Handle("/metrics", promhttp.Handler())
|
http.Handle("/metrics", promhttp.Handler())
|
||||||
|
}
|
||||||
html, err := fs.Sub(static, "static/html")
|
html, err := fs.Sub(static, "static/html")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
|
@ -280,6 +283,7 @@ func initDefaultConfig(confpath string) {
|
||||||
4,
|
4,
|
||||||
false,
|
false,
|
||||||
false,
|
false,
|
||||||
|
false,
|
||||||
}
|
}
|
||||||
conffile := confpath + "/configuration.yaml"
|
conffile := confpath + "/configuration.yaml"
|
||||||
confbytes, err := yaml.Marshal(&config)
|
confbytes, err := yaml.Marshal(&config)
|
||||||
|
@ -303,6 +307,7 @@ func configure() {
|
||||||
keyflag := flag.String("key", config.SslPrivatekey, "Path to SSL private key to use for HTTPS")
|
keyflag := flag.String("key", config.SslPrivatekey, "Path to SSL private key to use for HTTPS")
|
||||||
usernflag := flag.String("username", config.Username, "Username for HTTP Basic Authentication")
|
usernflag := flag.String("username", config.Username, "Username for HTTP Basic Authentication")
|
||||||
passwflag := flag.String("password", config.Password, "Password for HTTP Basic Authentication")
|
passwflag := flag.String("password", config.Password, "Password for HTTP Basic Authentication")
|
||||||
|
promflag := flag.Bool("enable-metrics", config.EnableMetrics, "Enable the built-in Prometheus exporter")
|
||||||
// TODO: log file flag
|
// TODO: log file flag
|
||||||
flag.Parse()
|
flag.Parse()
|
||||||
config.Debug = *debugflag
|
config.Debug = *debugflag
|
||||||
|
@ -312,6 +317,7 @@ func configure() {
|
||||||
config.SslPrivatekey = *keyflag
|
config.SslPrivatekey = *keyflag
|
||||||
config.Username = *usernflag
|
config.Username = *usernflag
|
||||||
config.Password = *passwflag
|
config.Password = *passwflag
|
||||||
|
config.EnableMetrics = *promflag
|
||||||
usernamehash = sha256.Sum256([]byte(config.Username))
|
usernamehash = sha256.Sum256([]byte(config.Username))
|
||||||
passwordhash = sha256.Sum256([]byte(config.Password))
|
passwordhash = sha256.Sum256([]byte(config.Password))
|
||||||
// Check that certificate file exists, generate if needed
|
// Check that certificate file exists, generate if needed
|
||||||
|
@ -327,8 +333,10 @@ func configure() {
|
||||||
log.Println("HTTP Access logging enabled")
|
log.Println("HTTP Access logging enabled")
|
||||||
}
|
}
|
||||||
log.Println("Update interval set to", config.Interval, "seconds")
|
log.Println("Update interval set to", config.Interval, "seconds")
|
||||||
|
if config.EnableMetrics {
|
||||||
prometheus.MustRegister(&pingvin)
|
prometheus.MustRegister(&pingvin)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
log.Println("enervent-ctrl version", version)
|
log.Println("enervent-ctrl version", version)
|
||||||
|
|
|
@ -573,27 +573,7 @@ func (p *PingvinKL) Monitor(interval int) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// func (p *PingvinKL) Describe(ch chan<- *prometheus.Desc) {
|
// Implements prometheus.Describe()
|
||||||
|
|
||||||
// }
|
|
||||||
|
|
||||||
func (p *PingvinKL) prometheusRegister() {
|
|
||||||
for _, hreg := range p.Registers {
|
|
||||||
hreg.PromDesc = prometheus.NewDesc(
|
|
||||||
prometheus.BuildFQName("", "pingvin", strings.ToLower(hreg.Symbol)),
|
|
||||||
hreg.Description,
|
|
||||||
nil,
|
|
||||||
nil,
|
|
||||||
)
|
|
||||||
|
|
||||||
}
|
|
||||||
// prometheus.MustRegister(
|
|
||||||
// // collectors.NewGoCollector(),
|
|
||||||
// // collectors.NewProcessCollector(collectors.ProcessCollectorOpts{}),
|
|
||||||
// p,
|
|
||||||
// )
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *PingvinKL) Describe(ch chan<- *prometheus.Desc) {
|
func (p *PingvinKL) Describe(ch chan<- *prometheus.Desc) {
|
||||||
for _, hreg := range p.Registers {
|
for _, hreg := range p.Registers {
|
||||||
if !hreg.Reserved {
|
if !hreg.Reserved {
|
||||||
|
@ -607,6 +587,7 @@ func (p *PingvinKL) Describe(ch chan<- *prometheus.Desc) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Implements prometheus.Collect()
|
||||||
func (p *PingvinKL) Collect(ch chan<- prometheus.Metric) {
|
func (p *PingvinKL) Collect(ch chan<- prometheus.Metric) {
|
||||||
for _, hreg := range p.Registers {
|
for _, hreg := range p.Registers {
|
||||||
if !hreg.Reserved {
|
if !hreg.Reserved {
|
||||||
|
@ -632,22 +613,6 @@ func (p *PingvinKL) Collect(ch chan<- prometheus.Metric) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// for _, coil := range p.Coils {
|
|
||||||
// if coil.Reserved {
|
|
||||||
// continue
|
|
||||||
// }
|
|
||||||
// if err := p.Promreg.Register(prometheus.NewGauge(
|
|
||||||
// prometheus.GaugeOpts{
|
|
||||||
// Subsystem: "pingvin",
|
|
||||||
// Name: strings.ToLower(coil.Symbol),
|
|
||||||
// Help: coil.Description,
|
|
||||||
// },
|
|
||||||
// )); err == nil {
|
|
||||||
// p.Debug.Println("GaugeFunc pingvin_"+coil.Symbol, "registered.")
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// create a PingvinKL struct, read coils and registers from CSVs
|
// create a PingvinKL struct, read coils and registers from CSVs
|
||||||
func New(debug bool) PingvinKL {
|
func New(debug bool) PingvinKL {
|
||||||
pingvin := PingvinKL{}
|
pingvin := PingvinKL{}
|
||||||
|
@ -667,6 +632,5 @@ func New(debug bool) PingvinKL {
|
||||||
newRegister(registerData[i][0], registerData[i][1], registerData[i][2], registerData[i][3], registerData[i][6]))
|
newRegister(registerData[i][0], registerData[i][1], registerData[i][2], registerData[i][3], registerData[i][6]))
|
||||||
}
|
}
|
||||||
log.Println("Parsed", len(pingvin.Registers), "registers")
|
log.Println("Parsed", len(pingvin.Registers), "registers")
|
||||||
// pingvin.prometheusRegister()
|
|
||||||
return pingvin
|
return pingvin
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue