mirror of
https://github.com/zulip/zulip.git
synced 2025-11-03 21:43:21 +00:00
counts.py: Move DataCollector declarations into CountStat declarations.
The previous zerver_* names were unwieldy and not very readable. This also puts more of the useful information in one place; in particular, makes it easier to skim a CountStat declaration and see if we're collecting it at a user/stream granularity or a realm granularity.
This commit is contained in:
@@ -260,8 +260,6 @@ count_user_by_realm_query = """
|
||||
zerver_userprofile.is_active = TRUE
|
||||
GROUP BY zerver_realm.id %(group_by_clause)s
|
||||
"""
|
||||
zerver_count_user_by_realm = DataCollector(RealmCount, count_user_by_realm_query,
|
||||
(UserProfile, 'is_bot'))
|
||||
|
||||
# currently .sender_id is only Message specific thing
|
||||
count_message_by_user_query = """
|
||||
@@ -279,10 +277,6 @@ count_message_by_user_query = """
|
||||
zerver_message.pub_date < %%(time_end)s
|
||||
GROUP BY zerver_userprofile.id %(group_by_clause)s
|
||||
"""
|
||||
zerver_count_message_by_user_is_bot = DataCollector(UserCount, count_message_by_user_query,
|
||||
(UserProfile, 'is_bot'))
|
||||
zerver_count_message_by_user_client = DataCollector(UserCount, count_message_by_user_query,
|
||||
(Message, 'sending_client_id'))
|
||||
|
||||
# Currently unused and untested
|
||||
count_stream_by_realm_query = """
|
||||
@@ -300,7 +294,6 @@ count_stream_by_realm_query = """
|
||||
zerver_stream.date_created < %%(time_end)s
|
||||
GROUP BY zerver_realm.id %(group_by_clause)s
|
||||
"""
|
||||
zerver_count_stream_by_realm = DataCollector(RealmCount, count_stream_by_realm_query, None)
|
||||
|
||||
# This query violates the count_X_by_Y_query conventions in several ways. One,
|
||||
# the X table is not specified by the query name; MessageType is not a zerver
|
||||
@@ -339,7 +332,6 @@ count_message_type_by_user_query = """
|
||||
) AS subquery
|
||||
GROUP BY realm_id, id, message_type
|
||||
"""
|
||||
zerver_count_message_type_by_user = DataCollector(UserCount, count_message_type_by_user_query, None)
|
||||
|
||||
# Note that this query also joins to the UserProfile table, since all
|
||||
# current queries that use this also subgroup on UserProfile.is_bot. If in
|
||||
@@ -367,8 +359,6 @@ count_message_by_stream_query = """
|
||||
zerver_message.pub_date < %%(time_end)s
|
||||
GROUP BY zerver_stream.id %(group_by_clause)s
|
||||
"""
|
||||
zerver_count_message_by_stream = DataCollector(StreamCount, count_message_by_stream_query,
|
||||
(UserProfile, 'is_bot'))
|
||||
|
||||
check_useractivityinterval_by_user_query = """
|
||||
INSERT INTO analytics_usercount
|
||||
@@ -384,8 +374,6 @@ check_useractivityinterval_by_user_query = """
|
||||
zerver_useractivityinterval.start < %%(time_end)s
|
||||
GROUP BY zerver_userprofile.id %(group_by_clause)s
|
||||
"""
|
||||
zerver_check_useractivityinterval_by_user = DataCollector(
|
||||
UserCount, check_useractivityinterval_by_user_query, None)
|
||||
|
||||
# Currently hardcodes the query needed for active_users_audit:is_bot:day.
|
||||
# Assumes that a user cannot have two RealmAuditLog entries with the same event_time and
|
||||
@@ -414,8 +402,6 @@ check_realmauditlog_by_user_query = """
|
||||
WHERE
|
||||
ral1.event_type in ('user_created', 'user_activated', 'user_reactivated')
|
||||
"""
|
||||
zerver_check_realmauditlog_by_user = DataCollector(UserCount, check_realmauditlog_by_user_query,
|
||||
(UserProfile, 'is_bot'))
|
||||
|
||||
def do_pull_minutes_active(stat, start_time, end_time):
|
||||
# type: (CountStat, datetime, datetime) -> None
|
||||
@@ -442,27 +428,38 @@ def do_pull_minutes_active(stat, start_time, end_time):
|
||||
(stat.property, (time.time()-timer_start)*1000, len(rows)))
|
||||
|
||||
count_stats_ = [
|
||||
CountStat('messages_sent:is_bot:hour', zerver_count_message_by_user_is_bot, CountStat.HOUR),
|
||||
CountStat('messages_sent:message_type:day', zerver_count_message_type_by_user, CountStat.DAY),
|
||||
CountStat('messages_sent:client:day', zerver_count_message_by_user_client, CountStat.DAY),
|
||||
CountStat('messages_in_stream:is_bot:day', zerver_count_message_by_stream, CountStat.DAY),
|
||||
CountStat('messages_sent:is_bot:hour',
|
||||
DataCollector(UserCount, count_message_by_user_query, (UserProfile, 'is_bot')),
|
||||
CountStat.HOUR),
|
||||
CountStat('messages_sent:message_type:day',
|
||||
DataCollector(UserCount, count_message_type_by_user_query, None), CountStat.DAY),
|
||||
CountStat('messages_sent:client:day',
|
||||
DataCollector(UserCount, count_message_by_user_query, (Message, 'sending_client_id')),
|
||||
CountStat.DAY),
|
||||
CountStat('messages_in_stream:is_bot:day',
|
||||
DataCollector(StreamCount, count_message_by_stream_query, (UserProfile, 'is_bot')),
|
||||
CountStat.DAY),
|
||||
|
||||
# Sanity check on the bottom two stats. Is only an approximation,
|
||||
# e.g. if a user is deactivated between the end of the day and when this
|
||||
# stat is run, they won't be counted.
|
||||
CountStat('active_users:is_bot:day', zerver_count_user_by_realm,
|
||||
CountStat('active_users:is_bot:day',
|
||||
DataCollector(RealmCount, count_user_by_realm_query, (UserProfile, 'is_bot')),
|
||||
CountStat.DAY, interval=TIMEDELTA_MAX),
|
||||
# In RealmCount, 'active_humans_audit::day' should be the partial sum sequence
|
||||
# of 'active_users_log:is_bot:day', for any realm that started after the
|
||||
# latter stat was introduced.
|
||||
# 'active_users_audit:is_bot:day' is the canonical record of which users were
|
||||
# active on which days (in the UserProfile.is_active sense).
|
||||
CountStat('active_users_audit:is_bot:day', zerver_check_realmauditlog_by_user, CountStat.DAY),
|
||||
CountStat('active_users_audit:is_bot:day',
|
||||
DataCollector(UserCount, check_realmauditlog_by_user_query, (UserProfile, 'is_bot')),
|
||||
CountStat.DAY),
|
||||
LoggingCountStat('active_users_log:is_bot:day', RealmCount, CountStat.DAY),
|
||||
|
||||
# The minutes=15 part is due to the 15 minutes added in
|
||||
# zerver.lib.actions.do_update_user_activity_interval.
|
||||
CountStat('15day_actives::day', zerver_check_useractivityinterval_by_user,
|
||||
CountStat('15day_actives::day',
|
||||
DataCollector(UserCount, check_useractivityinterval_by_user_query, None),
|
||||
CountStat.DAY, interval=timedelta(days=15)-timedelta(minutes=15)),
|
||||
CustomPullCountStat('minutes_active::day', UserCount, CountStat.DAY, do_pull_minutes_active)
|
||||
]
|
||||
|
||||
Reference in New Issue
Block a user