aboutsummaryrefslogtreecommitdiff
path: root/syncapi
diff options
context:
space:
mode:
authorNeil Alexander <neilalexander@users.noreply.github.com>2020-12-16 15:02:39 +0000
committerNeil Alexander <neilalexander@users.noreply.github.com>2020-12-16 15:02:39 +0000
commit56b5847c74b595bea9b7106e71f68087fda6c1d1 (patch)
treedb057daee2464dd2c2ffdbc3b705336a27212f71 /syncapi
parentb891c00b09ed94d0fdfeb449df5e345c67208700 (diff)
Add prometheus metrics for destination queues, sync requests
Squashed commit of the following: commit 7ed1c6cfe67429dbe378a763d832c150eb0f781d Author: Neil Alexander <neilalexander@users.noreply.github.com> Date: Wed Dec 16 14:53:27 2020 +0000 Updates commit 8442099d08760b8d086e6d58f9f30284e378a2cd Author: Neil Alexander <neilalexander@users.noreply.github.com> Date: Wed Dec 16 14:43:18 2020 +0000 Add some sync statistics commit ffe2a11644ed3d5297d1775a680886c574143fdb Author: Neil Alexander <neilalexander@users.noreply.github.com> Date: Wed Dec 16 14:37:00 2020 +0000 Fix backing off display commit 27443a93855aa60a49806ecabbf9b09f818301bd Author: Neil Alexander <neilalexander@users.noreply.github.com> Date: Wed Dec 16 14:28:43 2020 +0000 Add some destination queue metrics
Diffstat (limited to 'syncapi')
-rw-r--r--syncapi/sync/requestpool.go31
1 files changed, 31 insertions, 0 deletions
diff --git a/syncapi/sync/requestpool.go b/syncapi/sync/requestpool.go
index a4eec467..32dfb2d6 100644
--- a/syncapi/sync/requestpool.go
+++ b/syncapi/sync/requestpool.go
@@ -35,6 +35,7 @@ import (
userapi "github.com/matrix-org/dendrite/userapi/api"
"github.com/matrix-org/gomatrixserverlib"
"github.com/matrix-org/util"
+ "github.com/prometheus/client_golang/prometheus"
log "github.com/sirupsen/logrus"
)
@@ -99,6 +100,30 @@ func (rp *RequestPool) updateLastSeen(req *http.Request, device *userapi.Device)
rp.lastseen.Store(device.UserID+device.ID, time.Now())
}
+func init() {
+ prometheus.MustRegister(
+ activeSyncRequests, waitingSyncRequests,
+ )
+}
+
+var activeSyncRequests = prometheus.NewGauge(
+ prometheus.GaugeOpts{
+ Namespace: "dendrite",
+ Subsystem: "syncapi",
+ Name: "active_sync_requests",
+ Help: "The number of sync requests that are active right now",
+ },
+)
+
+var waitingSyncRequests = prometheus.NewGauge(
+ prometheus.GaugeOpts{
+ Namespace: "dendrite",
+ Subsystem: "syncapi",
+ Name: "waiting_sync_requests",
+ Help: "The number of sync requests that are waiting to be woken by a notifier",
+ },
+)
+
// OnIncomingSyncRequest is called when a client makes a /sync request. This function MUST be
// called in a dedicated goroutine for this request. This function will block the goroutine
// until a response is ready, or it times out.
@@ -122,6 +147,9 @@ func (rp *RequestPool) OnIncomingSyncRequest(req *http.Request, device *userapi.
"limit": syncReq.limit,
})
+ activeSyncRequests.Inc()
+ defer activeSyncRequests.Dec()
+
rp.updateLastSeen(req, device)
currPos := rp.notifier.CurrentPosition()
@@ -139,6 +167,9 @@ func (rp *RequestPool) OnIncomingSyncRequest(req *http.Request, device *userapi.
}
}
+ waitingSyncRequests.Inc()
+ defer waitingSyncRequests.Dec()
+
// Otherwise, we wait for the notifier to tell us if something *may* have
// happened. We loop in case it turns out that nothing did happen.