def test_stats_cell_json(self): app = self.app today = util.utcnow().date() yesterday = today - timedelta(1) session = self.session stat = Stat(key=StatKey.unique_cell, time=yesterday, value=2) session.add(stat) stat = Stat(key=StatKey.unique_ocid_cell, time=yesterday, value=5) session.add(stat) session.commit() result = app.get('/stats_cell.json', status=200) self.assertEqual( result.json, { 'series': [ { 'data': [[timegm(yesterday.timetuple()) * 1000, 2]], 'title': 'MLS Cells' }, { 'data': [[timegm(yesterday.timetuple()) * 1000, 5]], 'title': 'OCID Cells' }, ] }) second_result = app.get('/stats_cell.json', status=200) self.assertEqual(second_result.json, result.json)
def test_stats(self): day = util.utcnow().date() - timedelta(1) session = self.session stats = [ Stat(key=StatKey.cell, time=day, value=2000000), Stat(key=StatKey.wifi, time=day, value=2000000), Stat(key=StatKey.unique_cell, time=day, value=1000000), Stat(key=StatKey.unique_ocid_cell, time=day, value=1500000), Stat(key=StatKey.unique_wifi, time=day, value=2000000), ] session.add_all(stats) session.commit() request = DummyRequest() request.db_ro_session = self.session request.registry.redis_client = self.redis_client inst = self._make_view(request) result = inst.stats_view() self.assertEqual(result['page_title'], 'Statistics') self.assertEqual(result['metrics1'], [ { 'name': 'MLS Cells', 'value': '1.00' }, { 'name': 'OpenCellID Cells', 'value': '1.50' }, { 'name': 'MLS Cell Observations', 'value': '2.00' }, ]) self.assertEqual(result['metrics2'], [ { 'name': 'Wifi Networks', 'value': '2.00' }, { 'name': 'Wifi Observations', 'value': '2.00' }, ]) # call the view again, without a working db session, so # we can be sure to use the cached result inst = self._make_view(request) request.db_ro_session = None second_result = inst.stats_view() self.assertEqual(second_result, result)
def test_histogram_different_stat_name(self, session): today = util.utcnow().date() session.add(Stat(key=StatKey.unique_cell, time=today, value=9)) session.commit() result = histogram(session, StatKey.unique_cell) first_of_month = today.replace(day=1) assert result == [[[unixtime(first_of_month), 9]]]
def test_histogram_different_stat_name(self): session = self.db_master_session day = util.utcnow().date() - timedelta(days=1) stat = Stat(key=StatKey.unique_cell, time=day, value=9) session.add(stat) session.commit() result = histogram(session, StatKey.unique_cell) self.assertEqual(result, [[[unixtime(day), 9]]])
def test_enum(self): session = self.session session.add(Stat(key=StatKey.cell, value=13)) session.flush() result = session.query(Stat).first() self.assertEqual(result.key, StatKey.cell) self.assertEqual(int(result.key), 1) self.assertEqual(result.key.name, 'cell')
def test_enum(self, session): utcday = util.utcnow().date() session.add(Stat(key=StatKey.cell, time=utcday, value=13)) session.flush() result = session.query(Stat).first() assert result.key == StatKey.cell assert int(result.key) == 1 assert result.key.name == 'cell'
def test_fields(self, session): utcday = util.utcnow().date() session.add(Stat(key=StatKey.cell, time=utcday, value=13)) session.flush() result = session.query(Stat).first() assert result.key == StatKey.cell assert result.time == utcday assert result.value == 13
def test_global_stats_missing_today(self, session): day = util.utcnow().date() - timedelta(1) yesterday = day - timedelta(days=1) stats = [ Stat(key=StatKey.cell, time=yesterday, value=5000000), Stat(key=StatKey.cell, time=day, value=6000000), Stat(key=StatKey.wifi, time=day, value=3000000), Stat(key=StatKey.unique_cell, time=yesterday, value=4000000), ] session.add_all(stats) session.commit() result = global_stats(session) assert (result == { 'blue': '0.00', 'unique_blue': '0.00', 'cell': '6.00', 'unique_cell': '4.00', 'wifi': '3.00', 'unique_wifi': '0.00', })
def test_enum(self): utcday = util.utcnow().date() self.session.add(Stat(key=StatKey.cell, time=utcday, value=13)) self.session.flush() result = self.session.query(Stat).first() self.assertEqual(result.key, StatKey.cell) self.assertEqual(int(result.key), 1) self.assertEqual(result.key.name, 'cell')
def test_fields(self): utcday = util.utcnow().date() self.session.add(Stat(key=StatKey.cell, time=utcday, value=13)) self.session.flush() result = self.session.query(Stat).first() self.assertEqual(result.key, StatKey.cell) self.assertEqual(result.time, utcday) self.assertEqual(result.value, 13)
def update_key(self, stat_key, day): # determine the value from the day before query = self.session.query(Stat).filter(Stat.key == stat_key).filter(Stat.time < day).order_by(Stat.time.desc()) before = query.first() old_value = 0 if before: old_value = before.value # get the value from redis for the day in question stat_counter = StatCounter(stat_key, day) value = stat_counter.get(self.redis_client) # insert or update a new stat value hashkey = Stat.to_hashkey(key=stat_key, time=day) Stat.incr(self.session, hashkey, value, old=old_value) # queue the redis value to be decreased stat_counter.decr(self.pipe, value)
def test_enum(self): stat = Stat(key=StatKey.cell, value=13) session = self.db_master_session session.add(stat) session.commit() result = session.query(stat.__class__).first() self.assertEqual(result.key, StatKey.cell) self.assertEqual(int(result.key), 1) self.assertEqual(result.key.name, 'cell')
def test_fields(self): utcday = util.utcnow().date() stat = Stat(key=StatKey.cell, time=utcday, value=13) session = self.db_master_session session.add(stat) session.commit() result = session.query(stat.__class__).first() self.assertEqual(result.key, StatKey.cell) self.assertEqual(result.time, utcday) self.assertEqual(result.value, 13)
def test_global_stats_missing_today(self, session): day = util.utcnow().date() - timedelta(1) yesterday = day - timedelta(days=1) stats = [ Stat(key=StatKey.cell, time=yesterday, value=5000000), Stat(key=StatKey.cell, time=day, value=6000000), Stat(key=StatKey.wifi, time=day, value=3000000), Stat(key=StatKey.unique_cell, time=yesterday, value=4000000), ] session.add_all(stats) session.commit() result = global_stats(session) assert result == { "blue": "0.00", "unique_blue": "0.00", "cell": "6.00", "unique_cell": "4.00", "wifi": "3.00", "unique_wifi": "0.00", }
def test_histogram(self): session = self.db_master_session today = util.utcnow().date() one_day = today - timedelta(days=1) two_days = today - timedelta(days=2) one_month = today - timedelta(days=35) two_months = today - timedelta(days=70) long_ago = today - timedelta(days=100) stats = [ Stat(key=StatKey.cell, time=long_ago, value=40), Stat(key=StatKey.cell, time=two_months, value=50), Stat(key=StatKey.cell, time=one_month, value=60), Stat(key=StatKey.cell, time=two_days, value=70), Stat(key=StatKey.cell, time=one_day, value=80), Stat(key=StatKey.cell, time=today, value=90), ] session.add_all(stats) session.commit() result = histogram(session, StatKey.cell, days=90) self.assertTrue([unixtime(one_day), 80] in result[0]) if two_months.month == 12: expected = date(two_months.year + 1, 1, 1) else: expected = date(two_months.year, two_months.month + 1, 1) self.assertTrue([unixtime(expected), 50] in result[0])
def test_global_stats(self): session = self.db_master_session day = util.utcnow().date() - timedelta(1) stats = [ Stat(key=StatKey.cell, time=day, value=6100000), Stat(key=StatKey.wifi, time=day, value=3212000), Stat(key=StatKey.unique_cell, time=day, value=3289900), Stat(key=StatKey.unique_ocid_cell, time=day, value=1523000), Stat(key=StatKey.unique_wifi, time=day, value=2009000), ] session.add_all(stats) session.commit() result = global_stats(session) self.assertDictEqual( result, { 'cell': '6.10', 'unique_cell': '3.28', 'wifi': '3.21', 'unique_wifi': '2.00', 'unique_ocid_cell': '1.52', })
def add_stat(session, stat_key, day, value): todays_stat = get_stat(session, stat_key, exact=True, date=day) if todays_stat: return yesterday = day - timedelta(days=1) before = get_stat(session, stat_key, exact=False, date=yesterday) old_value = 0 if before is not None: old_value = int(before.value) stat = Stat(key=stat_key, time=day, value=old_value + int(value)) session.add(stat)
def test_global_stats_missing_today(self): session = self.db_master_session day = util.utcnow().date() - timedelta(1) yesterday = day - timedelta(days=1) stats = [ Stat(key=StatKey.cell, time=yesterday, value=5000000), Stat(key=StatKey.cell, time=day, value=6000000), Stat(key=StatKey.wifi, time=day, value=3000000), Stat(key=StatKey.unique_cell, time=yesterday, value=4000000), ] session.add_all(stats) session.commit() result = global_stats(session) self.assertDictEqual( result, { 'cell': '6.00', 'unique_cell': '4.00', 'wifi': '3.00', 'unique_wifi': '0.00', 'unique_ocid_cell': '0.00', })
def test_stats_wifi_json(self, app, session): today = util.utcnow().date() first_of_month = timegm(today.replace(day=1).timetuple()) * 1000 session.add(Stat(key=StatKey.unique_wifi, time=today, value=2)) session.commit() result = app.get("/stats_wifi.json", status=200) assert result.json == { "series": [{ "data": [[first_of_month, 2]], "title": "MLS WiFi" }] } second_result = app.get("/stats_wifi.json", status=200) assert second_result.json == result.json
def test_stats_wifi_json(self): yesterday = util.utcnow().date() - timedelta(1) self.session.add( Stat(key=StatKey.unique_wifi, time=yesterday, value=2)) self.session.commit() result = self.app.get('/stats_wifi.json', status=200) self.assertEqual( result.json, {'series': [ {'data': [[timegm(yesterday.timetuple()) * 1000, 2]], 'title': 'MLS WiFi'}, ]} ) second_result = self.app.get('/stats_wifi.json', status=200) self.assertEqual(second_result.json, result.json)
def test_stats_wifi_json(self, app, session): today = util.utcnow().date() first_of_month = timegm(today.replace(day=1).timetuple()) * 1000 session.add(Stat(key=StatKey.unique_wifi, time=today, value=2)) session.commit() result = app.get('/stats_wifi.json', status=200) assert (result.json == { 'series': [ { 'data': [[first_of_month, 2]], 'title': 'MLS WiFi' }, ] }) second_result = app.get('/stats_wifi.json', status=200) assert second_result.json == result.json
def test_stats(self, session, session_tracker, views): today = util.utcnow().date() stats = [ Stat(key=StatKey.blue, time=today, value=2200000), Stat(key=StatKey.cell, time=today, value=2000000), Stat(key=StatKey.wifi, time=today, value=2000000), Stat(key=StatKey.unique_blue, time=today, value=1500000), Stat(key=StatKey.unique_cell, time=today, value=1000000), Stat(key=StatKey.unique_wifi, time=today, value=2000000), ] session.add_all(stats) session.commit() session_tracker(1) result = views.stats_view() session_tracker(2) assert result['page_title'] == 'Statistics' assert (result['metrics1'] == [ { 'name': 'Bluetooth Networks', 'value': '1.50' }, { 'name': 'Bluetooth Observations', 'value': '2.20' }, { 'name': 'Wifi Networks', 'value': '2.00' }, { 'name': 'Wifi Observations', 'value': '2.00' }, ]) assert (result['metrics2'] == [ { 'name': 'MLS Cells', 'value': '1.00' }, { 'name': 'MLS Cell Observations', 'value': '2.00' }, ]) second_result = views.stats_view() assert second_result == result # no additional DB query was done session_tracker(2)
def test_stats(self, session, session_tracker, views): today = util.utcnow().date() stats = [ Stat(key=StatKey.blue, time=today, value=2200000), Stat(key=StatKey.cell, time=today, value=2000000), Stat(key=StatKey.wifi, time=today, value=2000000), Stat(key=StatKey.unique_blue, time=today, value=1500000), Stat(key=StatKey.unique_cell, time=today, value=1000000), Stat(key=StatKey.unique_wifi, time=today, value=2000000), ] session.add_all(stats) session.commit() session_tracker(1) result = views.stats_view() session_tracker(2) assert result["page_title"] == "Statistics" assert result["metrics1"] == [ { "name": "Bluetooth Networks", "value": "1.50" }, { "name": "Bluetooth Observations", "value": "2.20" }, { "name": "Wifi Networks", "value": "2.00" }, { "name": "Wifi Observations", "value": "2.00" }, ] assert result["metrics2"] == [ { "name": "MLS Cells", "value": "1.00" }, { "name": "MLS Cell Observations", "value": "2.00" }, ] second_result = views.stats_view() assert second_result == result # no additional DB query was done session_tracker(2)
def test_global_stats(self, session): day = util.utcnow().date() - timedelta(1) stats = [ Stat(key=StatKey.blue, time=day, value=2200000), Stat(key=StatKey.cell, time=day, value=6100000), Stat(key=StatKey.wifi, time=day, value=3212000), Stat(key=StatKey.unique_blue, time=day, value=1100000), Stat(key=StatKey.unique_cell, time=day, value=3289900), Stat(key=StatKey.unique_wifi, time=day, value=2009000), ] session.add_all(stats) session.commit() result = global_stats(session) assert (result == { 'blue': '2.20', 'unique_blue': '1.10', 'cell': '6.10', 'unique_cell': '3.28', 'wifi': '3.21', 'unique_wifi': '2.00', })
def test_global_stats(self, session): day = util.utcnow().date() - timedelta(1) stats = [ Stat(key=StatKey.blue, time=day, value=2200000), Stat(key=StatKey.cell, time=day, value=6100000), Stat(key=StatKey.wifi, time=day, value=3212000), Stat(key=StatKey.unique_blue, time=day, value=1100000), Stat(key=StatKey.unique_cell, time=day, value=3289900), Stat(key=StatKey.unique_wifi, time=day, value=2009000), ] session.add_all(stats) session.commit() result = global_stats(session) assert result == { "blue": "2.20", "unique_blue": "1.10", "cell": "6.10", "unique_cell": "3.28", "wifi": "3.21", "unique_wifi": "2.00", }
def test_histogram(self, session): today = util.utcnow().date() one_day = today - timedelta(days=1) two_days = today - timedelta(days=2) one_month = today - timedelta(days=35) two_months = today - timedelta(days=70) long_ago = today - timedelta(days=100) stats = [ Stat(key=StatKey.cell, time=long_ago, value=40), Stat(key=StatKey.cell, time=two_months, value=50), Stat(key=StatKey.cell, time=one_month, value=60), Stat(key=StatKey.cell, time=two_days, value=70), Stat(key=StatKey.cell, time=one_day, value=80), Stat(key=StatKey.cell, time=today, value=90), ] session.add_all(stats) session.commit() result = histogram(session, StatKey.cell, days=90) first_of_month = today.replace(day=1) assert [unixtime(first_of_month), 90] in result[0] expected = date(two_months.year, two_months.month, 1) assert [unixtime(expected), 50] in result[0]
def check_stat(self, stat_key, time, value): hashkey = Stat.to_hashkey(key=stat_key, time=time) stat = Stat.getkey(self.session, hashkey) self.assertEqual(stat.value, value)