def get(self): """Handle a GET request.""" # pylint: disable=unexpected-keyword-arg # Memoize all project and job names. _ = data_handler.get_all_project_names(__memoize_force__=True) _ = data_handler.get_all_job_type_names(__memoize_force__=True) # Memoize both variants of get_all_fuzzer_names_including_children. _ = data_handler.get_all_fuzzer_names_including_children( include_parents=True, __memoize_force__=True) _ = data_handler.get_all_fuzzer_names_including_children( __memoize_force__=True) # Memoize expensive testcase attribute calls. for testcase_id in data_handler.get_open_testcase_id_iterator(): try: testcase = data_handler.get_testcase_by_id(testcase_id) except errors.InvalidTestcaseError: # Already deleted. continue blobs.get_blob_size(testcase.fuzzed_keys) blobs.get_blob_size(testcase.minimized_keys) self.response.headers['Content-Type'] = 'text/plain' self.response.out.write('OK') self.response.set_status(200)
def get(self): """Handle a GET request.""" # pylint: disable=unexpected-keyword-arg _ = data_handler.get_all_project_names(__memoize_force__=True) _ = data_handler.get_all_job_type_names(__memoize_force__=True) # Memorize both variants of get_all_fuzzer_names_including_children. _ = data_handler.get_all_fuzzer_names_including_children( include_parents=True, __memoize_force__=True) _ = data_handler.get_all_fuzzer_names_including_children( __memoize_force__=True) self.response.headers['Content-Type'] = 'text/plain' self.response.out.write('OK') self.response.set_status(200)
def get_top_crashes_for_all_projects_and_platforms(): """Return top crashes for all projects and platforms.""" last_hour = crash_stats.get_last_successful_hour() if not last_hour: # No crash stats available, skip. return {} jobs, platforms = get_jobs_and_platforms_for_top_crashes() project_names = data_handler.get_all_project_names() top_crashes_by_project_and_platform_map = {} for project_name in project_names: top_crashes_by_project_and_platform_map[project_name] = {} for platform in platforms: where_clause = ( 'crash_type NOT IN UNNEST(%s) AND ' 'crash_state NOT IN UNNEST(%s) AND ' 'job_type IN UNNEST(%s) AND ' 'platform LIKE %s AND ' 'project = %s' % (json.dumps(TOP_CRASHES_IGNORE_CRASH_TYPES), json.dumps(TOP_CRASHES_IGNORE_CRASH_STATES), json.dumps(list(jobs)), json.dumps(platform.lower() + '%'), json.dumps(project_name))) for keyword in TOP_CRASHES_IGNORE_CRASH_STATE_KEYWORDS: where_clause += ' AND crash_state NOT LIKE "%%%s%%"' % keyword _, rows = crash_stats.get(end=last_hour, block='day', days=TOP_CRASHES_DAYS_LOOKBEHIND, group_by='platform', where_clause=where_clause, group_having_clause='', sort_by='total_count', offset=0, limit=TOP_CRASHES_LIMIT) if rows: rows = [ s for s in rows if s['totalCount'] >= TOP_CRASHES_MIN_THRESHOLD ] top_crashes_by_project_and_platform_map[project_name][platform] = ( rows or []) return top_crashes_by_project_and_platform_map
def get_top_crashes_for_all_projects_and_platforms(): """Return top crashes for all projects and platforms.""" last_hour = crash_stats.get_last_successful_hour() if not last_hour: # No crash stats available, skip. return {} jobs, platforms = get_jobs_and_platforms_for_top_crashes() project_names = data_handler.get_all_project_names() top_crashes_by_project_and_platform_map = {} for project_name in project_names: top_crashes_by_project_and_platform_map[project_name] = {} for platform in platforms: where_clause = ("crash_type NOT IN UNNEST(%s) AND " "crash_state NOT IN UNNEST(%s) AND " "job_type IN UNNEST(%s) AND " "platform LIKE %s AND " "project = %s" % ( json.dumps(TOP_CRASHES_IGNORE_CRASH_TYPES), json.dumps(TOP_CRASHES_IGNORE_CRASH_STATES), json.dumps(list(jobs)), json.dumps(platform.lower() + "%"), json.dumps(project_name), )) _, rows = crash_stats.get( end=last_hour, block="day", days=TOP_CRASHES_DAYS_LOOKBEHIND, group_by="platform", where_clause=where_clause, group_having_clause="", sort_by="total_count", offset=0, limit=TOP_CRASHES_LIMIT, ) if rows: rows = [s for s in rows if s["totalCount"] >= TOP_CRASHES_MIN_THRESHOLD] top_crashes_by_project_and_platform_map[project_name][ platform] = rows or [] return top_crashes_by_project_and_platform_map
def get(self): """Get and render the testcase list in HTML.""" result, params = get_result(self) field_values = { 'projects': data_handler.get_all_project_names(), 'fuzzers': data_handler.get_all_fuzzer_names_including_children( include_parents=True), 'jobs': data_handler.get_all_job_type_names(), 'shouldShowImpact': utils.is_chromium() } self.render('testcase-list.html', { 'fieldValues': field_values, 'result': result, 'params': params })
def get(self): """Handle a GET request.""" project = request.get('project') if access.has_access(): # User is an internal user of ClusterFuzz (eg: ClusterFuzz developer). # Show all projects in the list, since this allows user to pick another # project as needed. projects_list = data_handler.get_all_project_names() # Filter fuzzers and job list if a project is provided. fuzzers_list = ( data_handler.get_all_fuzzer_names_including_children( include_parents=True, project=project)) jobs_list = data_handler.get_all_job_type_names(project=project) else: # User is an external user of ClusterFuzz (eg: non-Chrome dev who # submitted a fuzzer or someone with a project in OSS-Fuzz). user_email = helpers.get_user_email() # TODO(aarya): Filter fuzzer and job if |project| is provided. fuzzers_list = sorted( external_users.allowed_fuzzers_for_user(user_email, include_from_jobs=True, include_parents=True)) if not fuzzers_list: # User doesn't actually have access to any fuzzers. raise helpers.AccessDeniedException( "You don't have access to any fuzzers.") jobs_list = sorted( external_users.allowed_jobs_for_user(user_email)) projects_list = sorted( {data_handler.get_project_name(job) for job in jobs_list}) result = { 'projects': projects_list, 'fuzzers': fuzzers_list, 'jobs': jobs_list, } return self.render_json(result)
def get(self): """Get and render the crash stats in HTML.""" result, params = get_result(self) field_values = { 'fuzzers': data_handler.get_all_fuzzer_names_including_children( include_parents=True), 'jobs': data_handler.get_all_job_type_names(), 'platforms': get_all_platforms(), 'projects': data_handler.get_all_project_names(), 'minHour': crash_stats_common.get_min_hour(), 'maxHour': crash_stats_common.get_max_hour() } self.render('crash-stats.html', { 'result': result, 'fieldValues': field_values, 'params': params })