Share some metrics between the Prometheus exporter and the phone home stats (#13671)

This commit is contained in:
Brendan Abolivier 2022-09-05 12:26:43 +02:00 committed by GitHub
parent ad7fc8e92f
commit 898fef2789
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 146 additions and 4 deletions

View file

@ -15,8 +15,14 @@
import resource
from unittest import mock
from twisted.test.proto_helpers import MemoryReactor
from synapse.app.phone_stats_home import phone_stats_home
from synapse.rest import admin
from synapse.rest.client import login, sync
from synapse.server import HomeServer
from synapse.types import JsonDict
from synapse.util import Clock
from tests.unittest import HomeserverTestCase
@ -47,5 +53,43 @@ class PhoneHomeStatsTestCase(HomeserverTestCase):
stats: JsonDict = {}
self.reactor.advance(1)
# `old_resource` has type `Mock` instead of `struct_rusage`
self.get_success(phone_stats_home(self.hs, stats, past_stats)) # type: ignore[arg-type]
self.get_success(
phone_stats_home(self.hs, stats, past_stats) # type: ignore[arg-type]
)
self.assertApproximates(stats["cpu_average"], 100, tolerance=2.5)
class CommonMetricsTestCase(HomeserverTestCase):
servlets = [
admin.register_servlets,
login.register_servlets,
sync.register_servlets,
]
def prepare(self, reactor: MemoryReactor, clock: Clock, hs: HomeServer) -> None:
self.metrics_manager = hs.get_common_usage_metrics_manager()
self.get_success(self.metrics_manager.setup())
def test_dau(self) -> None:
"""Tests that the daily active users count is correctly updated."""
self._assert_metric_value("daily_active_users", 0)
self.register_user("user", "password")
tok = self.login("user", "password")
self.make_request("GET", "/sync", access_token=tok)
self.pump(1)
self._assert_metric_value("daily_active_users", 1)
def _assert_metric_value(self, metric_name: str, expected: int) -> None:
"""Compare the given value to the current value of the common usage metric with
the given name.
Args:
metric_name: The metric to look up.
expected: Expected value for this metric.
"""
metrics = self.get_success(self.metrics_manager.get_metrics())
value = getattr(metrics, metric_name)
self.assertEqual(value, expected)