From a34061d3329789a4f2e16ec09dbcc9ed5074e346 Mon Sep 17 00:00:00 2001 From: Matthew Hodgson Date: Wed, 18 Jul 2018 02:07:36 +0100 Subject: WIP of tracking per-room and per-user stats --- synapse/storage/roommember.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'synapse/storage/roommember.py') diff --git a/synapse/storage/roommember.py b/synapse/storage/roommember.py index 02a802bed9..1493a881d9 100644 --- a/synapse/storage/roommember.py +++ b/synapse/storage/roommember.py @@ -82,6 +82,24 @@ class RoomMemberWorkerStore(EventsWorkerStore): return [to_ascii(r[0]) for r in txn] return self.runInteraction("get_users_in_room", f) + @cached() + def get_user_count_in_room(self, room_id, membership): + def f(txn): + sql = ( + "SELECT count(*) FROM room_memberships as m" + " INNER JOIN current_state_events as c" + " ON m.event_id = c.event_id " + " AND m.room_id = c.room_id " + " AND m.user_id = c.state_key" + " WHERE c.type = 'm.room.member' AND c.room_id = ? AND m.membership = ?" + ) + + txn.execute(sql, (room_id, membership,)) + row = txn.fetchone() + return row[0] + + return self.runInteraction("get_users_in_room", f) + @cached() def get_invited_rooms_for_user(self, user_id): """ Get all the rooms the user is invited to -- cgit 1.5.1