diff options
author | Erik Johnston <erik@matrix.org> | 2016-02-23 13:49:16 +0000 |
---|---|---|
committer | Erik Johnston <erik@matrix.org> | 2016-02-23 14:52:16 +0000 |
commit | 56a94ccd9e0b3f01c016481b0e3eb26f1a09ac0e (patch) | |
tree | f59bc76276de9e1a0aaf1ebca42a2c1ed3841dc1 /synapse/handlers/presence.py | |
parent | Remove superfluous call to get_state_at when we already have an event for tha... (diff) | |
download | synapse-56a94ccd9e0b3f01c016481b0e3eb26f1a09ac0e.tar.xz |
Measure PresenceEventSource.get_new_events
Diffstat (limited to 'synapse/handlers/presence.py')
-rw-r--r-- | synapse/handlers/presence.py | 69 |
1 files changed, 35 insertions, 34 deletions
diff --git a/synapse/handlers/presence.py b/synapse/handlers/presence.py index aed640450f..91e62e9a00 100644 --- a/synapse/handlers/presence.py +++ b/synapse/handlers/presence.py @@ -835,50 +835,51 @@ class PresenceEventSource(object): # We don't try and limit the presence updates by the current token, as # sending down the rare duplicate is not a concern. - user_id = user.to_string() - if from_key is not None: - from_key = int(from_key) - room_ids = room_ids or [] + with Measure(self.clock, "Presence.get_new_events"): + user_id = user.to_string() + if from_key is not None: + from_key = int(from_key) + room_ids = room_ids or [] - presence = self.hs.get_handlers().presence_handler + presence = self.hs.get_handlers().presence_handler - if not room_ids: - rooms = yield self.store.get_rooms_for_user(user_id) - room_ids = set(e.room_id for e in rooms) + if not room_ids: + rooms = yield self.store.get_rooms_for_user(user_id) + room_ids = set(e.room_id for e in rooms) - user_ids_to_check = set() - for room_id in room_ids: - users = yield self.store.get_users_in_room(room_id) - user_ids_to_check.update(users) + user_ids_to_check = set() + for room_id in room_ids: + users = yield self.store.get_users_in_room(room_id) + user_ids_to_check.update(users) - plist = yield self.store.get_presence_list_accepted(user.localpart) - user_ids_to_check.update([row["observed_user_id"] for row in plist]) + plist = yield self.store.get_presence_list_accepted(user.localpart) + user_ids_to_check.update([row["observed_user_id"] for row in plist]) - # Always include yourself. Only really matters for when the user is - # not in any rooms, but still. - user_ids_to_check.add(user_id) + # Always include yourself. Only really matters for when the user is + # not in any rooms, but still. + user_ids_to_check.add(user_id) - max_token = self.store.get_current_presence_token() + max_token = self.store.get_current_presence_token() - if from_key: - user_ids_changed = self.store.presence_stream_cache.get_entities_changed( - user_ids_to_check, from_key, - ) - else: - user_ids_changed = user_ids_to_check + if from_key: + user_ids_changed = self.store.presence_stream_cache.get_entities_changed( + user_ids_to_check, from_key, + ) + else: + user_ids_changed = user_ids_to_check - updates = yield presence.current_state_for_users(user_ids_changed) + updates = yield presence.current_state_for_users(user_ids_changed) - now = self.clock.time_msec() + now = self.clock.time_msec() - defer.returnValue(([ - { - "type": "m.presence", - "content": _format_user_presence_state(s, now), - } - for s in updates.values() - if include_offline or s.state != PresenceState.OFFLINE - ], max_token)) + defer.returnValue(([ + { + "type": "m.presence", + "content": _format_user_presence_state(s, now), + } + for s in updates.values() + if include_offline or s.state != PresenceState.OFFLINE + ], max_token)) def get_current_key(self): return self.store.get_current_presence_token() |