Esempio n. 1
0
 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)
Esempio n. 2
0
    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]]]
Esempio n. 4
0
 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]]])
Esempio n. 5
0
    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')
Esempio n. 6
0
    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'
Esempio n. 7
0
    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',
        })
Esempio n. 9
0
    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')
Esempio n. 10
0
    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)
Esempio n. 11
0
    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)
Esempio n. 12
0
    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')
Esempio n. 13
0
    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)
Esempio n. 14
0
    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",
        }
Esempio n. 15
0
    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])
Esempio n. 16
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',
            })
Esempio n. 17
0
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)
Esempio n. 18
0
    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',
            })
Esempio n. 19
0
 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
Esempio n. 20
0
 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)
Esempio n. 23
0
    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',
        })
Esempio n. 25
0
    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]
Esempio n. 27
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)