Skip to content

Commit

Permalink
Use Go error handler instead of panic, simplify the previous commit a…
Browse files Browse the repository at this point in the history
… bit
  • Loading branch information
Stefan Safar committed May 11, 2019
1 parent 25bb031 commit c0ea881
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 24 deletions.
20 changes: 4 additions & 16 deletions collector.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,18 +27,13 @@ const (

var (
labelNames = []string{"ip", "host"}

pingResponseSeconds *prometheus.HistogramVec

hasRegistered bool
)

func init() {
hasRegistered = false
}

func setHistogramOptions(buckets []float64) {
pingResponseSeconds = prometheus.NewHistogramVec(
func newPingResponseHistogram(buckets []float64) **prometheus.HistogramVec {
pingResponseSeconds := prometheus.NewHistogramVec(
prometheus.HistogramOpts{
Namespace: namespace,
Name: "response_duration_seconds",
Expand All @@ -47,14 +42,7 @@ func setHistogramOptions(buckets []float64) {
},
labelNames,
)
}

func registerMetrics() {
if hasRegistered {
panic("ERROR: called registerMetrics() twice\n")
}
prometheus.MustRegister(pingResponseSeconds)
hasRegistered = true
return &pingResponseSeconds
}

// SmokepingCollector collects metrics from the pinger.
Expand All @@ -64,7 +52,7 @@ type SmokepingCollector struct {
requestsSent *prometheus.Desc
}

func NewSmokepingCollector(pingers *[]*ping.Pinger) *SmokepingCollector {
func NewSmokepingCollector(pingers *[]*ping.Pinger, pingResponseSeconds prometheus.HistogramVec) *SmokepingCollector {
for _, pinger := range *pingers {
pinger.OnRecv = func(pkt *ping.Packet) {
pingResponseSeconds.WithLabelValues(pkt.IPAddr.String(), pkt.Addr).Observe(pkt.Rtt.Seconds())
Expand Down
21 changes: 13 additions & 8 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -62,17 +62,17 @@ func init() {
prometheus.MustRegister(version.NewCollector("smokeping_prober"))
}

func parseBuckets(buckets *string) (bucketlist []float64) {
func parseBuckets(buckets *string) ([]float64, error) {
bucketstrings := strings.Split(*buckets, ",")
bucketlist = make([]float64, len(bucketstrings))
bucketlist := make([]float64, len(bucketstrings))
for n := 0; n < len(bucketstrings); n++ {
value, err := strconv.ParseFloat(bucketstrings[n], 64)
if err != nil {
panic(err)
return nil, err
}
bucketlist[n] = value
}
return bucketlist
return bucketlist, nil
}

func main() {
Expand All @@ -97,10 +97,15 @@ func main() {
if len(*buckets) == 0 {
bucketlist = prometheus.ExponentialBuckets(0.00005, 2, 20)
} else {
bucketlist = parseBuckets(buckets)
var err error
bucketlist, err = parseBuckets(buckets)
if err != nil {
log.Errorf("ERROR: %s\n", err.Error())
return
}
}
setHistogramOptions(bucketlist)
registerMetrics()
pingResponseSeconds := newPingResponseHistogram(bucketlist)
prometheus.MustRegister(*pingResponseSeconds)

pingers := make([]*ping.Pinger, len(*hosts))
for i, host := range *hosts {
Expand All @@ -119,7 +124,7 @@ func main() {
pingers[i] = pinger
}

prometheus.MustRegister(NewSmokepingCollector(&pingers))
prometheus.MustRegister(NewSmokepingCollector(&pingers, **pingResponseSeconds))

http.Handle(*metricsPath, promhttp.Handler())
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
Expand Down

0 comments on commit c0ea881

Please sign in to comment.