mirror of
https://github.com/zulip/zulip.git
synced 2025-11-03 21:43:21 +00:00
analytics: Remove Anomaly model.
This commit is contained in:
@@ -9,7 +9,7 @@ from django.conf import settings
|
|||||||
from django.db import connection, models
|
from django.db import connection, models
|
||||||
from django.db.models import F
|
from django.db.models import F
|
||||||
|
|
||||||
from analytics.models import Anomaly, BaseCount, \
|
from analytics.models import BaseCount, \
|
||||||
FillState, InstallationCount, RealmCount, StreamCount, \
|
FillState, InstallationCount, RealmCount, StreamCount, \
|
||||||
UserCount, installation_epoch, last_successful_fill
|
UserCount, installation_epoch, last_successful_fill
|
||||||
from zerver.lib.logging_util import log_to_file
|
from zerver.lib.logging_util import log_to_file
|
||||||
@@ -226,7 +226,6 @@ def do_drop_all_analytics_tables() -> None:
|
|||||||
RealmCount.objects.all().delete()
|
RealmCount.objects.all().delete()
|
||||||
InstallationCount.objects.all().delete()
|
InstallationCount.objects.all().delete()
|
||||||
FillState.objects.all().delete()
|
FillState.objects.all().delete()
|
||||||
Anomaly.objects.all().delete()
|
|
||||||
|
|
||||||
def do_drop_single_stat(property: str) -> None:
|
def do_drop_single_stat(property: str) -> None:
|
||||||
UserCount.objects.filter(property=property).delete()
|
UserCount.objects.filter(property=property).delete()
|
||||||
|
|||||||
34
analytics/migrations/0013_remove_anomaly.py
Normal file
34
analytics/migrations/0013_remove_anomaly.py
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Generated by Django 1.11.18 on 2019-02-02 02:47
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django.db import migrations
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('analytics', '0012_add_on_delete'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='installationcount',
|
||||||
|
name='anomaly',
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='realmcount',
|
||||||
|
name='anomaly',
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='streamcount',
|
||||||
|
name='anomaly',
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='usercount',
|
||||||
|
name='anomaly',
|
||||||
|
),
|
||||||
|
migrations.DeleteModel(
|
||||||
|
name='Anomaly',
|
||||||
|
),
|
||||||
|
]
|
||||||
@@ -34,13 +34,6 @@ def last_successful_fill(property: str) -> Optional[datetime.datetime]:
|
|||||||
return fillstate.end_time
|
return fillstate.end_time
|
||||||
return fillstate.end_time - datetime.timedelta(hours=1)
|
return fillstate.end_time - datetime.timedelta(hours=1)
|
||||||
|
|
||||||
# would only ever make entries here by hand
|
|
||||||
class Anomaly(models.Model):
|
|
||||||
info = models.CharField(max_length=1000) # type: str
|
|
||||||
|
|
||||||
def __str__(self) -> str:
|
|
||||||
return "<Anomaly: %s... %s>" % (self.info, self.id)
|
|
||||||
|
|
||||||
class BaseCount(models.Model):
|
class BaseCount(models.Model):
|
||||||
# Note: When inheriting from BaseCount, you may want to rearrange
|
# Note: When inheriting from BaseCount, you may want to rearrange
|
||||||
# the order of the columns in the migration to make sure they
|
# the order of the columns in the migration to make sure they
|
||||||
@@ -49,7 +42,6 @@ class BaseCount(models.Model):
|
|||||||
subgroup = models.CharField(max_length=16, null=True) # type: Optional[str]
|
subgroup = models.CharField(max_length=16, null=True) # type: Optional[str]
|
||||||
end_time = models.DateTimeField() # type: datetime.datetime
|
end_time = models.DateTimeField() # type: datetime.datetime
|
||||||
value = models.BigIntegerField() # type: int
|
value = models.BigIntegerField() # type: int
|
||||||
anomaly = models.ForeignKey(Anomaly, on_delete=models.SET_NULL, null=True) # type: Optional[Anomaly]
|
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
abstract = True
|
abstract = True
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ from analytics.lib.counts import COUNT_STATS, CountStat, DataCollector, \
|
|||||||
do_drop_all_analytics_tables, do_drop_single_stat, \
|
do_drop_all_analytics_tables, do_drop_single_stat, \
|
||||||
do_fill_count_stat_at_hour, do_increment_logging_stat, \
|
do_fill_count_stat_at_hour, do_increment_logging_stat, \
|
||||||
process_count_stat, sql_data_collector
|
process_count_stat, sql_data_collector
|
||||||
from analytics.models import Anomaly, BaseCount, \
|
from analytics.models import BaseCount, \
|
||||||
FillState, InstallationCount, RealmCount, StreamCount, \
|
FillState, InstallationCount, RealmCount, StreamCount, \
|
||||||
UserCount, installation_epoch, last_successful_fill
|
UserCount, installation_epoch, last_successful_fill
|
||||||
from zerver.lib.actions import do_activate_user, do_create_user, \
|
from zerver.lib.actions import do_activate_user, do_create_user, \
|
||||||
@@ -846,7 +846,6 @@ class TestDeleteStats(AnalyticsTestCase):
|
|||||||
RealmCount.objects.create(realm=user.realm, **count_args)
|
RealmCount.objects.create(realm=user.realm, **count_args)
|
||||||
InstallationCount.objects.create(**count_args)
|
InstallationCount.objects.create(**count_args)
|
||||||
FillState.objects.create(property='test', end_time=self.TIME_ZERO, state=FillState.DONE)
|
FillState.objects.create(property='test', end_time=self.TIME_ZERO, state=FillState.DONE)
|
||||||
Anomaly.objects.create(info='test anomaly')
|
|
||||||
|
|
||||||
analytics = apps.get_app_config('analytics')
|
analytics = apps.get_app_config('analytics')
|
||||||
for table in list(analytics.models.values()):
|
for table in list(analytics.models.values()):
|
||||||
@@ -869,7 +868,6 @@ class TestDeleteStats(AnalyticsTestCase):
|
|||||||
InstallationCount.objects.create(**count_args)
|
InstallationCount.objects.create(**count_args)
|
||||||
FillState.objects.create(property='to_delete', end_time=self.TIME_ZERO, state=FillState.DONE)
|
FillState.objects.create(property='to_delete', end_time=self.TIME_ZERO, state=FillState.DONE)
|
||||||
FillState.objects.create(property='to_save', end_time=self.TIME_ZERO, state=FillState.DONE)
|
FillState.objects.create(property='to_save', end_time=self.TIME_ZERO, state=FillState.DONE)
|
||||||
Anomaly.objects.create(info='test anomaly')
|
|
||||||
|
|
||||||
analytics = apps.get_app_config('analytics')
|
analytics = apps.get_app_config('analytics')
|
||||||
for table in list(analytics.models.values()):
|
for table in list(analytics.models.values()):
|
||||||
@@ -877,11 +875,8 @@ class TestDeleteStats(AnalyticsTestCase):
|
|||||||
|
|
||||||
do_drop_single_stat('to_delete')
|
do_drop_single_stat('to_delete')
|
||||||
for table in list(analytics.models.values()):
|
for table in list(analytics.models.values()):
|
||||||
if table._meta.db_table == 'analytics_anomaly':
|
self.assertFalse(table.objects.filter(property='to_delete').exists())
|
||||||
self.assertTrue(table.objects.exists())
|
self.assertTrue(table.objects.filter(property='to_save').exists())
|
||||||
else:
|
|
||||||
self.assertFalse(table.objects.filter(property='to_delete').exists())
|
|
||||||
self.assertTrue(table.objects.filter(property='to_save').exists())
|
|
||||||
|
|
||||||
class TestActiveUsersAudit(AnalyticsTestCase):
|
class TestActiveUsersAudit(AnalyticsTestCase):
|
||||||
def setUp(self) -> None:
|
def setUp(self) -> None:
|
||||||
|
|||||||
@@ -51,8 +51,6 @@ set of database tables. Each of these tables has the following fields:
|
|||||||
"messages_sent:client:day" in the UserCount table, this is the number of
|
"messages_sent:client:day" in the UserCount table, this is the number of
|
||||||
messages sent by a particular user, from a particular client, on the day
|
messages sent by a particular user, from a particular client, on the day
|
||||||
ending at end_time.
|
ending at end_time.
|
||||||
- anomaly: Currently unused, but a key into the Anomaly table allowing
|
|
||||||
someone to indicate a data irregularity.
|
|
||||||
|
|
||||||
There are four tables: UserCount, StreamCount, RealmCount, and
|
There are four tables: UserCount, StreamCount, RealmCount, and
|
||||||
InstallationCount. Every CountStat is initially collected into UserCount,
|
InstallationCount. Every CountStat is initially collected into UserCount,
|
||||||
|
|||||||
@@ -57,7 +57,6 @@ MessageOutput = Dict[str, Union[List[Record], List[int], int]]
|
|||||||
MESSAGE_BATCH_CHUNK_SIZE = 1000
|
MESSAGE_BATCH_CHUNK_SIZE = 1000
|
||||||
|
|
||||||
ALL_ZULIP_TABLES = {
|
ALL_ZULIP_TABLES = {
|
||||||
'analytics_anomaly',
|
|
||||||
'analytics_fillstate',
|
'analytics_fillstate',
|
||||||
'analytics_installationcount',
|
'analytics_installationcount',
|
||||||
'analytics_realmcount',
|
'analytics_realmcount',
|
||||||
@@ -174,8 +173,6 @@ NON_EXPORTED_TABLES = {
|
|||||||
|
|
||||||
# Fillstate will require some cleverness to do the right partial export.
|
# Fillstate will require some cleverness to do the right partial export.
|
||||||
'analytics_fillstate',
|
'analytics_fillstate',
|
||||||
# This table isn't yet used for anything.
|
|
||||||
'analytics_anomaly',
|
|
||||||
|
|
||||||
# These are for unfinished features; we'll want to add them ot the
|
# These are for unfinished features; we'll want to add them ot the
|
||||||
# export before they reach full production status.
|
# export before they reach full production status.
|
||||||
|
|||||||
Reference in New Issue
Block a user