From ae1330e430f106de303fec49353b65f60239f1aa Mon Sep 17 00:00:00 2001 From: sukun Date: Tue, 21 Mar 2023 12:39:36 +0530 Subject: [PATCH] autorelay: fix refresh reservations bug --- dashboards/autorelay/autorelay.json | 28 ++++++++++++++++++++++------ p2p/host/autorelay/metrics.go | 27 +++++++++++++++++++++++---- p2p/host/autorelay/relay_finder.go | 4 +++- 3 files changed, 48 insertions(+), 11 deletions(-) diff --git a/dashboards/autorelay/autorelay.json b/dashboards/autorelay/autorelay.json index 4d4810777a..32b582430d 100644 --- a/dashboards/autorelay/autorelay.json +++ b/dashboards/autorelay/autorelay.json @@ -11,6 +11,12 @@ ], "__elements": {}, "__requires": [ + { + "type": "panel", + "id": "gauge", + "name": "Gauge", + "version": "" + }, { "type": "grafana", "id": "grafana", @@ -230,9 +236,6 @@ }, "id": 4, "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "auto", "orientation": "auto", "reduceOptions": { "calcs": [ @@ -241,7 +244,8 @@ "fields": "", "values": false }, - "textMode": "auto" + "showThresholdLabels": false, + "showThresholdMarkers": true }, "pluginVersion": "9.3.6", "targets": [ @@ -255,10 +259,22 @@ "legendFormat": "current reservations", "range": true, "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "libp2p_autorelay_desired_reservations", + "hide": true, + "legendFormat": "__auto", + "range": true, + "refId": "B" } ], "title": "Current Reservations", - "type": "stat" + "type": "gauge" }, { "datasource": { @@ -840,7 +856,7 @@ "list": [] }, "time": { - "from": "now-1h", + "from": "now-5m", "to": "now" }, "timepicker": {}, diff --git a/p2p/host/autorelay/metrics.go b/p2p/host/autorelay/metrics.go index 06b395af35..a83b2df4b5 100644 --- a/p2p/host/autorelay/metrics.go +++ b/p2p/host/autorelay/metrics.go @@ -77,6 +77,14 @@ var ( []string{"work_type"}, ) + desiredReservations = prometheus.NewGauge( + prometheus.GaugeOpts{ + Namespace: metricNamespace, + Name: "desired_reservations", + Help: "Desired Reservations", + }, + ) + collectors = []prometheus.Collector{ status, reservationsOpenedTotal, @@ -87,6 +95,7 @@ var ( candidatesCircuitV2SupportTotal, candidatesTotal, scheduledWorkTime, + desiredReservations, } ) @@ -105,6 +114,8 @@ type MetricsTracer interface { CandidateRemoved() ScheduledWorkUpdated(scheduledWork *scheduledWorkTimes) + + DesiredReservations(int) } type metricsTracer struct{} @@ -230,6 +241,10 @@ func (mt *metricsTracer) ScheduledWorkUpdated(scheduledWork *scheduledWorkTimes) scheduledWorkTime.WithLabelValues(*tags...).Set(float64(scheduledWork.nextOldCandidateCheck.Unix())) } +func (mt *metricsTracer) DesiredReservations(cnt int) { + desiredReservations.Set(float64(cnt)) +} + // wrappedMetricsTracer wraps MetricsTracer and ignores all calls when mt is nil type wrappedMetricsTracer struct { mt MetricsTracer @@ -238,10 +253,8 @@ type wrappedMetricsTracer struct { var _ MetricsTracer = &wrappedMetricsTracer{} func (mt *wrappedMetricsTracer) RelayFinderStatus(isActive bool) { - if isActive { - status.Set(1) - } else { - status.Set(2) + if mt.mt != nil { + mt.mt.RelayFinderStatus(isActive) } } @@ -292,3 +305,9 @@ func (mt *wrappedMetricsTracer) ScheduledWorkUpdated(scheduledWork *scheduledWor mt.mt.ScheduledWorkUpdated(scheduledWork) } } + +func (mt *wrappedMetricsTracer) DesiredReservations(cnt int) { + if mt.mt != nil { + mt.mt.DesiredReservations(cnt) + } +} diff --git a/p2p/host/autorelay/relay_finder.go b/p2p/host/autorelay/relay_finder.go index d5e407cb77..d839ac70f0 100644 --- a/p2p/host/autorelay/relay_finder.go +++ b/p2p/host/autorelay/relay_finder.go @@ -131,6 +131,8 @@ func (rf *relayFinder) background(ctx context.Context) { } defer subConnectedness.Close() + rf.metricsTracer.DesiredReservations(rf.conf.desiredRelays) + bootDelayTimer := rf.conf.clock.Timer(rf.conf.bootDelay) defer bootDelayTimer.Stop() @@ -609,7 +611,7 @@ func (rf *relayFinder) refreshReservations(ctx context.Context, now time.Time) b p := p g.Go(func() error { err := rf.refreshRelayReservation(ctx, p) - rf.metricsTracer.ReservationRequestFinished(true, err != nil) + rf.metricsTracer.ReservationRequestFinished(true, err == nil) return err })