mirror of
https://github.com/zulip/zulip.git
synced 2025-11-02 04:53:36 +00:00
analytics: Separate private messages from group private messages.
This makes it possible for our graphs to show the group private message counts as separate from 1:1 private messages. Fixes #4102.
This commit is contained in:
@@ -309,7 +309,9 @@ count_message_type_by_user_query = """
|
||||
(
|
||||
SELECT zerver_userprofile.realm_id, zerver_userprofile.id, count(*),
|
||||
CASE WHEN
|
||||
zerver_recipient.type != 2 THEN 'private_message'
|
||||
zerver_recipient.type = 1 THEN 'private_message'
|
||||
WHEN
|
||||
zerver_recipient.type = 3 THEN 'huddle_message'
|
||||
WHEN
|
||||
zerver_stream.invite_only = TRUE THEN 'private_stream'
|
||||
ELSE 'public_stream'
|
||||
|
||||
@@ -96,12 +96,14 @@ class Command(BaseCommand):
|
||||
stat = COUNT_STATS['messages_sent:message_type:day']
|
||||
user_data = {
|
||||
'public_stream': self.generate_fixture_data(stat, 1.5, 1, 3, .6, 8),
|
||||
'private_message': self.generate_fixture_data(stat, .5, .3, 1, .6, 8)}
|
||||
'private_message': self.generate_fixture_data(stat, .5, .3, 1, .6, 8),
|
||||
'huddle_message': self.generate_fixture_data(stat, .2, .2, 2, .6, 8)}
|
||||
insert_fixture_data(stat, user_data, UserCount)
|
||||
realm_data = {
|
||||
'public_stream': self.generate_fixture_data(stat, 30, 8, 5, .6, 4),
|
||||
'private_stream': self.generate_fixture_data(stat, 7, 7, 5, .6, 4),
|
||||
'private_message': self.generate_fixture_data(stat, 13, 5, 5, .6, 4)}
|
||||
'private_message': self.generate_fixture_data(stat, 13, 5, 5, .6, 4),
|
||||
'huddle_message': self.generate_fixture_data(stat, 6, 3, 3, .6, 4)}
|
||||
insert_fixture_data(stat, realm_data, RealmCount)
|
||||
FillState.objects.create(property=stat.property, end_time=last_end_time,
|
||||
state=FillState.DONE)
|
||||
|
||||
27
analytics/migrations/0010_clear_messages_sent_values.py
Normal file
27
analytics/migrations/0010_clear_messages_sent_values.py
Normal file
@@ -0,0 +1,27 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from django.db.backends.postgresql_psycopg2.schema import DatabaseSchemaEditor
|
||||
from django.db.migrations.state import StateApps
|
||||
from django.db import migrations
|
||||
|
||||
def clear_message_sent_by_message_type_values(apps, schema_editor):
|
||||
# type: (StateApps, DatabaseSchemaEditor) -> None
|
||||
UserCount = apps.get_model('analytics', 'UserCount')
|
||||
StreamCount = apps.get_model('analytics', 'StreamCount')
|
||||
RealmCount = apps.get_model('analytics', 'RealmCount')
|
||||
InstallationCount = apps.get_model('analytics', 'InstallationCount')
|
||||
FillState = apps.get_model('analytics', 'FillState')
|
||||
|
||||
property = 'messages_sent:message_type:day'
|
||||
UserCount.objects.filter(property=property).delete()
|
||||
StreamCount.objects.filter(property=property).delete()
|
||||
RealmCount.objects.filter(property=property).delete()
|
||||
InstallationCount.objects.filter(property=property).delete()
|
||||
FillState.objects.filter(property=property).delete()
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [('analytics', '0009_remove_messages_to_stream_stat')]
|
||||
|
||||
operations = [
|
||||
migrations.RunPython(clear_message_sent_by_message_type_values),
|
||||
]
|
||||
@@ -375,16 +375,19 @@ class TestCountStats(AnalyticsTestCase):
|
||||
[2, 'private_stream', user2],
|
||||
[2, 'public_stream', user1],
|
||||
[1, 'public_stream', user2],
|
||||
[2, 'private_message', user1],
|
||||
[2, 'private_message', user2],
|
||||
[1, 'private_message', user1],
|
||||
[1, 'private_message', user2],
|
||||
[1, 'private_message', user3],
|
||||
[1, 'huddle_message', user1],
|
||||
[1, 'huddle_message', user2],
|
||||
[1, 'public_stream', self.hourly_user],
|
||||
[1, 'public_stream', self.daily_user]])
|
||||
self.assertTableState(RealmCount, ['value', 'subgroup', 'realm'],
|
||||
[[3, 'private_stream'], [3, 'public_stream'], [5, 'private_message'],
|
||||
[2, 'public_stream', self.second_realm]])
|
||||
[[3, 'private_stream'], [3, 'public_stream'], [3, 'private_message'],
|
||||
[2, 'huddle_message'], [2, 'public_stream', self.second_realm]])
|
||||
self.assertTableState(InstallationCount, ['value', 'subgroup'],
|
||||
[[3, 'private_stream'], [5, 'public_stream'], [5, 'private_message']])
|
||||
[[3, 'private_stream'], [5, 'public_stream'], [3, 'private_message'],
|
||||
[2, 'huddle_message']])
|
||||
self.assertTableState(StreamCount, [], [])
|
||||
|
||||
def test_messages_sent_to_recipients_with_same_id(self):
|
||||
@@ -403,7 +406,8 @@ class TestCountStats(AnalyticsTestCase):
|
||||
|
||||
do_fill_count_stat_at_hour(stat, self.TIME_ZERO)
|
||||
|
||||
self.assertCountEquals(UserCount, 2, subgroup='private_message')
|
||||
self.assertCountEquals(UserCount, 1, subgroup='private_message')
|
||||
self.assertCountEquals(UserCount, 1, subgroup='huddle_message')
|
||||
self.assertCountEquals(UserCount, 1, subgroup='public_stream')
|
||||
|
||||
def test_messages_sent_by_client(self):
|
||||
|
||||
@@ -117,10 +117,10 @@ class TestGetChartData(ZulipTestCase):
|
||||
'frequency': CountStat.DAY,
|
||||
'interval': CountStat.DAY,
|
||||
'realm': {'Public Streams': self.data(100), 'Private Streams': self.data(0),
|
||||
'PMs & Group PMs': self.data(101)},
|
||||
'Private Messages': self.data(101), 'Huddle Messages': self.data(0)},
|
||||
'user': {'Public Streams': self.data(200), 'Private Streams': self.data(201),
|
||||
'PMs & Group PMs': self.data(0)},
|
||||
'display_order': ['PMs & Group PMs', 'Public Streams', 'Private Streams'],
|
||||
'Private Messages': self.data(0), 'Huddle Messages': self.data(0)},
|
||||
'display_order': ['Private Messages', 'Public Streams', 'Private Streams', 'Huddle Messages'],
|
||||
'result': 'success',
|
||||
})
|
||||
|
||||
@@ -179,9 +179,9 @@ class TestGetChartData(ZulipTestCase):
|
||||
self.assert_json_success(result)
|
||||
data = ujson.loads(result.content)
|
||||
self.assertEqual(data['realm'], {
|
||||
'Public Streams': [0], 'Private Streams': [0], 'PMs & Group PMs': [0]})
|
||||
'Public Streams': [0], 'Private Streams': [0], 'Private Messages': [0], 'Huddle Messages': [0]})
|
||||
self.assertEqual(data['user'], {
|
||||
'Public Streams': [0], 'Private Streams': [0], 'PMs & Group PMs': [0]})
|
||||
'Public Streams': [0], 'Private Streams': [0], 'Private Messages': [0], 'Huddle Messages': [0]})
|
||||
|
||||
FillState.objects.create(
|
||||
property='messages_sent:client:day', end_time=self.end_times_day[0], state=FillState.DONE)
|
||||
|
||||
@@ -68,8 +68,8 @@ def get_chart_data(request, user_profile, chart_name=REQ(),
|
||||
elif chart_name == 'messages_sent_by_message_type':
|
||||
stat = COUNT_STATS['messages_sent:message_type:day']
|
||||
tables = [RealmCount, UserCount]
|
||||
subgroups = ['public_stream', 'private_stream', 'private_message']
|
||||
labels = ['Public Streams', 'Private Streams', 'PMs & Group PMs']
|
||||
subgroups = ['public_stream', 'private_stream', 'private_message', 'huddle_message']
|
||||
labels = ['Public Streams', 'Private Streams', 'Private Messages', 'Huddle Messages']
|
||||
labels_sort_function = lambda data: sort_by_totals(data['realm'])
|
||||
include_empty_subgroups = [True, True]
|
||||
elif chart_name == 'messages_sent_by_client':
|
||||
|
||||
Reference in New Issue
Block a user