def get_paths(days, product='Firefox'): last_day = utils.utc_today() path = get_path(last_day, product) if not exists(path): last_day -= timedelta(1) return [get_path(last_day - timedelta(i), product) for i in range(0, days)]
def download_crashes(days, product='Firefox'): global SCHEMA_VERSION if not os.path.exists('crashclustering_data'): os.mkdir('crashclustering_data') clean_old_data() write_json('crashclustering_data/schema_version', [SCHEMA_VERSION]) for i in range(0, days): download_day_crashes(utils.utc_today() - timedelta(i), product)
def clean_old_data(): try: old_schema = read_json('crashclustering_data/schema_version')[0] except IOError: old_schema = '0' MAX_AGE = 30 for root, dirs, files in os.walk('crashclustering_data'): for name in files: if 'schema_version' not in name and ( old_schema != SCHEMA_VERSION or dateutil.parser.parse(name[-15:-5]).date() < utils.utc_today() - timedelta(MAX_AGE)): os.remove(os.path.join('crashclustering_data', name))
def get_top(number, channel, days=3, product='Firefox'): versions = get_versions(channel, product) url = 'https://crash-stats.mozilla.com/api/SuperSearch' params = { 'product': product, 'date': ['>=' + str(utils.utc_today() - timedelta(days) + timedelta(1))], 'version': versions, '_results_number': 0, '_facets_size': number, } r = utils.get_with_retries(url, params=params) if r.status_code != 200: print(r.text) raise Exception(r) return [signature['term'] for signature in r.json()['facets']['signature']]
def test_utc_today_returns_today_date(self): self.assertEqual(utils.utc_today(), datetime.now().date())