Example #1
0
def test_get_measure_summary_high_beta(prepopulated_version_cache, base_datapoint_time,
                                       initial_data):
    (application_name, platform_name, channel_name, measure_name) = (
        'firefox', 'linux', 'release', 'main_crashes')
    for (version, buildid, delta) in [('55.0b1', '20170629075044', datetime.timedelta()),
                                      ('55.0b2', '20180629075044', datetime.timedelta(hours=1)),
                                      ('55.0b10', '20190629075044', datetime.timedelta(hours=2))]:
        latest_timestamp = _generate_fake_data(application_name, platform_name,
                                               channel_name, measure_name,
                                               buildid, version,
                                               base_datapoint_time + delta, 2)

    assert get_measure_summary(
        application_name, platform_name, channel_name, measure_name) == {
            "versions": [
                {
                    "version": "55.0b10",
                    "adjustedCount": 6,
                    "count": 6,
                    "adjustedRate": 2000.0,
                    "rate": 2000.0,
                    "fieldDuration": 3600
                },
                {
                    "version": "55.0b2",
                    "adjustedCount": 6,
                    "count": 6,
                    "adjustedRate": 2000.0,
                    "rate": 2000.0,
                    "fieldDuration": 3600
                },
                {
                    "version": "55.0b1",
                    "adjustedCount": 6,
                    "count": 6,
                    "adjustedRate": 2000.0,
                    "rate": 2000.0,
                    "fieldDuration": 3600
                },
                {
                    "version": "55",
                    "adjustedCount": 18,
                    "adjustedRate": 2000.0,
                    "count": 18,
                    "rate": 2000.0,
                    "fieldDuration": 10800
                }
            ],
            "lastUpdated": latest_timestamp
        }
def test_get_measure_summary(fake_measure_data, prepopulated_version_cache):
    from missioncontrol.etl.measuresummary import get_measure_summary
    assert get_measure_summary('linux', 'release', 'main_crashes') == {
        'lastUpdated': datetime.datetime(2017, 7, 1, 12, 0, tzinfo=tzutc()),
        'latest': {
            'median': 625.0,
            'stdev': 2562.754,
            'usageHours': 56.0,
            'version': '55.0.1'
        },
        'previous': {
            'median': 625.0,
            'stdev': 2562.754,
            'usageHours': 56.0,
            'version': None
        }
    }
Example #3
0
def test_get_measure_summary_recent_releases(prepopulated_version_cache, base_datapoint_time,
                                             initial_data):
    (application_name, platform_name, measure_name) = ('firefox', 'linux',
                                                       'main_crashes')
    for (channel_name, versions, expected_versions) in (
            ('release', ['55.0.2', '55.0.1', '54.0.1', '54.0'],
             ['55.0.2', '55.0.1', '55', '54']),
            ('beta', ['55.0b6', '55.0b5', '55.0b4', '55.0b3', '54.0b8', '54.0b7'],
             ['55.0b6', '55.0b5', '55.0b4', '55', '54']),
            ('nightly', ['56.0a1', '55.0a1', '54.0a1'], ['56', '55', '54'])):
        offsets = [datetime.timedelta(hours=i) for i in range(len(versions))]
        for (version, offset) in zip(reversed(versions), offsets):
            _generate_fake_data(application_name, platform_name,
                                channel_name, measure_name,
                                '20150629075044', version,
                                base_datapoint_time + offset, 2)
        measure_summary = get_measure_summary(
            application_name, platform_name, channel_name, measure_name)
        assert [version['version'] for version in measure_summary['versions']] == expected_versions
Example #4
0
def test_measure_summary_incorporated(client, monkeypatch,
                                      prepopulated_version_cache,
                                      fake_measure_data):
    # create a summary from the fake data we added, verify it's there
    cache.set(
        get_measure_summary_cache_key('linux', 'release', 'main_crashes'),
        get_measure_summary('linux', 'release', 'main_crashes'), None)
    resp = client.get(reverse('channel-platform-summary'), {
        'platform': 'linux',
        'channel': 'release',
        'measure': 'main_crashes'
    })
    assert resp.status_code == 200
    assert resp.json() == {
        'summaries': [{
            'channel':
            'release',
            'platform':
            'linux',
            'measures': [{
                'lastUpdated': '2017-07-01T12:00:00Z',
                'latest': {
                    'median': 625.0,
                    'stdev': 2562.754,
                    'usageHours': 56.0,
                    'version': '55.0.1'
                },
                'name': 'main_crashes',
                'previous': {
                    'median': 625.0,
                    'stdev': 2562.754,
                    'usageHours': 56.0,
                    'version': None
                }
            }]
        }]
    }
Example #5
0
def test_get_measure_summary(prepopulated_version_cache, base_datapoint_time,
                             initial_data, num_datapoints):
    '''
    Test getting the measure summary with a small number of datapoints

    Small number of endpoints are edge cases of the summarization algorithm
    '''
    (application_name, platform_name, channel_name, measure_name) = (
        'firefox', 'linux', 'release', 'main_crashes')
    latest_timestamp = _generate_fake_data(application_name, platform_name,
                                           channel_name, measure_name,
                                           '20170629075044', '55.0',
                                           base_datapoint_time,
                                           num_datapoints)

    if num_datapoints == 0:
        assert get_measure_summary(
            application_name, platform_name, channel_name, measure_name) is None
    elif num_datapoints == 1:
        assert get_measure_summary(
            application_name, platform_name, channel_name, measure_name) is None
    elif num_datapoints == 2:  # num_datapoints == 2
        assert get_measure_summary(
            application_name, platform_name, channel_name, measure_name) == {
                "versions": [
                    {
                        "version": "55.0",
                        "adjustedCount": 6,
                        "count": 6,
                        "adjustedRate": 2000.0,
                        "rate": 2000.0,
                        "fieldDuration": 3600
                    },
                    {
                        "version": "55",
                        "adjustedCount": 6,
                        "adjustedRate": 2000.0,
                        "count": 6,
                        "rate": 2000.0,
                        "fieldDuration": 3600
                    }
                ],
                "lastUpdated": latest_timestamp
            }
    else:  # num_datapoints == 100
        assert get_measure_summary(
            application_name, platform_name, channel_name, measure_name) == {
                "versions": [
                    {
                        "version": "55.0",
                        "adjustedCount": 10305,
                        "count": 10305,
                        "adjustedRate": 520.23,
                        "rate": 520.23,
                        "fieldDuration": 716400
                    },
                    {
                        "version": "55",
                        "adjustedCount": 10305,
                        "adjustedRate": 520.23,
                        "count": 10305,
                        "rate": 520.23,
                        "fieldDuration": 716400
                    }
                ],
                "lastUpdated": latest_timestamp
            }
Example #6
0
def test_measure_summary_incorporated(client, monkeypatch,
                                      prepopulated_version_cache,
                                      fake_measure_data):
    # create a summary from the fake data we added, verify it's there
    cache.set(
        get_measure_summary_cache_key('firefox', 'linux', 'release',
                                      'main_crashes'),
        get_measure_summary('firefox', 'linux', 'release', 'main_crashes'),
        None)
    resp = client.get(reverse('channel-platform-summary'), {
        'platform': 'linux',
        'channel': 'release'
    })
    assert resp.status_code == 200
    assert resp.json() == {
        'summaries': [{
            'application':
            'firefox',
            'channel':
            'release',
            'platform':
            'linux',
            'latestVersionFieldDuration':
            600,
            'latestVersionSeen':
            '55.0.1',
            'expectedMeasures':
            list(
                Measure.objects.filter(
                    channels=Channel.objects.filter(name='release'),
                    application__name='firefox',
                    platform__name='linux').values_list('name', flat=True)),
            'measures': [{
                'name':
                'main_crashes',
                'lastUpdated':
                '2017-07-01T12:00:00Z',
                'versions': [{
                    'adjustedCount': 120,
                    'adjustedRate': 2142.86,
                    'count': 120,
                    'fieldDuration': 600,
                    'rate': 2142.86,
                    'version': '55.0.1'
                }, {
                    'adjustedCount': 240,
                    'adjustedRate': 2142.86,
                    'count': 240,
                    'fieldDuration': 600,
                    'rate': 2142.86,
                    'version': '55'
                }]
            }]
        }]
    }
    # verify that the measure / summary disappears when we disable it
    Measure.objects.all().update(enabled=False)
    resp = client.get(reverse('channel-platform-summary'), {
        'platform': 'linux',
        'channel': 'release'
    })
    assert resp.status_code == 200
    assert resp.json() == {'summaries': []}
Example #7
0
def test_get_measure_summary(base_datapoint_time, initial_data,
                             num_datapoints):
    '''
    Test getting the measure summary with a small number of datapoints

    Small number of endpoints are edge cases of the summarization algorithm
    '''
    (platform_name, channel_name, measure_name) = ('linux', 'release',
                                                   'main_crashes')
    build = Build.objects.create(
        platform=Platform.objects.get(name=platform_name),
        channel=Channel.objects.get(name=channel_name),
        build_id='20170629075044',
        version='55.0')
    measure = Measure.objects.get(name=measure_name,
                                  platform__name=platform_name)
    series = Series.objects.create(build=build, measure=measure)
    latest_timestamp = None
    for i in range(num_datapoints):
        latest_timestamp = base_datapoint_time + datetime.timedelta(hours=i)
        (value, usage_hours, client_count) = (float(i), float(i + 1), i)
        Datum.objects.create(series=series,
                             timestamp=latest_timestamp,
                             value=value,
                             usage_hours=usage_hours,
                             client_count=client_count)

    if num_datapoints == 0:
        assert get_measure_summary(platform_name, channel_name,
                                   measure_name) == {
                                       "latest": {
                                           "version": None,
                                           "median": None,
                                           "stdev": 0.0,
                                           "usageHours": 0.0
                                       },
                                       "previous": {
                                           "version": None,
                                           "median": None,
                                           "stdev": 0.0,
                                           "usageHours": 0.0
                                       },
                                       "lastUpdated": None
                                   }
    elif num_datapoints == 1:
        assert get_measure_summary(platform_name, channel_name,
                                   measure_name) == {
                                       "latest": {
                                           "version": "55.0",
                                           "median": 0.0,
                                           "stdev": 0.0,
                                           "usageHours": 1.0
                                       },
                                       "previous": {
                                           "version": None,
                                           "median": None,
                                           "stdev": 0.0,
                                           "usageHours": 0.0
                                       },
                                       "lastUpdated": latest_timestamp
                                   }
    else:  # num_datapoints == 2
        assert get_measure_summary(platform_name, channel_name,
                                   measure_name) == {
                                       "latest": {
                                           "version": "55.0",
                                           "median": 250.0,
                                           "stdev": 353.553,
                                           "usageHours": 3.0
                                       },
                                       "previous": {
                                           "version": None,
                                           "median": None,
                                           "stdev": 0.0,
                                           "usageHours": 0.0
                                       },
                                       "lastUpdated": latest_timestamp
                                   }