mirror of https://github.com/watcha-fr/synapse
Expose statistics on extrems to prometheus (#5384)
parent
09e9a26b71
commit
6312d6cc7c
@ -0,0 +1 @@ |
|||||||
|
Statistics on forward extremities per room are now exposed via Prometheus. |
@ -0,0 +1,97 @@ |
|||||||
|
# -*- coding: utf-8 -*- |
||||||
|
# Copyright 2019 The Matrix.org Foundation C.I.C. |
||||||
|
# |
||||||
|
# Licensed under the Apache License, Version 2.0 (the 'License'); |
||||||
|
# you may not use this file except in compliance with the License. |
||||||
|
# You may obtain a copy of the License at |
||||||
|
# |
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0 |
||||||
|
# |
||||||
|
# Unless required by applicable law or agreed to in writing, software |
||||||
|
# distributed under the License is distributed on an 'AS IS' BASIS, |
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
# See the License for the specific language governing permissions and |
||||||
|
# limitations under the License. |
||||||
|
|
||||||
|
from synapse.metrics import REGISTRY |
||||||
|
from synapse.types import Requester, UserID |
||||||
|
|
||||||
|
from tests.unittest import HomeserverTestCase |
||||||
|
|
||||||
|
|
||||||
|
class ExtremStatisticsTestCase(HomeserverTestCase): |
||||||
|
def test_exposed_to_prometheus(self): |
||||||
|
""" |
||||||
|
Forward extremity counts are exposed via Prometheus. |
||||||
|
""" |
||||||
|
room_creator = self.hs.get_room_creation_handler() |
||||||
|
|
||||||
|
user = UserID("alice", "test") |
||||||
|
requester = Requester(user, None, False, None, None) |
||||||
|
|
||||||
|
# Real events, forward extremities |
||||||
|
events = [(3, 2), (6, 2), (4, 6)] |
||||||
|
|
||||||
|
for event_count, extrems in events: |
||||||
|
info = self.get_success(room_creator.create_room(requester, {})) |
||||||
|
room_id = info["room_id"] |
||||||
|
|
||||||
|
last_event = None |
||||||
|
|
||||||
|
# Make a real event chain |
||||||
|
for i in range(event_count): |
||||||
|
ev = self.create_and_send_event(room_id, user, False, last_event) |
||||||
|
last_event = [ev] |
||||||
|
|
||||||
|
# Sprinkle in some extremities |
||||||
|
for i in range(extrems): |
||||||
|
ev = self.create_and_send_event(room_id, user, False, last_event) |
||||||
|
|
||||||
|
# Let it run for a while, then pull out the statistics from the |
||||||
|
# Prometheus client registry |
||||||
|
self.reactor.advance(60 * 60 * 1000) |
||||||
|
self.pump(1) |
||||||
|
|
||||||
|
items = list( |
||||||
|
filter( |
||||||
|
lambda x: x.name == "synapse_forward_extremities", |
||||||
|
list(REGISTRY.collect()), |
||||||
|
) |
||||||
|
) |
||||||
|
|
||||||
|
# Check the values are what we want |
||||||
|
buckets = {} |
||||||
|
_count = 0 |
||||||
|
_sum = 0 |
||||||
|
|
||||||
|
for i in items[0].samples: |
||||||
|
if i[0].endswith("_bucket"): |
||||||
|
buckets[i[1]['le']] = i[2] |
||||||
|
elif i[0].endswith("_count"): |
||||||
|
_count = i[2] |
||||||
|
elif i[0].endswith("_sum"): |
||||||
|
_sum = i[2] |
||||||
|
|
||||||
|
# 3 buckets, 2 with 2 extrems, 1 with 6 extrems (bucketed as 7), and |
||||||
|
# +Inf which is all |
||||||
|
self.assertEqual( |
||||||
|
buckets, |
||||||
|
{ |
||||||
|
1.0: 0, |
||||||
|
2.0: 2, |
||||||
|
3.0: 0, |
||||||
|
5.0: 0, |
||||||
|
7.0: 1, |
||||||
|
10.0: 0, |
||||||
|
15.0: 0, |
||||||
|
20.0: 0, |
||||||
|
50.0: 0, |
||||||
|
100.0: 0, |
||||||
|
200.0: 0, |
||||||
|
500.0: 0, |
||||||
|
"+Inf": 3, |
||||||
|
}, |
||||||
|
) |
||||||
|
# 3 rooms, with 10 total events |
||||||
|
self.assertEqual(_count, 3) |
||||||
|
self.assertEqual(_sum, 10) |
Loading…
Reference in new issue