Browse Source

do not panic if metrics initialization fails

pull/80/head
aler9 5 years ago
parent
commit
833ce34838
  1. 7
      main.go
  2. 26
      metrics.go

7
main.go

@ -210,7 +210,7 @@ func newProgram(args []string, stdin io.Reader) (*program, error) {
if _, ok := p.conf.logDestinationsParsed[logDestinationFile]; ok { if _, ok := p.conf.logDestinationsParsed[logDestinationFile]; ok {
p.logFile, err = os.OpenFile(p.conf.LogFile, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644) p.logFile, err = os.OpenFile(p.conf.LogFile, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
if err != nil { if err != nil {
log.Fatal("ERR:", err) return nil, err
} }
} }
@ -231,7 +231,10 @@ func newProgram(args []string, stdin io.Reader) (*program, error) {
} }
if conf.Metrics { if conf.Metrics {
p.metrics = newMetrics(p) p.metrics, err = newMetrics(p)
if err != nil {
return nil, err
}
} }
if conf.Pprof { if conf.Pprof {

26
metrics.go

@ -4,6 +4,7 @@ import (
"context" "context"
"fmt" "fmt"
"io" "io"
"net"
"net/http" "net/http"
"time" "time"
) )
@ -19,25 +20,32 @@ type metricsData struct {
} }
type metrics struct { type metrics struct {
p *program p *program
mux *http.ServeMux mux *http.ServeMux
server *http.Server server *http.Server
listener net.Listener
} }
func newMetrics(p *program) *metrics { func newMetrics(p *program) (*metrics, error) {
listener, err := net.Listen("tcp", metricsAddress)
if err != nil {
return nil, err
}
m := &metrics{ m := &metrics{
p: p, p: p,
listener: listener,
} }
m.mux = http.NewServeMux() m.mux = http.NewServeMux()
m.mux.HandleFunc("/metrics", m.onMetrics) m.mux.HandleFunc("/metrics", m.onMetrics)
m.server = &http.Server{ m.server = &http.Server{
Addr: metricsAddress,
Handler: m.mux, Handler: m.mux,
} }
m.log("opened on " + metricsAddress)
return m m.log("opened on " + metricsAddress)
return m, nil
} }
func (m *metrics) log(format string, args ...interface{}) { func (m *metrics) log(format string, args ...interface{}) {
@ -45,7 +53,7 @@ func (m *metrics) log(format string, args ...interface{}) {
} }
func (m *metrics) run() { func (m *metrics) run() {
err := m.server.ListenAndServe() err := m.server.Serve(m.listener)
if err != http.ErrServerClosed { if err != http.ErrServerClosed {
panic(err) panic(err)
} }

Loading…
Cancel
Save