def _get_performance_report(fuzzer_name, job_type, performance_report_data): """Return performance report.""" bucket_name = data_handler.get_value_from_job_definition_or_environment( job_type, 'FUZZ_LOGS_BUCKET') # Load performance data as JSON. performance_report = json.loads(performance_report_data) # Get logs directory path containing the analyzed logs. logs_directory = fuzzer_logs.get_logs_directory(bucket_name, fuzzer_name, job_type) # Add other display metadata in report. for issue in performance_report['issues']: # Linkify the examples column. # TODO(mmoroz): build this in polymer using dom-repeat. issue['examples'] = '<br/>'.join([ _get_link_html(logs_directory, log_relative_path) for log_relative_path in issue['examples'] ]) # Add the solutions column explicitly. issue['solutions'] = constants.ISSUE_TYPE_SOLUTIONS_MAP[issue['type']] return performance_report
def _get_logs_bucket_path(self, group_by, group_by_value): """Return logs bucket path.""" fuzzer = self.ctx.fuzzer job = self.ctx.single_job_or_none() date = None if group_by == QueryGroupBy.GROUP_BY_FUZZER: fuzzer = group_by_value elif group_by == QueryGroupBy.GROUP_BY_DAY: date = group_by_value if not fuzzer or not job: # We can only use the date if both fuzzer and job exist (since they come # before the date in the GCS path). return None elif group_by == QueryGroupBy.GROUP_BY_JOB: job = group_by_value else: return None if not fuzzer: # Fuzzer always needs to be specified (first component in GCS path). return None logs_bucket = self.ctx.get_logs_bucket(fuzzer_name=fuzzer, job_type=job) if not logs_bucket: return None return 'gs:/' + fuzzer_logs.get_logs_directory(logs_bucket, fuzzer, job, date)
def _get_logs_bucket_path(self, group_by, group_by_value): """Return logs bucket path.""" fuzzer = self.ctx.fuzzer job = self.ctx.single_job_or_none() date = None if group_by == QueryGroupBy.GROUP_BY_FUZZER: fuzzer = group_by_value elif group_by == QueryGroupBy.GROUP_BY_DAY: if not fuzzer: return None if not job: # If job isn't specified, we'll ignore the date and show the link to the # GCS directory containing all jobs for a given fuzz target, because job # name comes before the date in the GCS path. date = None else: date = group_by_value elif group_by == QueryGroupBy.GROUP_BY_JOB: job = group_by_value else: return None if not fuzzer: # Fuzzer always needs to be specified (first component in GCS path). return None logs_bucket = self.ctx.get_logs_bucket(fuzzer_name=fuzzer, job_type=job) if not logs_bucket: return None return 'gs:/' + fuzzer_logs.get_logs_directory(logs_bucket, fuzzer, job, date)