1- // Copyright 2018 Prometheus Team
1+ // Copyright The Prometheus Authors
22// Licensed under the Apache License, Version 2.0 (the "License");
33// you may not use this file except in compliance with the License.
44// You may obtain a copy of the License at
@@ -29,6 +29,7 @@ import (
2929 "github.com/hashicorp/memberlist"
3030 "github.com/oklog/ulid"
3131 "github.com/prometheus/client_golang/prometheus"
32+ "github.com/prometheus/client_golang/prometheus/promauto"
3233)
3334
3435// ClusterPeer represents a single Peer in a gossip cluster.
@@ -142,6 +143,7 @@ func Create(
142143 tlsTransportConfig * TLSTransportConfig ,
143144 allowInsecureAdvertise bool ,
144145 label string ,
146+ name string ,
145147) (* Peer , error ) {
146148 bindHost , bindPortStr , err := net .SplitHostPort (bindAddr )
147149 if err != nil {
@@ -187,10 +189,13 @@ func Create(
187189 advertisePort = bindPort
188190 }
189191
190- // TODO(fabxc): generate human-readable but random names?
191- name , err := ulid .New (ulid .Now (), rand .New (rand .NewSource (time .Now ().UnixNano ())))
192- if err != nil {
193- return nil , err
192+ // Generate a random name if none is provided.
193+ if name == "" {
194+ id , err := ulid .New (ulid .Now (), rand .New (rand .NewSource (time .Now ().UnixNano ())))
195+ if err != nil {
196+ return nil , err
197+ }
198+ name = id .String ()
194199 }
195200
196201 p := & Peer {
@@ -203,7 +208,7 @@ func Create(
203208 knownPeers : knownPeers ,
204209 }
205210
206- p .register (reg , name . String () )
211+ p .register (reg , name )
207212
208213 retransmit := len (knownPeers ) / 2
209214 if retransmit < 3 {
@@ -212,13 +217,14 @@ func Create(
212217 p .delegate = newDelegate (l , reg , p , retransmit )
213218
214219 cfg := memberlist .DefaultLANConfig ()
215- cfg .Name = name . String ()
220+ cfg .Name = name
216221 cfg .BindAddr = bindHost
217222 cfg .BindPort = bindPort
218223 cfg .Delegate = p .delegate
219224 cfg .Ping = p .delegate
220225 cfg .Alive = p .delegate
221226 cfg .Events = p .delegate
227+ cfg .Conflict = p .delegate
222228 cfg .GossipInterval = gossipInterval
223229 cfg .PushPullInterval = pushPullInterval
224230 cfg .TCPTimeout = tcpTimeout
@@ -333,15 +339,15 @@ func (p *Peer) setInitialFailed(peers []string, myAddr string) {
333339}
334340
335341func (p * Peer ) register (reg prometheus.Registerer , name string ) {
336- peerInfo := prometheus .NewGauge (
342+ peerInfo := promauto . With ( reg ) .NewGauge (
337343 prometheus.GaugeOpts {
338344 Name : "alertmanager_cluster_peer_info" ,
339345 Help : "A metric with a constant '1' value labeled by peer name." ,
340346 ConstLabels : prometheus.Labels {"peer" : name },
341347 },
342348 )
343349 peerInfo .Set (1 )
344- clusterFailedPeers := prometheus .NewGaugeFunc (prometheus.GaugeOpts {
350+ promauto . With ( reg ) .NewGaugeFunc (prometheus.GaugeOpts {
345351 Name : "alertmanager_cluster_failed_peers" ,
346352 Help : "Number indicating the current number of failed peers in the cluster." ,
347353 }, func () float64 {
@@ -350,40 +356,37 @@ func (p *Peer) register(reg prometheus.Registerer, name string) {
350356
351357 return float64 (len (p .failedPeers ))
352358 })
353- p .failedReconnectionsCounter = prometheus .NewCounter (prometheus.CounterOpts {
359+ p .failedReconnectionsCounter = promauto . With ( reg ) .NewCounter (prometheus.CounterOpts {
354360 Name : "alertmanager_cluster_reconnections_failed_total" ,
355361 Help : "A counter of the number of failed cluster peer reconnection attempts." ,
356362 })
357363
358- p .reconnectionsCounter = prometheus .NewCounter (prometheus.CounterOpts {
364+ p .reconnectionsCounter = promauto . With ( reg ) .NewCounter (prometheus.CounterOpts {
359365 Name : "alertmanager_cluster_reconnections_total" ,
360366 Help : "A counter of the number of cluster peer reconnections." ,
361367 })
362368
363- p .failedRefreshCounter = prometheus .NewCounter (prometheus.CounterOpts {
369+ p .failedRefreshCounter = promauto . With ( reg ) .NewCounter (prometheus.CounterOpts {
364370 Name : "alertmanager_cluster_refresh_join_failed_total" ,
365371 Help : "A counter of the number of failed cluster peer joined attempts via refresh." ,
366372 })
367- p .refreshCounter = prometheus .NewCounter (prometheus.CounterOpts {
373+ p .refreshCounter = promauto . With ( reg ) .NewCounter (prometheus.CounterOpts {
368374 Name : "alertmanager_cluster_refresh_join_total" ,
369375 Help : "A counter of the number of cluster peer joined via refresh." ,
370376 })
371377
372- p .peerLeaveCounter = prometheus .NewCounter (prometheus.CounterOpts {
378+ p .peerLeaveCounter = promauto . With ( reg ) .NewCounter (prometheus.CounterOpts {
373379 Name : "alertmanager_cluster_peers_left_total" ,
374380 Help : "A counter of the number of peers that have left." ,
375381 })
376- p .peerUpdateCounter = prometheus .NewCounter (prometheus.CounterOpts {
382+ p .peerUpdateCounter = promauto . With ( reg ) .NewCounter (prometheus.CounterOpts {
377383 Name : "alertmanager_cluster_peers_update_total" ,
378384 Help : "A counter of the number of peers that have updated metadata." ,
379385 })
380- p .peerJoinCounter = prometheus .NewCounter (prometheus.CounterOpts {
386+ p .peerJoinCounter = promauto . With ( reg ) .NewCounter (prometheus.CounterOpts {
381387 Name : "alertmanager_cluster_peers_joined_total" ,
382388 Help : "A counter of the number of peers that have joined." ,
383389 })
384-
385- reg .MustRegister (peerInfo , clusterFailedPeers , p .failedReconnectionsCounter , p .reconnectionsCounter ,
386- p .peerLeaveCounter , p .peerUpdateCounter , p .peerJoinCounter , p .refreshCounter , p .failedRefreshCounter )
387390}
388391
389392func (p * Peer ) runPeriodicTask (d time.Duration , f func ()) {
0 commit comments