diff --git a/synapse/federation/send_queue.py b/synapse/federation/send_queue.py index 7a7882d7a6..3393a06b45 100644 --- a/synapse/federation/send_queue.py +++ b/synapse/federation/send_queue.py @@ -73,7 +73,7 @@ class FederationRemoteSendQueue(AbstractFederationSender): def __init__(self, hs: "HomeServer"): self.server_name = hs.hostname self.clock = hs.get_clock() - self.metrics_manager = hs.metrics_manager + self.metrics_manager = hs.get_metrics_manager() self.notifier = hs.get_notifier() self.is_mine_id = hs.is_mine_id self.is_mine_server_name = hs.is_mine_server_name diff --git a/synapse/federation/sender/__init__.py b/synapse/federation/sender/__init__.py index 4eeab926c9..156938b61b 100644 --- a/synapse/federation/sender/__init__.py +++ b/synapse/federation/sender/__init__.py @@ -378,7 +378,7 @@ class FederationSender(AbstractFederationSender): self._storage_controllers = hs.get_storage_controllers() self.clock = hs.get_clock() - self.metrics_manager = hs.metrics_manager + self.metrics_manager = hs.get_metrics_manager() self.is_mine_id = hs.is_mine_id self.is_mine_server_name = hs.is_mine_server_name diff --git a/synapse/federation/sender/transaction_manager.py b/synapse/federation/sender/transaction_manager.py index ca82929c18..92d975c471 100644 --- a/synapse/federation/sender/transaction_manager.py +++ b/synapse/federation/sender/transaction_manager.py @@ -61,7 +61,7 @@ class TransactionManager: self._server_name = hs.hostname self.clock = hs.get_clock() # nb must be called this for @measure_func self.metrics_manager = ( - hs.metrics_manager + hs.get_metrics_manager() ) # nb must be called this for @measure_func self._store = hs.get_datastores().main self._transaction_actions = TransactionActions(self._store) diff --git a/synapse/handlers/appservice.py b/synapse/handlers/appservice.py index 483f824556..9ead045c6c 100644 --- a/synapse/handlers/appservice.py +++ b/synapse/handlers/appservice.py @@ -79,7 +79,7 @@ class ApplicationServicesHandler: self.scheduler = hs.get_application_service_scheduler() self.started_scheduler = False self.clock = hs.get_clock() - self.metrics_manager = hs.metrics_manager + self.metrics_manager = hs.get_metrics_manager() self.notify_appservices = hs.config.worker.should_notify_appservices self.event_sources = hs.get_event_sources() self._msc2409_to_device_messages_enabled = ( diff --git a/synapse/handlers/delayed_events.py b/synapse/handlers/delayed_events.py index 049dab82c0..e3d3bf7557 100644 --- a/synapse/handlers/delayed_events.py +++ b/synapse/handlers/delayed_events.py @@ -58,7 +58,7 @@ class DelayedEventsHandler: self._storage_controllers = hs.get_storage_controllers() self._config = hs.config self._clock = hs.get_clock() - self.metrics_manager = hs.metrics_manager + self.metrics_manager = hs.get_metrics_manager() self._event_creation_handler = hs.get_event_creation_handler() self._room_member_handler = hs.get_room_member_handler() diff --git a/synapse/handlers/device.py b/synapse/handlers/device.py index 97e80d9081..4c88c75f81 100644 --- a/synapse/handlers/device.py +++ b/synapse/handlers/device.py @@ -528,7 +528,7 @@ class DeviceHandler(DeviceWorkerHandler): self.clock = hs.get_clock() # nb must be called this for @measure_func self.metrics_manager = ( - hs.metrics_manager + hs.get_metrics_manager() ) # nb must be called this for @measure_func self.federation_sender = hs.get_federation_sender() @@ -1224,7 +1224,7 @@ class DeviceListUpdater(DeviceListWorkerUpdater): self.clock = hs.get_clock() # nb must be called this for @measure_func self.metrics_manager = ( - hs.metrics_manager + hs.get_metrics_manager() ) # nb must be called this for @measure_func self._remote_edu_linearizer = Linearizer(name="remote_device_list") diff --git a/synapse/handlers/message.py b/synapse/handlers/message.py index 5dfda6a0c3..f8512e9d11 100644 --- a/synapse/handlers/message.py +++ b/synapse/handlers/message.py @@ -485,7 +485,7 @@ class EventCreationHandler: self.event_builder_factory = hs.get_event_builder_factory() self.clock = hs.get_clock() # nb must be called this for @measure_func self.metrics_manager = ( - hs.metrics_manager + hs.get_metrics_manager() ) # nb must be called this for @measure_func self.profile_handler = hs.get_profile_handler() self.server_name = hs.hostname diff --git a/synapse/handlers/presence.py b/synapse/handlers/presence.py index a2d74b9921..4c8a8a61dd 100644 --- a/synapse/handlers/presence.py +++ b/synapse/handlers/presence.py @@ -749,7 +749,7 @@ class PresenceHandler(BasePresenceHandler): super().__init__(hs) self.wheel_timer: WheelTimer[str] = WheelTimer() self.notifier = hs.get_notifier() - self.metrics_manager = hs.metrics_manager + self.metrics_manager = hs.get_metrics_manager() federation_registry = hs.get_federation_registry() @@ -1763,7 +1763,7 @@ class PresenceEventSource(EventSource[int, UserPresenceState]): self.get_presence_handler = hs.get_presence_handler self.get_presence_router = hs.get_presence_router self.clock = hs.get_clock() - self.metrics_manager = hs.metrics_manager + self.metrics_manager = hs.get_metrics_manager() self.store = hs.get_datastores().main async def get_new_events( diff --git a/synapse/handlers/sync.py b/synapse/handlers/sync.py index 4f05d7ea7d..9bbca5537e 100644 --- a/synapse/handlers/sync.py +++ b/synapse/handlers/sync.py @@ -337,7 +337,7 @@ class SyncHandler: self._push_rules_handler = hs.get_push_rules_handler() self.event_sources = hs.get_event_sources() self.clock = hs.get_clock() - self.metrics_manager = hs.metrics_manager + self.metrics_manager = hs.get_metrics_manager() self.state = hs.get_state_handler() self.auth_blocking = hs.get_auth_blocking() self._storage_controllers = hs.get_storage_controllers() diff --git a/synapse/handlers/typing.py b/synapse/handlers/typing.py index 89373f2bc1..36f1a3a8e7 100644 --- a/synapse/handlers/typing.py +++ b/synapse/handlers/typing.py @@ -505,7 +505,7 @@ class TypingNotificationEventSource(EventSource[int, JsonMapping]): def __init__(self, hs: "HomeServer"): self._main_store = hs.get_datastores().main self.clock = hs.get_clock() - self.metrics_manager = hs.metrics_manager + self.metrics_manager = hs.get_metrics_manager() # We can't call get_typing_handler here because there's a cycle: # # Typing -> Notifier -> TypingNotificationEventSource -> Typing diff --git a/synapse/handlers/user_directory.py b/synapse/handlers/user_directory.py index b509934486..78bbe6de56 100644 --- a/synapse/handlers/user_directory.py +++ b/synapse/handlers/user_directory.py @@ -104,7 +104,7 @@ class UserDirectoryHandler(StateDeltasHandler): self._storage_controllers = hs.get_storage_controllers() self.server_name = hs.hostname self.clock = hs.get_clock() - self.metrics_manager = hs.metrics_manager + self.metrics_manager = hs.get_metrics_manager() self.notifier = hs.get_notifier() self.is_mine_id = hs.is_mine_id self.update_user_directory = hs.config.worker.should_update_user_directory diff --git a/synapse/http/matrixfederationclient.py b/synapse/http/matrixfederationclient.py index c5d1d3d3c8..345bec6184 100644 --- a/synapse/http/matrixfederationclient.py +++ b/synapse/http/matrixfederationclient.py @@ -406,7 +406,7 @@ class MatrixFederationHttpClient: self.server_name = hs.hostname self.reactor = hs.get_reactor() - self.metrics_manager = hs.metrics_manager + self.metrics_manager = hs.get_metrics_manager() user_agent = hs.version_string if hs.config.server.user_agent_suffix: @@ -453,7 +453,7 @@ class MatrixFederationHttpClient: ) self.clock = hs.get_clock() - self.metrics_manager = hs.metrics_manager + self.metrics_manager = hs.get_metrics_manager() self._store = hs.get_datastores().main self.version_string_bytes = hs.version_string.encode("ascii") self.default_timeout_seconds = hs.config.federation.client_timeout_ms / 1000 diff --git a/synapse/module_api/callbacks/media_repository_callbacks.py b/synapse/module_api/callbacks/media_repository_callbacks.py index 0ac7d06c10..abcb28159f 100644 --- a/synapse/module_api/callbacks/media_repository_callbacks.py +++ b/synapse/module_api/callbacks/media_repository_callbacks.py @@ -32,7 +32,7 @@ IS_USER_ALLOWED_TO_UPLOAD_MEDIA_OF_SIZE_CALLBACK = Callable[[str, int], Awaitabl class MediaRepositoryModuleApiCallbacks: def __init__(self, hs: "HomeServer") -> None: self.clock = hs.get_clock() - self.metrics_manager = hs.metrics_manager + self.metrics_manager = hs.get_metrics_manager() self._get_media_config_for_user_callbacks: List[ GET_MEDIA_CONFIG_FOR_USER_CALLBACK ] = [] diff --git a/synapse/module_api/callbacks/ratelimit_callbacks.py b/synapse/module_api/callbacks/ratelimit_callbacks.py index 93259c214f..84c2ad9399 100644 --- a/synapse/module_api/callbacks/ratelimit_callbacks.py +++ b/synapse/module_api/callbacks/ratelimit_callbacks.py @@ -44,7 +44,7 @@ GET_RATELIMIT_OVERRIDE_FOR_USER_CALLBACK = Callable[ class RatelimitModuleApiCallbacks: def __init__(self, hs: "HomeServer") -> None: self.clock = hs.get_clock() - self.metrics_manager = hs.metrics_manager + self.metrics_manager = hs.get_metrics_manager() self._get_ratelimit_override_for_user_callbacks: List[ GET_RATELIMIT_OVERRIDE_FOR_USER_CALLBACK ] = [] diff --git a/synapse/module_api/callbacks/spamchecker_callbacks.py b/synapse/module_api/callbacks/spamchecker_callbacks.py index 10e617e567..bf33faf916 100644 --- a/synapse/module_api/callbacks/spamchecker_callbacks.py +++ b/synapse/module_api/callbacks/spamchecker_callbacks.py @@ -340,7 +340,7 @@ class SpamCheckerModuleApiCallbacks: def __init__(self, hs: "synapse.server.HomeServer") -> None: self.clock = hs.get_clock() - self.metrics_manager = hs.metrics_manager + self.metrics_manager = hs.get_metrics_manager() self._check_event_for_spam_callbacks: List[CHECK_EVENT_FOR_SPAM_CALLBACK] = [] self._should_drop_federated_event_callbacks: List[ diff --git a/synapse/push/bulk_push_rule_evaluator.py b/synapse/push/bulk_push_rule_evaluator.py index 8e324a8ae3..68e2bf20a9 100644 --- a/synapse/push/bulk_push_rule_evaluator.py +++ b/synapse/push/bulk_push_rule_evaluator.py @@ -131,7 +131,7 @@ class BulkPushRuleEvaluator: self.store = hs.get_datastores().main self.clock = hs.get_clock() # nb must be called this for @measure_func self.metrics_manager = ( - hs.metrics_manager + hs.get_metrics_manager() ) # nb must be called this for @measure_func self._event_auth_handler = hs.get_event_auth_handler() self.should_calculate_push_rules = self.hs.config.push.enable_push diff --git a/synapse/replication/http/federation.py b/synapse/replication/http/federation.py index a0bf8d181a..6433ae68ed 100644 --- a/synapse/replication/http/federation.py +++ b/synapse/replication/http/federation.py @@ -79,7 +79,7 @@ class ReplicationFederationSendEventsRestServlet(ReplicationEndpoint): self.store = hs.get_datastores().main self._storage_controllers = hs.get_storage_controllers() self.clock = hs.get_clock() - self.metrics_manager = hs.metrics_manager + self.metrics_manager = hs.get_metrics_manager() self.federation_event_handler = hs.get_federation_event_handler() @staticmethod diff --git a/synapse/replication/http/send_event.py b/synapse/replication/http/send_event.py index f0ab5d2456..0b14a3fd20 100644 --- a/synapse/replication/http/send_event.py +++ b/synapse/replication/http/send_event.py @@ -80,7 +80,7 @@ class ReplicationSendEventRestServlet(ReplicationEndpoint): self.store = hs.get_datastores().main self._storage_controllers = hs.get_storage_controllers() self.clock = hs.get_clock() - self.metrics_manager = hs.metrics_manager + self.metrics_manager = hs.get_metrics_manager() @staticmethod async def _serialize_payload( # type: ignore[override] diff --git a/synapse/replication/http/send_events.py b/synapse/replication/http/send_events.py index d38cec9de3..c574d8f4e4 100644 --- a/synapse/replication/http/send_events.py +++ b/synapse/replication/http/send_events.py @@ -81,7 +81,7 @@ class ReplicationSendEventsRestServlet(ReplicationEndpoint): self.store = hs.get_datastores().main self._storage_controllers = hs.get_storage_controllers() self.clock = hs.get_clock() - self.metrics_manager = hs.metrics_manager + self.metrics_manager = hs.get_metrics_manager() @staticmethod async def _serialize_payload( # type: ignore[override] diff --git a/synapse/replication/tcp/client.py b/synapse/replication/tcp/client.py index 64ebde0b24..2a4c502b9e 100644 --- a/synapse/replication/tcp/client.py +++ b/synapse/replication/tcp/client.py @@ -79,7 +79,7 @@ class ReplicationDataHandler: self.notifier = hs.get_notifier() self._reactor = hs.get_reactor() self._clock = hs.get_clock() - self.metrics_manager = hs.metrics_manager + self.metrics_manager = hs.get_metrics_manager() self._streams = hs.get_replication_streams() self._instance_name = hs.get_instance_name() self._typing_handler = hs.get_typing_handler() diff --git a/synapse/replication/tcp/resource.py b/synapse/replication/tcp/resource.py index 485cc267a4..c21b9a6621 100644 --- a/synapse/replication/tcp/resource.py +++ b/synapse/replication/tcp/resource.py @@ -80,7 +80,7 @@ class ReplicationStreamer: def __init__(self, hs: "HomeServer"): self.store = hs.get_datastores().main self.clock = hs.get_clock() - self.metrics_manager = hs.metrics_manager + self.metrics_manager = hs.get_metrics_manager() self.notifier = hs.get_notifier() self._instance_name = hs.get_instance_name() diff --git a/synapse/server.py b/synapse/server.py index 6b5302fa02..466e07491f 100644 --- a/synapse/server.py +++ b/synapse/server.py @@ -311,8 +311,6 @@ class HomeServer(metaclass=abc.ABCMeta): # This attribute is set by the free function `refresh_certificate`. self.tls_server_context_factory: Optional[IOpenSSLContextFactory] = None - self.metrics_manager = HomeserverMetricsManager() - def register_module_web_resource(self, path: str, resource: Resource) -> None: """Allows a module to register a web resource to be served at the given path. @@ -417,6 +415,10 @@ class HomeServer(metaclass=abc.ABCMeta): def get_clock(self) -> Clock: return Clock(self._reactor) + @cache_in_self + def get_metrics_manager(self) -> HomeserverMetricsManager: + return HomeserverMetricsManager() + def get_datastores(self) -> Databases: if not self.datastores: raise Exception("HomeServer.setup must be called before getting datastores") diff --git a/synapse/state/__init__.py b/synapse/state/__init__.py index a160634ae1..0e3c23d761 100644 --- a/synapse/state/__init__.py +++ b/synapse/state/__init__.py @@ -194,7 +194,7 @@ class StateHandler: self._state_storage_controller = hs.get_storage_controllers().state self.clock = hs.get_clock() # nb must be called this for @measure_func self.metrics_manager = ( - hs.metrics_manager + hs.get_metrics_manager() ) # nb must be called this for @measure_func self._state_resolution_handler = hs.get_state_resolution_handler() self._storage_controllers = hs.get_storage_controllers() @@ -635,7 +635,7 @@ class StateResolutionHandler: def __init__(self, hs: "HomeServer"): self.clock = hs.get_clock() - self.metrics_manager = hs.metrics_manager + self.metrics_manager = hs.get_metrics_manager() self.resolve_linearizer = Linearizer(name="state_resolve_lock") diff --git a/synapse/storage/controllers/persist_events.py b/synapse/storage/controllers/persist_events.py index ed311747db..fb7f085221 100644 --- a/synapse/storage/controllers/persist_events.py +++ b/synapse/storage/controllers/persist_events.py @@ -338,7 +338,7 @@ class EventsPersistenceStorageController: self.persist_events_store = stores.persist_events self._clock = hs.get_clock() - self.metrics_manager = hs.metrics_manager + self.metrics_manager = hs.get_metrics_manager() self._instance_name = hs.get_instance_name() self.is_mine_id = hs.is_mine_id self._event_persist_queue = _EventPeristenceQueue( diff --git a/synapse/storage/controllers/state.py b/synapse/storage/controllers/state.py index 35831bc12a..40e4663e8e 100644 --- a/synapse/storage/controllers/state.py +++ b/synapse/storage/controllers/state.py @@ -70,7 +70,7 @@ class StateStorageController: def __init__(self, hs: "HomeServer", stores: "Databases"): self._is_mine_id = hs.is_mine_id self._clock = hs.get_clock() - self.metrics_manager = hs.metrics_manager + self.metrics_manager = hs.get_metrics_manager() self.stores = stores self._partial_state_events_tracker = PartialStateEventsTracker(stores.main) self._partial_state_room_tracker = PartialCurrentStateTracker(stores.main) diff --git a/synapse/storage/databases/main/events_worker.py b/synapse/storage/databases/main/events_worker.py index 5411142d1d..33a16b1697 100644 --- a/synapse/storage/databases/main/events_worker.py +++ b/synapse/storage/databases/main/events_worker.py @@ -226,7 +226,7 @@ class EventsWorkerStore(SQLBaseStore): hs: "HomeServer", ): super().__init__(database, db_conn, hs) - self.metrics_manager = hs.metrics_manager + self.metrics_manager = hs.get_metrics_manager() self._stream_id_gen: MultiWriterIdGenerator self._backfill_id_gen: MultiWriterIdGenerator diff --git a/synapse/storage/databases/main/roommember.py b/synapse/storage/databases/main/roommember.py index fc33aef831..a6a685a804 100644 --- a/synapse/storage/databases/main/roommember.py +++ b/synapse/storage/databases/main/roommember.py @@ -100,7 +100,7 @@ class RoomMemberWorkerStore(EventsWorkerStore, CacheInvalidationWorkerStore): hs: "HomeServer", ): super().__init__(database, db_conn, hs) - self.metrics_manager = hs.metrics_manager + self.metrics_manager = hs.get_metrics_manager() self._server_notices_mxid = hs.config.servernotices.server_notices_mxid diff --git a/tests/handlers/test_typing.py b/tests/handlers/test_typing.py index 0bc2c4933b..7db9d9c1f9 100644 --- a/tests/handlers/test_typing.py +++ b/tests/handlers/test_typing.py @@ -101,7 +101,7 @@ class TypingNotificationsTestCase(unittest.HomeserverTestCase): self.mock_federation_client.agent = MatrixFederationAgent( reactor=reactor, # After we get access to the `hs` homeserver instance, we can replace the federation agent - metrics_manager=hs.metrics_manager, + metrics_manager=hs.get_metrics_manager(), tls_client_options_factory=None, user_agent=b"SynapseInTrialTest/0.0.0", ip_allowlist=None,