mirror of https://github.com/zulip/zulip.git
analytics: Replace get_realm_day_counts with a faster query.
Use analytics_realmcount to improve query runtime. There are two known difference with previous query: - Messages that are deleted after hourly stats are aggregated are not decremented in new query. - Messages sent since the hourly aggregation last ran are not counted.
This commit is contained in:
parent
c9fccf476a
commit
f8f741c4a2
|
@ -37,29 +37,26 @@ if settings.BILLING_ENABLED:
|
||||||
|
|
||||||
|
|
||||||
def get_realm_day_counts() -> Dict[str, Dict[str, Markup]]:
|
def get_realm_day_counts() -> Dict[str, Dict[str, Markup]]:
|
||||||
# Uses index: zerver_message_date_sent_3b5b05d8
|
# To align with UTC days, we subtract an hour from end_time to
|
||||||
|
# get the start_time, since the hour that starts at midnight was
|
||||||
|
# on the previous day.
|
||||||
query = SQL(
|
query = SQL(
|
||||||
"""
|
"""
|
||||||
select
|
select
|
||||||
r.string_id,
|
r.string_id,
|
||||||
(now()::date - date_sent::date) age,
|
(now()::date - (end_time - interval '1 hour')::date) age,
|
||||||
count(*) cnt
|
coalesce(sum(value), 0) cnt
|
||||||
from zerver_message m
|
from zerver_realm r
|
||||||
join zerver_userprofile up on up.id = m.sender_id
|
join analytics_realmcount rc on r.id = rc.realm_id
|
||||||
join zerver_realm r on r.id = up.realm_id
|
|
||||||
join zerver_client c on c.id = m.sending_client_id
|
|
||||||
where
|
where
|
||||||
(not up.is_bot)
|
property = 'messages_sent:is_bot:hour'
|
||||||
and
|
and
|
||||||
date_sent > now()::date - interval '8 day'
|
subgroup = 'false'
|
||||||
and
|
and
|
||||||
c.name not in ('zephyr_mirror', 'ZulipMonitoring')
|
end_time > now()::date - interval '8 day' - interval '1 hour'
|
||||||
group by
|
group by
|
||||||
r.string_id,
|
r.string_id,
|
||||||
age
|
age
|
||||||
order by
|
|
||||||
r.string_id,
|
|
||||||
age
|
|
||||||
"""
|
"""
|
||||||
)
|
)
|
||||||
cursor = connection.cursor()
|
cursor = connection.cursor()
|
||||||
|
|
Loading…
Reference in New Issue