Skip to content

Commit c5296f5

Browse files
committed
Refactor Measure in synapse/http/federation/well_known_resolver.py
1 parent 019f0b7 commit c5296f5

6 files changed

Lines changed: 29 additions & 8 deletions

File tree

synapse/http/federation/matrix_federation_agent.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
from synapse.http.federation.well_known_resolver import WellKnownResolver
4949
from synapse.http.proxyagent import ProxyAgent
5050
from synapse.logging.context import make_deferred_yieldable, run_in_background
51+
from synapse.metrics.homeserver_metrics_manager import HomeserverMetricsManager
5152
from synapse.types import ISynapseReactor
5253
from synapse.util import Clock
5354

@@ -93,6 +94,7 @@ class MatrixFederationAgent:
9394
def __init__(
9495
self,
9596
reactor: ISynapseReactor,
97+
metrics_manager: HomeserverMetricsManager,
9698
tls_client_options_factory: Optional[FederationPolicyForHTTPS],
9799
user_agent: bytes,
98100
ip_allowlist: Optional[IPSet],
@@ -128,6 +130,7 @@ def __init__(
128130
if _well_known_resolver is None:
129131
_well_known_resolver = WellKnownResolver(
130132
reactor,
133+
metrics_manager,
131134
agent=BlocklistingAgentWrapper(
132135
ProxyAgent(
133136
reactor,

synapse/http/federation/well_known_resolver.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535

3636
from synapse.http.client import BodyExceededMaxSize, read_body_with_max_size
3737
from synapse.logging.context import make_deferred_yieldable
38+
from synapse.metrics.homeserver_metrics_manager import HomeserverMetricsManager
3839
from synapse.util import Clock, json_decoder
3940
from synapse.util.caches.ttlcache import TTLCache
4041
from synapse.util.metrics import Measure
@@ -92,13 +93,15 @@ class WellKnownResolver:
9293
def __init__(
9394
self,
9495
reactor: IReactorTime,
96+
metrics_manager: HomeserverMetricsManager,
9597
agent: IAgent,
9698
user_agent: bytes,
9799
well_known_cache: Optional[TTLCache[bytes, Optional[bytes]]] = None,
98100
had_well_known_cache: Optional[TTLCache[bytes, bool]] = None,
99101
):
100102
self._reactor = reactor
101103
self._clock = Clock(reactor)
104+
self.metrics_manager = metrics_manager
102105

103106
if well_known_cache is None:
104107
well_known_cache = _well_known_cache

synapse/http/matrixfederationclient.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -406,6 +406,7 @@ def __init__(
406406
self.server_name = hs.hostname
407407

408408
self.reactor = hs.get_reactor()
409+
self.metrics_manager = hs.metrics_manager
409410

410411
user_agent = hs.version_string
411412
if hs.config.server.user_agent_suffix:
@@ -418,6 +419,7 @@ def __init__(
418419
# Talk to federation directly
419420
federation_agent: IAgent = MatrixFederationAgent(
420421
self.reactor,
422+
self.metrics_manager,
421423
tls_client_options_factory,
422424
user_agent.encode("ascii"),
423425
hs.config.server.federation_ip_range_allowlist,

tests/handlers/test_typing.py

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -84,14 +84,6 @@ def make_homeserver(
8484

8585
# we mock out the federation client too
8686
self.mock_federation_client = AsyncMock(spec=["put_json"])
87-
self.mock_federation_client.put_json.return_value = (200, "OK")
88-
self.mock_federation_client.agent = MatrixFederationAgent(
89-
reactor,
90-
tls_client_options_factory=None,
91-
user_agent=b"SynapseInTrialTest/0.0.0",
92-
ip_allowlist=None,
93-
ip_blocklist=IPSet(),
94-
)
9587

9688
# the tests assume that we are starting at unix time 1000
9789
reactor.pump((1000,))
@@ -104,6 +96,18 @@ def make_homeserver(
10496
replication_streams={},
10597
)
10698

99+
# Finish off mocking the federation client
100+
self.mock_federation_client.put_json.return_value = (200, "OK")
101+
self.mock_federation_client.agent = MatrixFederationAgent(
102+
reactor=reactor,
103+
# After we get access to the `hs` homeserver instance, we can replace the federation agent
104+
metrics_manager=hs.metrics_manager,
105+
tls_client_options_factory=None,
106+
user_agent=b"SynapseInTrialTest/0.0.0",
107+
ip_allowlist=None,
108+
ip_blocklist=IPSet(),
109+
)
110+
107111
return hs
108112

109113
def create_resource_dict(self) -> Dict[str, Resource]:

tests/http/federation/test_matrix_federation_agent.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@
5959
LoggingContextOrSentinel,
6060
current_context,
6161
)
62+
from synapse.metrics.homeserver_metrics_manager import HomeserverMetricsManager
6263
from synapse.types import ISynapseReactor
6364
from synapse.util.caches.ttlcache import TTLCache
6465

@@ -82,6 +83,8 @@ def setUp(self) -> None:
8283
self._config = config = HomeServerConfig()
8384
config.parse_config_dict(config_dict, "", "")
8485

86+
self.metrics_manager = HomeserverMetricsManager()
87+
8588
self.tls_factory = FederationPolicyForHTTPS(config)
8689

8790
self.well_known_cache: TTLCache[bytes, Optional[bytes]] = TTLCache(
@@ -92,6 +95,7 @@ def setUp(self) -> None:
9295
)
9396
self.well_known_resolver = WellKnownResolver(
9497
self.reactor,
98+
self.metrics_manager,
9599
Agent(self.reactor, contextFactory=self.tls_factory),
96100
b"test-agent",
97101
well_known_cache=self.well_known_cache,
@@ -270,6 +274,7 @@ def _make_agent(self) -> MatrixFederationAgent:
270274
"""
271275
return MatrixFederationAgent(
272276
reactor=cast(ISynapseReactor, self.reactor),
277+
metrics_manager=self.metrics_manager,
273278
tls_client_options_factory=self.tls_factory,
274279
user_agent=b"test-agent", # Note that this is unused since _well_known_resolver is provided.
275280
ip_allowlist=IPSet(),
@@ -1012,13 +1017,15 @@ def test_get_well_known_unsigned_cert(self) -> None:
10121017
tls_factory = FederationPolicyForHTTPS(config)
10131018
agent = MatrixFederationAgent(
10141019
reactor=self.reactor,
1020+
metrics_manager=self.metrics_manager,
10151021
tls_client_options_factory=tls_factory,
10161022
user_agent=b"test-agent", # This is unused since _well_known_resolver is passed below.
10171023
ip_allowlist=IPSet(),
10181024
ip_blocklist=IPSet(),
10191025
_srv_resolver=self.mock_resolver,
10201026
_well_known_resolver=WellKnownResolver(
10211027
cast(ISynapseReactor, self.reactor),
1028+
self.metrics_manager,
10221029
Agent(self.reactor, contextFactory=tls_factory),
10231030
b"test-agent",
10241031
well_known_cache=self.well_known_cache,

tests/replication/test_federation_sender_shard.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
from synapse.events import EventBase, make_event_from_dict
3737
from synapse.handlers.typing import TypingWriterHandler
3838
from synapse.http.federation.matrix_federation_agent import MatrixFederationAgent
39+
from synapse.metrics.homeserver_metrics_manager import HomeserverMetricsManager
3940
from synapse.rest.admin import register_servlets_for_client_rest_resource
4041
from synapse.rest.client import login, room
4142
from synapse.server import HomeServer
@@ -69,6 +70,7 @@ def setUp(self) -> None:
6970
reactor, _ = get_clock()
7071
self.matrix_federation_agent = MatrixFederationAgent(
7172
reactor,
73+
metrics_manager=HomeserverMetricsManager(),
7274
tls_client_options_factory=None,
7375
user_agent=b"SynapseInTrialTest/0.0.0",
7476
ip_allowlist=None,

0 commit comments

Comments
 (0)