Esempio n. 1
0
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
Esempio n. 2
0
    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)
Esempio n. 3
0
    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)