Ejemplo n.º 1
0
    def _generate_results_dict(self, timestamp, description, platform,
                               builder_name, build_number):
        revisions = {}
        for (name, path) in self._port.repository_paths():
            scm = SCMDetector(self._host.filesystem, self._host.executive
                              ).detect_scm_system(path) or self._host.scm()
            revision = scm.native_revision(path)
            revisions[name] = {
                'revision': revision,
                'timestamp': scm.timestamp_of_native_revision(path, revision)
            }

        meta_info = {
            'description':
            description,
            'buildTime':
            self._datetime_in_ES5_compatible_iso_format(self._utc_timestamp),
            'platform':
            platform,
            'revisions':
            revisions,
            'builderName':
            builder_name,
            'buildNumber':
            int(build_number) if build_number else None
        }

        contents = {'tests': {}}
        for key, value in meta_info.items():
            if value:
                contents[key] = value

        for metric in self._results:
            tests = contents['tests']
            path = metric.path()
            for i in range(0, len(path)):
                is_last_token = i + 1 == len(path)
                url = view_source_url('PerformanceTests/' +
                                      '/'.join(path[0:i + 1]))
                test_name = path[i]

                # FIXME: This is a temporary workaround for the fact perf dashboard doesn't support renaming tests.
                if test_name == 'Speedometer':
                    test_name = 'DoYouEvenBench'

                tests.setdefault(test_name, {'url': url})
                current_test = tests[test_name]
                if is_last_token:
                    current_test['url'] = view_source_url(
                        'PerformanceTests/' + metric.test_file_name())
                    current_test.setdefault('metrics', {})
                    assert metric.name() not in current_test['metrics']
                    test_results = {
                        'current': metric.grouped_iteration_values()
                    }
                    if metric.aggregator():
                        test_results['aggregators'] = [metric.aggregator()]
                    current_test['metrics'][metric.name()] = test_results
                else:
                    current_test.setdefault('tests', {})
                    tests = current_test['tests']

        return contents
Ejemplo n.º 2
0
 def initialize_scm(self, patch_directories=None):
     detector = SCMDetector(self.filesystem, self.executive)
     self._scm = detector.default_scm(patch_directories)
     self._checkout = Checkout(self.scm())
Ejemplo n.º 3
0
 def __init__(self, file_path, handle_style_error, filesystem=None, scm=None, platform=None):
     self._file_path = file_path
     self._handle_style_error = handle_style_error
     self._fs = filesystem or FileSystem()
     self._detector = scm or SCMDetector(self._fs, Executive()).detect_scm_system(self._fs.getcwd())
     self._platform = platform or sys.platform
Ejemplo n.º 4
0
    def upload_results(self, results_json_path, start_time, end_time):
        hostname = self._options.results_server_host
        if not hostname:
            return
        master_name = self._options.master_name
        builder_name = self._options.builder_name
        build_number = self._options.build_number
        build_slave = self._options.build_slave
        if not master_name or not builder_name or not build_number or not build_slave:
            _log.error(
                "--results-server-host was set, but --master-name, --builder-name, --build-number, or --build-slave was not. Not uploading JSON files."
            )
            return

        revisions = {}
        # FIXME: This code is duplicated in PerfTestRunner._generate_results_dict
        for (name, path) in self._port.repository_paths():
            scm = SCMDetector(self._port.host.filesystem,
                              self._port.host.executive).detect_scm_system(
                                  path) or self._port.host.scm()
            revision = scm.svn_revision(path)
            revisions[name] = {
                'revision': revision,
                'timestamp': scm.timestamp_of_revision(path, revision)
            }

        _log.info(
            "Uploading JSON files for master: %s builder: %s build: %s slave: %s to %s",
            master_name, builder_name, build_number, build_slave, hostname)

        attrs = [
            ('master', 'build.webkit.org' if master_name == 'webkit.org' else
             master_name),  # FIXME: Pass in build.webkit.org.
            ('builder_name', builder_name),
            ('build_number', build_number),
            ('build_slave', build_slave),
            ('revisions', json.dumps(revisions)),
            ('start_time', str(start_time)),
            ('end_time', str(end_time)),
        ]

        uploader = FileUploader("http://%s/api/report" % hostname, 360)
        try:
            response = uploader.upload_as_multipart_form_data(
                self._filesystem, [('results.json', results_json_path)], attrs)
            if not response:
                _log.error("JSON upload failed; no response returned")
                return

            if response.code != 200:
                _log.error("JSON upload failed, %d: '%s'" %
                           (response.code, response.read()))
                return

            response_text = response.read()
            try:
                response_json = json.loads(response_text)
            except ValueError, error:
                _log.error(
                    "JSON upload failed; failed to parse the response: %s",
                    response_text)
                return

            if response_json['status'] != 'OK':
                _log.error("JSON upload failed, %s: %s",
                           response_json['status'], response_text)
                return

            _log.info("JSON uploaded.")
Ejemplo n.º 5
0
 def scm_for_path(self, path):
     # FIXME: make scm() be a wrapper around this, and clean up the way
     # callers call initialize_scm() (to remove patch_directories) and scm().
     if sys.platform == "win32":
         self._engage_awesome_windows_hacks()
     return SCMDetector(self.filesystem, self.executive).detect_scm_system(path)
Ejemplo n.º 6
0
 def initialize_scm(self, patch_directories=None):
     if sys.platform == "win32":
         self._engage_awesome_windows_hacks()
     detector = SCMDetector(self.filesystem, self.executive)
     self._scm = detector.default_scm(patch_directories)
Ejemplo n.º 7
0
Archivo: png.py Proyecto: dzhshf/WebKit
 def __init__(self, file_path, handle_style_error, scm=None, host=None):
     self._file_path = file_path
     self._handle_style_error = handle_style_error
     self._host = host or SystemHost()
     self._fs = self._host.filesystem
     self._detector = scm or SCMDetector(self._fs, self._host.executive).detect_scm_system(self._fs.getcwd())
Ejemplo n.º 8
0
 def __init__(self, tool, options, host=None, scm=None):
     self._tool = tool
     self._options = options
     self._host = host or SystemHost()
     self._fs = self._host.filesystem
     self._detector = scm or SCMDetector(self._fs, self._host.executive).detect_scm_system(self._fs.getcwd())