def test_add_app_statistics(self): now = datetime.utcnow() userid = 1 channel = DEFAULT_CHANNEL platform = 'win' app = dict(appid='{F97917B1-20AB-48C1-9802-CEF305B10804}', version='30.0.123.1234') appid = app.get('appid') version = app.get('version') events_appid = DayEvents('new_install:%s' % app.get('appid'), now.year, now.month, now.day) events_appid_version = DayEvents('request:{}:{}'.format(appid, version), now.year, now.month, now.day) events_appid_platform = DayEvents('new_install:{}:{}'.format(appid, platform), now.year, now.month, now.day) events_appid_channel = DayEvents('request:{}:{}'.format(appid, channel), now.year, now.month, now.day) events_appid_platform_version = DayEvents('request:{}:{}:{}'.format(appid, platform, version), now.year, now.month, now.day) self.assertEqual(len(events_appid), 0) self.assertEqual(len(events_appid_version), 0) self.assertEqual(len(events_appid_platform), 0) self.assertEqual(len(events_appid_channel), 0) self.assertEqual(len(events_appid_platform_version), 0) add_app_statistics(userid, platform, app) self.assertEqual(len(events_appid), 1) self.assertEqual(len(events_appid_version), 1) self.assertEqual(len(events_appid_platform), 1) self.assertEqual(len(events_appid_channel), 1) self.assertEqual(len(events_appid_platform_version), 1) self.assertIn(userid, events_appid) self.assertIn(userid, events_appid_version) self.assertIn(userid, events_appid_platform) self.assertIn(userid, events_appid_channel) self.assertIn(userid, events_appid_platform_version)
def test_mark_with_diff_days(): delete_all_events() mark_event('active', 123, track_hourly=True) now = datetime.utcnow() # Month assert 123 in MonthEvents('active', now.year, now.month) assert 124 not in MonthEvents('active', now.year, now.month) # Week assert 123 in WeekEvents('active', now.year, now.isocalendar()[1]) assert 124 not in WeekEvents('active', now.year, now.isocalendar()[1]) # Day assert 123 in DayEvents('active', now.year, now.month, now.day) assert 124 not in DayEvents('active', now.year, now.month, now.day) # Hour assert 123 in HourEvents('active', now.year, now.month, now.day, now.hour) assert 124 not in HourEvents('active', now.year, now.month, now.day, now.hour) assert 124 not in HourEvents('active', now.year, now.month, now.day, now.hour - 1)
def test_different_dates(): now = datetime.utcnow() yesterday = now - timedelta(days=1) mark_event('active', 123, now=now) mark_event('active', 23232, now=yesterday) assert DayEvents('active', now.year, now.month, now.day).get_count() == 1 assert DayEvents('active', yesterday.year, yesterday.month, yesterday.day).get_count() == 1
def test_bit_operations_magic(): mark_event('foo', 1) mark_event('foo', 2) mark_event('bar', 2) mark_event('bar', 3) foo = DayEvents('foo') bar = DayEvents('bar') assert list(foo & bar) == [2] assert list(foo | bar) == [1, 2, 3] assert list(foo ^ bar) == [1, 3] assert list(~foo & bar) == [3]
def test_userid_counting(self): now = datetime.utcnow() userid = '{D0BBD725-742D-44ae-8D46-0231E881D58E}' user_id = get_id(userid) appid1 = '{430FD4D0-B729-4F61-AA34-91526481799D}' appid2 = '{D0AB2EBC-931B-4013-9FEB-C9C4C2225C8C}' request_events = DayEvents('request', now.year, now.month, now.day) app1_events = DayEvents('request:%s' % appid1, now.year, now.month, now.day) app2_events = DayEvents('request:%s' % appid2, now.year, now.month, now.day) self.assertEqual(len(request_events), 0) self.assertEqual(len(app1_events), 0) self.assertEqual(len(app2_events), 0) app = ApplicationFactory.create( id='{D0AB2EBC-931B-4013-9FEB-C9C4C2225C8C}', name='chrome') platform = PlatformFactory.create(name='win') channel = ChannelFactory.create(name='stable') obj = VersionFactory.create(app=app, platform=platform, channel=channel, version='13.0.782.112', file=SimpleUploadedFile( './chrome_installer.exe', b'_' * 23963192)) obj.file_hash = 'VXriGUVI0TNqfLlU02vBel4Q3Zo=' obj.save() Action.objects.create(version=obj, arguments='--do-not-launch-chrome', event=EVENT_DICT_CHOICES['install'], run='chrome_installer.exe') Action.objects.create(version=obj, event=EVENT_DICT_CHOICES['postinstall'], other=dict( version='13.0.782.112', onsuccess='exitsilentlyonlaunchcmd', )) self.client.post(reverse('update'), fixtures.request_update_check, content_type='text/xml') self.assertEqual(len(request_events), 1) self.assertEqual(len(app1_events), 1) self.assertEqual(len(app2_events), 1) self.assertTrue(user_id in request_events) self.assertTrue(user_id in app1_events) self.assertTrue(user_id in app2_events)
def get_users_statistics_weeks(app_id=None): now = timezone.now() event_name = 'request:%s' % app_id if app_id else 'request' year = now.year current_week = now.isocalendar()[1] previous_week = (now - timedelta(weeks=1)).isocalendar()[1] yesterday = now - timedelta(days=1) data = [ ('Previous week', len(WeekEvents(event_name, year, previous_week))), ('Current week', len(WeekEvents(event_name, year, current_week))), ('Yesterday', len(DayEvents(event_name, year, yesterday.month, yesterday.day))), ('Today', len(DayEvents(event_name, year, now.month, now.day))), ] return data
def test_bitop_key_sharing(): today = datetime.utcnow() mark_event('task1', 111, now=today) mark_event('task2', 111, now=today) mark_event('task1', 222, now=today) mark_event('task2', 222, now=today) ev1_task1 = DayEvents('task1', today.year, today.month, today.day) ev1_task2 = DayEvents('task2', today.year, today.month, today.day) ev1_both = BitOpAnd(ev1_task1, ev1_task2) ev2_task1 = DayEvents('task1', today.year, today.month, today.day) ev2_task2 = DayEvents('task2', today.year, today.month, today.day) ev2_both = BitOpAnd(ev2_task1, ev2_task2) assert ev1_both.redis_key == ev2_both.redis_key assert len(ev1_both) == len(ev1_both) == 2 ev1_both.delete() assert len(ev1_both) == len(ev1_both) == 0
def get_daily_data_by_platform(app_id, end, n_days, versions, platform): start = end - timezone.timedelta(days=n_days) event_name = "request:{}:{}:{}" days = [start + timezone.timedelta(days=x) for x in range(0, n_days + 1)] data = [(v, [[ day.strftime("%Y-%m-%dT00:%M:%S.%fZ"), len(DayEvents.from_date(event_name.format(app_id, platform, v), day)) ] for day in days]) for v in versions] data = filter( lambda version_data: sum([data[1] for data in version_data[1]]), data) return dict(data)
def test_userid_counting(self, mock_add_app_statistics): now = datetime.utcnow() userid1 = '{F07B3878-CD6F-4B96-B52F-95C4D23077E0}' user1_id = get_id(userid1) userid2 = '{EC4C5647-F798-4BCA-83DA-926CD448A1D5}' user2_id = get_id(userid2) app_list = [ dict(appid='{F97917B1-19AB-48C1-9802-CEF305B10804}'), dict(appid='{555B8D18-076D-4576-9579-1FD7F0399EAE}') ] request_events = DayEvents('request', now.year, now.month, now.day) self.assertFalse(user1_id in request_events) self.assertEqual(len(request_events), 0) userid_counting(userid1, app_list, 'win') for app in app_list: mock_add_app_statistics.assert_any_call(user1_id, 'win', app, now=None) self.assertEqual(len(request_events), 1) self.assertTrue(user1_id in request_events) userid_counting(userid1, app_list, 'win') for app in app_list: mock_add_app_statistics.assert_any_call(user1_id, 'win', app, now=None) self.assertEqual(len(request_events), 1) self.assertFalse(user2_id in request_events) userid_counting(userid2, app_list[:1], 'win') self.assertTrue(user2_id in request_events) for app in app_list[:1]: mock_add_app_statistics.assert_any_call(user2_id, 'win', app, now=None) self.assertEqual(len(request_events), 2)
def test_bit_operations_complex(): now = datetime.utcnow() tom = now + timedelta(days=1) mark_event('task1', 111, now=now) mark_event('task1', 111, now=tom) mark_event('task2', 111, now=now) mark_event('task2', 111, now=tom) mark_event('task1', 222, now=now) mark_event('task1', 222, now=tom) mark_event('task2', 222, now=now) mark_event('task2', 222, now=tom) now_events = BitOpAnd(DayEvents('task1', now.year, now.month, now.day), DayEvents('task2', now.year, now.month, now.day)) tom_events = BitOpAnd(DayEvents('task1', tom.year, tom.month, tom.day), DayEvents('task2', tom.year, tom.month, tom.day)) both_events = BitOpAnd(now_events, tom_events) assert len(now_events) == len(tom_events) assert len(now_events) == len(both_events)
def get_daily_data_by_platform(app_id, end, n_days, versions, platform, channel): def build_event_name(app_id, platform, channel, v): if channel: return "request:{}:{}:{}:{}".format(app_id, platform, channel, v) else: return "request:{}:{}:{}".format(app_id, platform, v) start = end - timezone.timedelta(days=n_days) days = [start + timezone.timedelta(days=x) for x in range(0, n_days+1)] data = [(v, [[day.strftime("%Y-%m-%dT00:%M:%S.%fZ"), len(DayEvents.from_date(build_event_name(app_id, platform, channel, v), day))] for day in days]) for v in versions] data = filter(lambda version_data: sum([data[1] for data in version_data[1]]), data) return dict(data)
def get_daily_data_by_platform(app_id, end, n_days, versions, platform, channel): def build_event_name(app_id, platform, channel, v): if channel: return "request:{}:{}:{}:{}".format(app_id, platform, channel, v) else: return "request:{}:{}:{}".format(app_id, platform, v) start = end - timezone.timedelta(days=n_days) days = [start + timezone.timedelta(days=x) for x in range(0, n_days+1)] data = [(v, [[day.strftime("%Y-%m-%dT00:%M:%S.%fZ"), len(DayEvents.from_date(build_event_name(app_id, platform, channel, v), day))] for day in days]) for v in versions] data = [version_data for version_data in data if sum([data[1] for data in version_data[1]])] return dict(data)
def _day_events_fn(key, date, system): return DayEvents(key, date.year, date.month, date.day, system=system)
def test_add_app_statistics(self): now = datetime.utcnow() next_month = now.replace(month=now.month + 1) userid = 1 channel = DEFAULT_CHANNEL platform = "win" app_kwargs = dict(appid="{F97917B1-20AB-48C1-9802-CEF305B10804}", version="30.0.123.1234") success_app = create_app_xml(events=fixtures.event_install_success, **app_kwargs) error_app = create_app_xml(events=fixtures.event_install_error, **app_kwargs) appid = app_kwargs.get("appid") version = app_kwargs.get("version") events_request_appid = lambda date=now: DayEvents.from_date("request:%s" % appid, date) events_new_appid = lambda date=now: DayEvents.from_date("new_install:%s" % appid, date) events_request_appid_version = lambda date=now: DayEvents.from_date( "request:{}:{}".format(appid, version), date ) events_request_appid_platform = lambda date=now: DayEvents.from_date( "request:{}:{}".format(appid, platform), date ) events_new_appid_platform = lambda date=now: DayEvents.from_date( "new_install:{}:{}".format(appid, platform), date ) events_request_appid_channel = lambda date=now: DayEvents.from_date( "request:{}:{}".format(appid, channel), date ) events_request_appid_platform_version = lambda date=now: DayEvents.from_date( "request:{}:{}:{}".format(appid, platform, version), date ) self.assertEqual(len(events_new_appid()), 0) self.assertEqual(len(events_request_appid()), 0) self.assertEqual(len(events_request_appid_version()), 0) self.assertEqual(len(events_request_appid_platform()), 0) self.assertEqual(len(events_new_appid_platform()), 0) self.assertEqual(len(events_request_appid_channel()), 0) self.assertEqual(len(events_request_appid_platform_version()), 0) add_app_statistics(userid, platform, error_app) self.assertEqual(len(events_new_appid()), 0) self.assertEqual(len(events_request_appid()), 0) self.assertEqual(len(events_request_appid_version()), 0) self.assertEqual(len(events_request_appid_platform()), 0) self.assertEqual(len(events_new_appid_platform()), 0) self.assertEqual(len(events_request_appid_channel()), 0) self.assertEqual(len(events_request_appid_platform_version()), 0) add_app_statistics(userid, platform, success_app) self.assertEqual(len(events_new_appid()), 1) self.assertEqual(len(events_request_appid()), 0) self.assertEqual(len(events_request_appid_version()), 1) self.assertEqual(len(events_new_appid_platform()), 1) self.assertEqual(len(events_request_appid_platform()), 0) self.assertEqual(len(events_request_appid_channel()), 1) self.assertEqual(len(events_request_appid_platform_version()), 1) self.assertIn(userid, events_new_appid()) self.assertIn(userid, events_request_appid_version()) self.assertIn(userid, events_new_appid_platform()) self.assertIn(userid, events_request_appid_channel()) self.assertIn(userid, events_request_appid_platform_version()) add_app_statistics(userid, platform, success_app) self.assertEqual(len(events_new_appid()), 1) self.assertEqual(len(events_request_appid()), 0) self.assertEqual(len(events_request_appid_version()), 1) self.assertEqual(len(events_new_appid_platform()), 1) self.assertEqual(len(events_request_appid_platform()), 0) self.assertEqual(len(events_request_appid_channel()), 1) self.assertEqual(len(events_request_appid_platform_version()), 1) with freeze_time(next_month): add_app_statistics(userid, platform, error_app) self.assertEqual(len(events_request_appid(next_month)), 0) self.assertEqual(len(events_request_appid_platform(next_month)), 0) with freeze_time(next_month): add_app_statistics(userid, platform, success_app) self.assertEqual(len(events_request_appid(next_month)), 1) self.assertEqual(len(events_request_appid_platform(next_month)), 1) self.assertEqual(len(events_new_appid(next_month)), 0) self.assertEqual(len(events_request_appid_version(next_month)), 1) self.assertEqual(len(events_new_appid_platform(next_month)), 0) self.assertEqual(len(events_request_appid_channel()), 1) self.assertEqual(len(events_request_appid_platform_version()), 1) self.assertIn(userid, events_request_appid(next_month)) self.assertIn(userid, events_request_appid_platform(next_month))
def test_add_app_statistics(self): now = datetime.utcnow() next_month = now.replace(month=now.month + 1) userid = 1 channel = DEFAULT_CHANNEL platform = 'win' app_kwargs = dict(appid='{2882CF9B-D9C2-4edb-9AAF-8ED5FCF366F7}', nextversion='0.0.0.1') success_app = create_app_xml(events=fixtures.event_install_success, **app_kwargs) error_app = create_app_xml(events=fixtures.event_install_error, **app_kwargs) appid = app_kwargs.get('appid') version = app_kwargs.get('nextversion') events_request_appid = lambda date=now: DayEvents.from_date('request:%s' % appid, date) events_new_appid = lambda date=now: DayEvents.from_date('new_install:%s' % appid, date) events_request_appid_version = lambda date=now: DayEvents.from_date('request:{}:{}'.format(appid, version), date) events_request_appid_platform = lambda date=now: DayEvents.from_date('request:{}:{}'.format(appid, platform), date) events_new_appid_platform = lambda date=now: DayEvents.from_date('new_install:{}:{}'.format(appid, platform), date) events_request_appid_channel = lambda date=now: DayEvents.from_date('request:{}:{}'.format(appid, channel), date) events_request_appid_platform_version = lambda date=now: DayEvents.from_date( 'request:{}:{}:{}'.format(appid, platform, version), date) events_request_appid_platform_channel_version = lambda date=now: DayEvents.from_date( 'request:{}:{}:{}:{}'.format(appid, platform, channel, version), date) self.assertEqual(len(events_new_appid()), 0) self.assertEqual(len(events_request_appid()), 0) self.assertEqual(len(events_request_appid_version()), 0) self.assertEqual(len(events_request_appid_platform()), 0) self.assertEqual(len(events_new_appid_platform()), 0) self.assertEqual(len(events_request_appid_channel()), 0) self.assertEqual(len(events_request_appid_platform_version()), 0) self.assertEqual(len(events_request_appid_platform_channel_version()), 0) add_app_statistics(userid, platform, error_app) self.assertEqual(len(events_new_appid()), 0) self.assertEqual(len(events_request_appid()), 0) self.assertEqual(len(events_request_appid_version()), 0) self.assertEqual(len(events_request_appid_platform()), 0) self.assertEqual(len(events_new_appid_platform()), 0) self.assertEqual(len(events_request_appid_channel()), 0) self.assertEqual(len(events_request_appid_platform_version()), 0) self.assertEqual(len(events_request_appid_platform_channel_version()), 0) add_app_statistics(userid, platform, success_app) self.assertEqual(len(events_new_appid()), 1) self.assertEqual(len(events_request_appid()), 0) self.assertEqual(len(events_request_appid_version()), 1) self.assertEqual(len(events_new_appid_platform()), 1) self.assertEqual(len(events_request_appid_platform()), 0) self.assertEqual(len(events_request_appid_channel()), 1) self.assertEqual(len(events_request_appid_platform_version()), 1) self.assertEqual(len(events_request_appid_platform_channel_version()), 1) self.assertIn(userid, events_new_appid()) self.assertIn(userid, events_request_appid_version()) self.assertIn(userid, events_new_appid_platform()) self.assertIn(userid, events_request_appid_channel()) self.assertIn(userid, events_request_appid_platform_version()) self.assertIn(userid, events_request_appid_platform_channel_version()) add_app_statistics(userid, platform, success_app) self.assertEqual(len(events_new_appid()), 1) self.assertEqual(len(events_request_appid()), 0) self.assertEqual(len(events_request_appid_version()), 1) self.assertEqual(len(events_new_appid_platform()), 1) self.assertEqual(len(events_request_appid_platform()), 0) self.assertEqual(len(events_request_appid_channel()), 1) self.assertEqual(len(events_request_appid_platform_version()), 1) with freeze_time(next_month): add_app_statistics(userid, platform, error_app) self.assertEqual(len(events_request_appid(next_month)), 0) self.assertEqual(len(events_request_appid_platform(next_month)), 0) with freeze_time(next_month): add_app_statistics(userid, platform, success_app) self.assertEqual(len(events_request_appid(next_month)), 1) self.assertEqual(len(events_request_appid_platform(next_month)), 1) self.assertEqual(len(events_new_appid(next_month)), 0) self.assertEqual(len(events_request_appid_version(next_month)), 1) self.assertEqual(len(events_new_appid_platform(next_month)), 0) self.assertEqual(len(events_request_appid_channel(next_month)), 1) self.assertEqual(len(events_request_appid_platform_version(next_month)), 1) self.assertEqual(len(events_request_appid_platform_channel_version(next_month)), 1) self.assertIn(userid, events_request_appid(next_month)) self.assertIn(userid, events_request_appid_platform(next_month))
def test_add_app_statistics(self): now = datetime.utcnow() next_month = now.replace(month=now.month + 1) userid = 1 channel = DEFAULT_CHANNEL platform = 'win' app_kwargs = dict(appid='{2882CF9B-D9C2-4edb-9AAF-8ED5FCF366F7}', nextversion='0.0.0.1') success_app = create_app_xml(events=fixtures.event_install_success, **app_kwargs) error_app = create_app_xml(events=fixtures.event_install_error, **app_kwargs) appid = app_kwargs.get('appid') version = app_kwargs.get('nextversion') events_request_appid = lambda date=now: DayEvents.from_date( 'request:%s' % appid, date) events_new_appid = lambda date=now: DayEvents.from_date( 'new_install:%s' % appid, date) events_request_appid_version = lambda date=now: DayEvents.from_date( 'request:{}:{}'.format(appid, version), date) events_request_appid_platform = lambda date=now: DayEvents.from_date( 'request:{}:{}'.format(appid, platform), date) events_new_appid_platform = lambda date=now: DayEvents.from_date( 'new_install:{}:{}'.format(appid, platform), date) events_request_appid_channel = lambda date=now: DayEvents.from_date( 'request:{}:{}'.format(appid, channel), date) events_request_appid_platform_version = lambda date=now: DayEvents.from_date( 'request:{}:{}:{}'.format(appid, platform, version), date) events_request_appid_platform_channel_version = lambda date=now: DayEvents.from_date( 'request:{}:{}:{}:{}'.format(appid, platform, channel, version), date) self.assertEqual(len(events_new_appid()), 0) self.assertEqual(len(events_request_appid()), 0) self.assertEqual(len(events_request_appid_version()), 0) self.assertEqual(len(events_request_appid_platform()), 0) self.assertEqual(len(events_new_appid_platform()), 0) self.assertEqual(len(events_request_appid_channel()), 0) self.assertEqual(len(events_request_appid_platform_version()), 0) self.assertEqual(len(events_request_appid_platform_channel_version()), 0) add_app_statistics(userid, platform, error_app) self.assertEqual(len(events_new_appid()), 0) self.assertEqual(len(events_request_appid()), 0) self.assertEqual(len(events_request_appid_version()), 0) self.assertEqual(len(events_request_appid_platform()), 0) self.assertEqual(len(events_new_appid_platform()), 0) self.assertEqual(len(events_request_appid_channel()), 0) self.assertEqual(len(events_request_appid_platform_version()), 0) self.assertEqual(len(events_request_appid_platform_channel_version()), 0) add_app_statistics(userid, platform, success_app) self.assertEqual(len(events_new_appid()), 1) self.assertEqual(len(events_request_appid()), 0) self.assertEqual(len(events_request_appid_version()), 1) self.assertEqual(len(events_new_appid_platform()), 1) self.assertEqual(len(events_request_appid_platform()), 0) self.assertEqual(len(events_request_appid_channel()), 1) self.assertEqual(len(events_request_appid_platform_version()), 1) self.assertEqual(len(events_request_appid_platform_channel_version()), 1) self.assertIn(userid, events_new_appid()) self.assertIn(userid, events_request_appid_version()) self.assertIn(userid, events_new_appid_platform()) self.assertIn(userid, events_request_appid_channel()) self.assertIn(userid, events_request_appid_platform_version()) self.assertIn(userid, events_request_appid_platform_channel_version()) add_app_statistics(userid, platform, success_app) self.assertEqual(len(events_new_appid()), 1) self.assertEqual(len(events_request_appid()), 0) self.assertEqual(len(events_request_appid_version()), 1) self.assertEqual(len(events_new_appid_platform()), 1) self.assertEqual(len(events_request_appid_platform()), 0) self.assertEqual(len(events_request_appid_channel()), 1) self.assertEqual(len(events_request_appid_platform_version()), 1) with freeze_time(next_month): add_app_statistics(userid, platform, error_app) self.assertEqual(len(events_request_appid(next_month)), 0) self.assertEqual(len(events_request_appid_platform(next_month)), 0) with freeze_time(next_month): add_app_statistics(userid, platform, success_app) self.assertEqual(len(events_request_appid(next_month)), 1) self.assertEqual(len(events_request_appid_platform(next_month)), 1) self.assertEqual(len(events_new_appid(next_month)), 0) self.assertEqual(len(events_request_appid_version(next_month)), 1) self.assertEqual(len(events_new_appid_platform(next_month)), 0) self.assertEqual(len(events_request_appid_channel(next_month)), 1) self.assertEqual( len(events_request_appid_platform_version(next_month)), 1) self.assertEqual( len(events_request_appid_platform_channel_version(next_month)), 1) self.assertIn(userid, events_request_appid(next_month)) self.assertIn(userid, events_request_appid_platform(next_month))
def test_add_app_statistics(self): userid1 = '{F07B3878-CD6F-4B96-B52F-95C4D23077E0}' user1_id = get_id(userid1) userid2 = '{EC4C5647-F798-4BCA-83DA-926CD448A1D5}' user2_id = get_id(userid2) appid = '{F97917B1-19AB-48C1-9802-CEF305B10804}' version = '0.0.0.1' channel = 'test' test_app = dict(appid=appid, version=version, tag=channel) install_app_events = DayEvents('new_install:%s' % appid) request_app_events = DayEvents('request:%s' % appid) request_version_events = DayEvents('request:{}:{}'.format( appid, version)) install_platform_events = DayEvents('new_install:{}:{}'.format( appid, 'mac')) request_platform_events = DayEvents('request:{}:{}'.format( appid, 'mac')) request_channel_events = DayEvents('request:{}:{}'.format( appid, channel)) request_platform_version_events = DayEvents('request:{}:{}:{}'.format( appid, 'mac', version)) self.assertFalse(user1_id in install_app_events) self.assertEqual(len(install_app_events), 0) self.assertFalse(user1_id in install_platform_events) self.assertEqual(len(install_platform_events), 0) self.assertFalse(user1_id in request_app_events) self.assertEqual(len(request_app_events), 0) self.assertFalse(user1_id in request_platform_events) self.assertEqual(len(request_platform_events), 0) self.assertFalse(user1_id in request_version_events) self.assertEqual(len(request_version_events), 0) self.assertFalse(user1_id in request_channel_events) self.assertEqual(len(request_channel_events), 0) self.assertFalse(user1_id in request_platform_version_events) self.assertEqual(len(request_platform_version_events), 0) add_app_statistics(user1_id, 'mac', test_app) self.assertTrue(user1_id in install_app_events) self.assertEqual(len(install_app_events), 1) self.assertFalse(user1_id in request_app_events) self.assertEqual(len(request_app_events), 0) self.assertFalse(user1_id in request_platform_events) self.assertEqual(len(request_platform_events), 0) self.assertTrue(user1_id in request_version_events) self.assertEqual(len(request_version_events), 1) self.assertTrue(user1_id in install_platform_events) self.assertEqual(len(install_platform_events), 1) self.assertTrue(user1_id in request_channel_events) self.assertEqual(len(request_channel_events), 1) self.assertTrue(user1_id in request_platform_version_events) self.assertEqual(len(request_platform_version_events), 1) add_app_statistics(user2_id, 'mac', test_app) self.assertTrue(user2_id in install_app_events) self.assertEqual(len(install_app_events), 2) self.assertFalse(user2_id in request_app_events) self.assertEqual(len(request_app_events), 0) self.assertFalse(user2_id in request_platform_events) self.assertEqual(len(request_platform_events), 0) self.assertTrue(user2_id in request_version_events) self.assertEqual(len(request_version_events), 2) self.assertTrue(user2_id in install_platform_events) self.assertEqual(len(install_platform_events), 2) self.assertTrue(user2_id in request_channel_events) self.assertEqual(len(request_channel_events), 2) self.assertTrue(user2_id in request_platform_version_events) self.assertEqual(len(request_platform_version_events), 2) add_app_statistics(user1_id, 'mac', test_app) self.assertTrue(user1_id in install_app_events) self.assertEqual(len(install_app_events), 2) self.assertFalse(user1_id in request_app_events) self.assertEqual(len(request_app_events), 0) self.assertFalse(user1_id in request_platform_events) self.assertEqual(len(request_platform_events), 0) self.assertTrue(user1_id in request_version_events) self.assertEqual(len(request_version_events), 2) self.assertTrue(user1_id in install_platform_events) self.assertEqual(len(install_platform_events), 2) self.assertTrue(user1_id in request_channel_events) self.assertEqual(len(request_channel_events), 2) self.assertTrue(user1_id in request_platform_version_events) self.assertEqual(len(request_platform_version_events), 2)
def test_add_app_statistics(self): now = datetime.utcnow() next_month = now.replace(month=now.month + 1) userid = 1 platform = 'mac' appid = '{F97917B1-19AB-48C1-9802-CEF305B10804}' version = '0.0.0.1' channel = 'test' test_app = dict(appid=appid, version=version, tag=channel) events_request_appid = lambda date=now: DayEvents.from_date('request:%s' % appid, date) events_new_appid = lambda date=now: DayEvents.from_date('new_install:%s' % appid, date) events_request_appid_version = lambda date=now: DayEvents.from_date('request:{}:{}'.format(appid, version), date) events_request_appid_platform = lambda date=now: DayEvents.from_date('request:{}:{}'.format(appid, platform), date) events_new_appid_platform = lambda date=now: DayEvents.from_date('new_install:{}:{}'.format(appid, platform), date) events_request_appid_channel = lambda date=now: DayEvents.from_date('request:{}:{}'.format(appid, channel), date) events_request_appid_platform_version = lambda date=now: DayEvents.from_date( 'request:{}:{}:{}'.format(appid, platform, version), date) events_request_appid_platform_channel_version = lambda date=now: DayEvents.from_date( 'request:{}:{}:{}:{}'.format(appid, platform, channel, version), date) self.assertEqual(len(events_new_appid()), 0) self.assertEqual(len(events_request_appid()), 0) self.assertEqual(len(events_request_appid_version()), 0) self.assertEqual(len(events_request_appid_platform()), 0) self.assertEqual(len(events_new_appid_platform()), 0) self.assertEqual(len(events_request_appid_channel()), 0) self.assertEqual(len(events_request_appid_platform_version()), 0) self.assertEqual(len(events_request_appid_platform_channel_version()), 0) add_app_statistics(userid, platform, test_app) self.assertEqual(len(events_new_appid()), 1) self.assertEqual(len(events_request_appid()), 0) self.assertEqual(len(events_request_appid_version()), 1) self.assertEqual(len(events_new_appid_platform()), 1) self.assertEqual(len(events_request_appid_platform()), 0) self.assertEqual(len(events_request_appid_channel()), 1) self.assertEqual(len(events_request_appid_platform_version()), 1) self.assertEqual(len(events_request_appid_platform_channel_version()), 1) self.assertIn(userid, events_new_appid()) self.assertIn(userid, events_request_appid_version()) self.assertIn(userid, events_new_appid_platform()) self.assertIn(userid, events_request_appid_channel()) self.assertIn(userid, events_request_appid_platform_version()) self.assertIn(userid, events_request_appid_platform_channel_version()) add_app_statistics(userid, platform, test_app) self.assertEqual(len(events_new_appid()), 1) self.assertEqual(len(events_request_appid()), 0) self.assertEqual(len(events_request_appid_version()), 1) self.assertEqual(len(events_new_appid_platform()), 1) self.assertEqual(len(events_request_appid_platform()), 0) self.assertEqual(len(events_request_appid_channel()), 1) self.assertEqual(len(events_request_appid_platform_version()), 1) self.assertEqual(len(events_request_appid_platform_channel_version()), 1) with freeze_time(next_month): add_app_statistics(userid, platform, test_app) self.assertEqual(len(events_request_appid(next_month)), 1) self.assertEqual(len(events_request_appid_platform(next_month)), 1) self.assertEqual(len(events_new_appid(next_month)), 0) self.assertEqual(len(events_request_appid_version(next_month)), 1) self.assertEqual(len(events_new_appid_platform(next_month)), 0) self.assertEqual(len(events_request_appid_channel(next_month)), 1) self.assertEqual(len(events_request_appid_platform_version(next_month)), 1) self.assertEqual(len(events_request_appid_platform_channel_version(next_month)), 1) self.assertIn(userid, events_request_appid(next_month)) self.assertIn(userid, events_request_appid_platform(next_month)) self.assertIn(userid, events_request_appid_platform_channel_version(next_month))
def test_get_event_names_prefix(): event_names = {'foo', 'bar', 'baz', 'spam', 'egg'} for e in event_names: mark_event(e, 1) BitOpAnd(DayEvents('foo'), DayEvents('bar')) assert set(get_event_names(prefix='b', batch=2)) == {'bar', 'baz'}