Skip to content
This repository has been archived by the owner on Apr 26, 2024. It is now read-only.

Include user agent in user daily visits table #8503

Merged
merged 11 commits into from
Oct 15, 2020
1 change: 1 addition & 0 deletions changelog.d/8503.misc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Add user agent to user_daily_visits table.
11 changes: 8 additions & 3 deletions synapse/storage/databases/main/metrics.py
Original file line number Diff line number Diff line change
Expand Up @@ -281,9 +281,14 @@ def _generate_user_daily_visits(txn):
a_day_in_milliseconds = 24 * 60 * 60 * 1000
now = self._clock.time_msec()

# A note on user_agent. Technically a given device can have multiple
# user agents, so we need to decide which one to pick. We could have handled this
# in number of ways, but given that we don't _that_ much have gone for MAX()
# For more details of the other options considered see
# https://github.com/matrix-org/synapse/pull/8503#discussion_r502306111
sql = """
INSERT INTO user_daily_visits (user_id, device_id, timestamp)
SELECT u.user_id, u.device_id, ?
INSERT INTO user_daily_visits (user_id, device_id, timestamp, user_agent)
SELECT u.user_id, u.device_id, ?, MAX(u.user_agent)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If you could just add a comment about the SQL to say why its fine to take the MAX that would be great

FROM user_ips AS u
LEFT JOIN (
SELECT user_id, device_id, timestamp FROM user_daily_visits
Expand All @@ -294,7 +299,7 @@ def _generate_user_daily_visits(txn):
WHERE last_seen > ? AND last_seen <= ?
AND udv.timestamp IS NULL AND users.is_guest=0
AND users.appservice_id IS NULL
GROUP BY u.user_id, u.device_id
GROUP BY u.user_id, u.device_id, u.user_agent
"""

# This means that the day has rolled over but there could still
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
/* Copyright 2020 The Matrix.org Foundation C.I.C.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

-- Add new column to user_daily_visits to track user agent
ALTER TABLE user_daily_visits
ADD COLUMN user_agent TEXT;