From dfbeab73b58177f46e5e76aeebf75cba13d261c6 Mon Sep 17 00:00:00 2001 From: Rishi Gupta Date: Thu, 27 Apr 2017 16:26:50 -0700 Subject: [PATCH] analytics: Change update_analytics_counts to only use hour boundaries. Fixes a recent regression where analytics were not being run on hour boundaries. Includes a migration that dumps all the analytics data. --- .../commands/update_analytics_counts.py | 5 +++- .../migrations/0011_clear_analytics_tables.py | 29 +++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 analytics/migrations/0011_clear_analytics_tables.py diff --git a/analytics/management/commands/update_analytics_counts.py b/analytics/management/commands/update_analytics_counts.py index b2de394998..79a8c50d08 100644 --- a/analytics/management/commands/update_analytics_counts.py +++ b/analytics/management/commands/update_analytics_counts.py @@ -16,6 +16,7 @@ from django.conf import settings from analytics.models import RealmCount, UserCount from analytics.lib.counts import COUNT_STATS, logger, process_count_stat +from zerver.lib.timestamp import floor_to_hour from zerver.models import UserProfile, Message from typing import Any, Dict @@ -58,12 +59,14 @@ class Command(BaseCommand): def run_update_analytics_counts(self, options): # type: (Dict[str, Any]) -> None fill_to_time = parse_datetime(options['time']) + if options['utc']: fill_to_time = fill_to_time.replace(tzinfo=timezone_utc) - if fill_to_time.tzinfo is None: raise ValueError("--time must be timezone aware. Maybe you meant to use the --utc option?") + fill_to_time = floor_to_hour(fill_to_time.astimezone(timezone_utc)) + logger.info("Starting updating analytics counts through %s" % (fill_to_time,)) if options['stat'] is not None: diff --git a/analytics/migrations/0011_clear_analytics_tables.py b/analytics/migrations/0011_clear_analytics_tables.py new file mode 100644 index 0000000000..fdcefec177 --- /dev/null +++ b/analytics/migrations/0011_clear_analytics_tables.py @@ -0,0 +1,29 @@ +# -*- 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_analytics_tables(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') + + UserCount.objects.all().delete() + StreamCount.objects.all().delete() + RealmCount.objects.all().delete() + InstallationCount.objects.all().delete() + FillState.objects.all().delete() + +class Migration(migrations.Migration): + + dependencies = [ + ('analytics', '0010_clear_messages_sent_values'), + ] + + operations = [ + migrations.RunPython(clear_analytics_tables), + ]