NewPropagationDelayTracker creates a new PropagationDelayTracker service.
( kv *KV, cfg PropagationDelayTrackerConfig, nodeName string, logger log.Logger, registerer prometheus.Registerer, )
| 80 | |
| 81 | // NewPropagationDelayTracker creates a new PropagationDelayTracker service. |
| 82 | func NewPropagationDelayTracker( |
| 83 | kv *KV, |
| 84 | cfg PropagationDelayTrackerConfig, |
| 85 | nodeName string, |
| 86 | logger log.Logger, |
| 87 | registerer prometheus.Registerer, |
| 88 | ) *PropagationDelayTracker { |
| 89 | t := &PropagationDelayTracker{ |
| 90 | cfg: cfg, |
| 91 | nodeName: nodeName, |
| 92 | kv: kv, |
| 93 | codec: GetPropagationDelayTrackerCodec(), |
| 94 | logger: log.With(logger, "component", "memberlist-propagation-delay-tracker"), |
| 95 | seenBeacons: make(map[uint64]struct{}), |
| 96 | propagationDelay: promauto.With(registerer).NewHistogram(prometheus.HistogramOpts{ |
| 97 | Name: "memberlist_propagation_tracker_delay_seconds", |
| 98 | Help: "Time from beacon publish to receive.", |
| 99 | NativeHistogramBucketFactor: 1.1, |
| 100 | NativeHistogramMaxBucketNumber: 100, |
| 101 | NativeHistogramMinResetDuration: 1 * time.Hour, |
| 102 | Buckets: prometheus.DefBuckets, |
| 103 | }), |
| 104 | beaconsPublishedTotal: promauto.With(registerer).NewCounter(prometheus.CounterOpts{ |
| 105 | Name: "memberlist_propagation_tracker_beacons_published_total", |
| 106 | Help: "Total number of beacons published by this node.", |
| 107 | }), |
| 108 | beaconsReceivedTotal: promauto.With(registerer).NewCounter(prometheus.CounterOpts{ |
| 109 | Name: "memberlist_propagation_tracker_beacons_received_total", |
| 110 | Help: "Total number of unique beacons received.", |
| 111 | }), |
| 112 | } |
| 113 | |
| 114 | t.Service = services.NewBasicService(nil, t.running, nil).WithName("propagation-delay-tracker") |
| 115 | |
| 116 | return t |
| 117 | } |
| 118 | |
| 119 | func (t *PropagationDelayTracker) running(ctx context.Context) error { |
| 120 | t.startupTime = time.Now().UnixMilli() |