def testLoadOneValue(self):
     perf_uploader.OutputPerfValue(self.file_name, 'desc', 41, 'units')
     entries = perf_uploader.LoadPerfValues(self.file_name)
     self.assertEqual(1, len(entries))
     self.assertEqual(41, entries[0].value)
     self.assertEqual('desc', entries[0].description)
     self.assertEqual(True, entries[0].higher_is_better)
Beispiel #2
0
    def SendPerfValues(self, test_results_dir):
        """Gather all perf values in |test_results_dir| and send them to chromeperf.

    The uploading will be retried 3 times for each file.

    Args:
      test_results_dir: A path to the directory with perf files.
    """
        # A dict of list of perf values, keyed by test name.
        perf_entries = collections.defaultdict(list)
        for root, _, filenames in os.walk(test_results_dir):
            for relative_name in filenames:
                if not image_test_lib.IsPerfFile(relative_name):
                    continue
                full_name = os.path.join(root, relative_name)
                entries = perf_uploader.LoadPerfValues(full_name)
                test_name = image_test_lib.ImageTestCase.GetTestName(
                    relative_name)
                perf_entries[test_name].extend(entries)

        platform_name = self._run.bot_id
        try:
            cros_ver = self._run.GetVersionInfo().VersionString()
        except cbuildbot_run.VersionNotSetError:
            logging.error('Could not obtain version info. '
                          'Failed to upload perf results.')
            return

        chrome_ver = self._run.DetermineChromeVersion()
        for test_name, perf_values in perf_entries.items():
            self._UploadPerfValues(perf_values,
                                   platform_name,
                                   test_name,
                                   cros_version=cros_ver,
                                   chrome_version=chrome_ver)
 def testLoadTwoValues(self):
     perf_uploader.OutputPerfValue(self.file_name, 'desc', 41, 'units')
     perf_uploader.OutputPerfValue(self.file_name, 'desc2', 42, 'units2')
     entries = perf_uploader.LoadPerfValues(self.file_name)
     self.assertEqual(2, len(entries))
     self.assertEqual(41, entries[0].value)
     self.assertEqual(42, entries[1].value)
     self.assertEqual('desc2', entries[1].description)
     self.assertEqual(None, entries[1].graph)
 def testDryRun(self):
     """Make sure dryrun mode doesn't upload."""
     self.send_func.side_effect = AssertionError('dryrun should not upload')
     perf_uploader.OutputPerfValue(self.file_name, 'desc1', 40, 'unit')
     perf_values = perf_uploader.LoadPerfValues(self.file_name)
     perf_uploader.UploadPerfValues(perf_values,
                                    'platform',
                                    'TestName',
                                    cros_version='cros',
                                    chrome_version='chrome',
                                    dry_run=True)
 def testCustomDashboard(self):
     """Verify we can set data to different dashboards."""
     perf_uploader.OutputPerfValue(self.file_name, 'desc1', 42, 'unit')
     perf_values = perf_uploader.LoadPerfValues(self.file_name)
     perf_uploader.UploadPerfValues(perf_values,
                                    'platform',
                                    'TestName',
                                    cros_version='cros',
                                    chrome_version='chrome',
                                    dashboard='http://localhost')
     request = self.urlopen.call_args[0][0]
     self.assertEqual('http://localhost/add_point', request.get_full_url())
 def testRevision(self):
     """Verify revision is accepted over cros/chrome version."""
     perf_uploader.OutputPerfValue(self.file_name, 'desc1', 42, 'unit')
     perf_values = perf_uploader.LoadPerfValues(self.file_name)
     perf_uploader.UploadPerfValues(perf_values,
                                    'platform',
                                    'TestName',
                                    revision=12345)
     positional_args, _ = self.send_func.call_args
     first_param = positional_args[0]
     data = json.loads(first_param['data'])
     entry = data[0]
     self.assertEqual(12345, entry['revision'])
Beispiel #7
0
def main(argv):
  parser = GetParser()
  opts = parser.parse_args(argv)
  opts.Freeze()

  logging.info('Uploading results to %s', opts.url)
  logging.info('Master name: %s', opts.master)
  logging.info('Test name: %s', opts.test)

  with tempfile.NamedTemporaryFile() as output:
    perf_uploader.OutputPerfValue(
        output.name,
        opts.description,
        float(opts.data),
        opts.units,
        graph=opts.graph,
        stdio_uri=opts.stdio_uri)
    perf_values = perf_uploader.LoadPerfValues(output.name)

  logging.debug('Uploading:')
  for value in perf_values:
    logging.debug('  %s', value)

  perf_uploader.UploadPerfValues(
      perf_values,
      opts.bot,
      opts.test,
      revision=opts.revision,
      cros_version=opts.cros_version,
      chrome_version=opts.chrome_version,
      dashboard=opts.url,
      master_name=opts.master,
      test_prefix='',
      platform_prefix='',
      dry_run=opts.dry_run)

  data_name = opts.graph if opts.graph else opts.description
  args = {
      'masters': opts.master,
      'tests': '%s/%s' % (opts.test, data_name),
      'bots': opts.bot,
  }
  view_url = os.path.join(opts.url, 'report?%s' % urllib.parse.urlencode(args))
  logging.info('View results at %s', view_url)
  logging.info('Note: To make tests public, visit %s',
               os.path.join(opts.url, 'change_internal_only'))
  logging.info('Note: To update the test list, visit %s',
               os.path.join(opts.url, 'update_test_suites'))
    def _SendPerfValues(buildroot, sdk_tarball, buildbot_uri_log, version,
                        platform_name):
        """Generate & upload perf data for the build"""
        perf_path = SdkPerfPath(buildroot)
        test_name = 'sdk'
        units = 'bytes'

        # Make sure the file doesn't contain previous data.
        osutils.SafeUnlink(perf_path)

        common_kwargs = {
            'higher_is_better': False,
            'graph': 'cros-sdk-size',
            'stdio_uri': buildbot_uri_log,
        }

        sdk_size = os.path.getsize(sdk_tarball)
        perf_uploader.OutputPerfValue(perf_path, 'base', sdk_size, units,
                                      **common_kwargs)

        for tarball in glob.glob(
                os.path.join(buildroot, constants.DEFAULT_CHROOT_DIR,
                             constants.SDK_TOOLCHAINS_OUTPUT, '*.tar.*')):
            name = os.path.basename(tarball).rsplit('.', 2)[0]
            size = os.path.getsize(tarball)
            perf_uploader.OutputPerfValue(perf_path, name, size, units,
                                          **common_kwargs)
            perf_uploader.OutputPerfValue(perf_path, 'base_plus_%s' % name,
                                          sdk_size + size, units,
                                          **common_kwargs)

        # Due to limitations in the perf dashboard, we have to create an integer
        # based on the current timestamp.  This field only accepts integers, and
        # the perf dashboard accepts this or CrOS+Chrome official versions.
        revision = int(version.replace('.', ''))
        perf_values = perf_uploader.LoadPerfValues(perf_path)
        retry_util.RetryException(perf_uploader.PerfUploadingError,
                                  3,
                                  perf_uploader.UploadPerfValues,
                                  perf_values,
                                  platform_name,
                                  test_name,
                                  revision=revision)
 def testTwoEntriesOfSameTest(self):
     """Upload one test, two perf values."""
     perf_uploader.OutputPerfValue(self.file_name, 'desc1', 40, 'unit')
     perf_uploader.OutputPerfValue(self.file_name, 'desc1', 42, 'unit')
     perf_values = perf_uploader.LoadPerfValues(self.file_name)
     perf_uploader.UploadPerfValues(perf_values,
                                    'platform',
                                    'TestName',
                                    cros_version='cros',
                                    chrome_version='chrome')
     positional_args, _ = self.send_func.call_args
     first_param = positional_args[0]
     data = json.loads(first_param['data'])
     self.assertEqual(1, len(data))
     entry = data[0]
     self.assertEqual('unit', entry['units'])
     # Average of 40 and 42
     self.assertEqual(41, entry['value'])
     # Standard deviation sqrt(2)
     self.assertEqual(1.4142, entry['error'])
 def testOneEntry(self):
     perf_uploader.OutputPerfValue(self.file_name, 'desc1', 42, 'unit')
     perf_values = perf_uploader.LoadPerfValues(self.file_name)
     perf_uploader.UploadPerfValues(perf_values,
                                    'platform',
                                    'TestName',
                                    cros_version='cros',
                                    chrome_version='chrome')
     request = self.urlopen.call_args[0][0]
     self.assertEqual(
         os.path.join(perf_uploader.DASHBOARD_URL, 'add_point'),
         request.get_full_url())
     data = request.data
     data = urllib.parse.parse_qs(data)[b'data']
     entries = [json.loads(x) for x in data]
     entry = entries[0][0]
     self.assertEqual('cros',
                      entry['supplemental_columns']['r_cros_version'])
     self.assertEqual(42, entry['value'])
     self.assertEqual('cbuildbot.TestName/desc1', entry['test'])
     self.assertEqual('unit', entry['units'])
 def testTwoTests(self):
     """Upload two tests, one perf value each."""
     perf_uploader.OutputPerfValue(self.file_name, 'desc1', 40, 'unit')
     perf_uploader.OutputPerfValue(self.file_name, 'desc2', 42, 'unit')
     perf_values = perf_uploader.LoadPerfValues(self.file_name)
     perf_uploader.UploadPerfValues(perf_values,
                                    'platform',
                                    'TestName',
                                    cros_version='cros',
                                    chrome_version='chrome')
     positional_args, _ = self.send_func.call_args
     first_param = positional_args[0]
     data = json.loads(first_param['data'])
     self.assertEqual(2, len(data))
     data = sorted(data, key=lambda x: x['test'])
     entry = data[0]
     self.assertEqual(40, entry['value'])
     self.assertEqual(0, entry['error'])
     entry = data[1]
     self.assertEqual(42, entry['value'])
     self.assertEqual(0, entry['error'])
 def testOneEntry(self):
     """Upload one perf value."""
     perf_uploader.OutputPerfValue(self.file_name, 'desc1', 42, 'unit')
     perf_values = perf_uploader.LoadPerfValues(self.file_name)
     perf_uploader.UploadPerfValues(perf_values,
                                    'platform',
                                    'TestName',
                                    cros_version='cros',
                                    chrome_version='chrome')
     positional_args, _ = self.send_func.call_args
     first_param = positional_args[0]
     data = json.loads(first_param['data'])
     self.assertEqual(1, len(data))
     entry = data[0]
     self.assertEqual('unit', entry['units'])
     self.assertEqual('cros',
                      entry['supplemental_columns']['r_cros_version'])
     self.assertEqual('chrome',
                      entry['supplemental_columns']['r_chrome_version'])
     self.assertEqual('cros-platform', entry['bot'])
     self.assertEqual(42, entry['value'])
     self.assertEqual(0, entry['error'])
 def testEmptyFile(self):
     osutils.WriteFile(self.file_name, '')
     entries = perf_uploader.LoadPerfValues(self.file_name)
     self.assertEqual(0, len(entries))