Exemplo n.º 1
0
    def get(self, prefix, job, build):
        job_dir = '/%s/%s/' % (prefix, job)
        testgrid_query = testgrid.path_to_query(job_dir)
        build_dir = job_dir + build
        details = build_details(build_dir)
        if not details:
            logging.warning('unable to load %s', build_dir)
            self.render(
                'build_404.html',
                dict(build_dir=build_dir, job_dir=job_dir, job=job, build=build))
            self.response.set_status(404)
            return
        started, finished, failures, build_log = details

        if started:
            commit = started['version'].split('+')[-1]
        else:
            commit = None

        pr = None
        pr_digest = None
        if prefix.startswith(view_base.PR_PREFIX):
            pr = os.path.basename(prefix)
            pr_digest = models.GHIssueDigest.get('kubernetes/kubernetes', pr)
        self.render('build.html', dict(
            job_dir=job_dir, build_dir=build_dir, job=job, build=build,
            commit=commit, started=started, finished=finished,
            failures=failures, build_log=build_log, pr=pr, pr_digest=pr_digest,
            testgrid_query=testgrid_query))
Exemplo n.º 2
0
    def get(self, prefix, job, build):
        # pylint: disable=too-many-locals
        job_dir = '/%s/%s/' % (prefix, job)
        testgrid_query = testgrid.path_to_query(job_dir)
        build_dir = job_dir + build
        details = build_details(build_dir)
        if not details:
            logging.warning('unable to load %s', build_dir)
            self.render(
                'build_404.html',
                dict(build_dir=build_dir,
                     job_dir=job_dir,
                     job=job,
                     build=build))
            self.response.set_status(404)
            return
        started, finished, failures = details

        build_log = ''
        build_log_src = None
        if 'log' in self.request.params or (not finished) or \
            (finished and finished.get('result') != 'SUCCESS' and len(failures) == 0):
            build_log = get_build_log(build_dir)
            if not build_log:
                build_log, build_log_src = get_running_build_log(job, build)

        # 'version' might be in either started or finished.
        # prefer finished.
        if finished and 'version' in finished:
            version = finished['version']
        else:
            version = started and started.get('version')
        commit = version and version.split('+')[-1]

        issues = list(models.GHIssueDigest.find_xrefs(build_dir))

        pr, pr_path, repo = parse_pr_path(prefix)
        pr_digest = None
        if pr:
            pr_digest = models.GHIssueDigest.get(repo, pr)

        self.render(
            'build.html',
            dict(job_dir=job_dir,
                 build_dir=build_dir,
                 job=job,
                 build=build,
                 commit=commit,
                 started=started,
                 finished=finished,
                 failures=failures,
                 build_log=build_log,
                 build_log_src=build_log_src,
                 issues=issues,
                 pr_path=pr_path,
                 pr=pr,
                 pr_digest=pr_digest,
                 testgrid_query=testgrid_query))
Exemplo n.º 3
0
 def get(self, prefix, job):
     job_dir = '/%s/%s/' % (prefix, job)
     testgrid_query = testgrid.path_to_query(job_dir)
     before = self.request.get('before')
     builds = build_list(job_dir, before)
     self.render('build_list.html',
                 dict(job=job, job_dir=job_dir,
                      testgrid_query=testgrid_query,
                      builds=builds, before=before))
Exemplo n.º 4
0
 def get(self, prefix, job):
     job_dir = '/%s/%s/' % (prefix, job)
     testgrid_query = testgrid.path_to_query(job_dir)
     before = self.request.get('before')
     builds = build_list(job_dir, before)
     self.render('build_list.html',
                 dict(job=job, job_dir=job_dir,
                      testgrid_query=testgrid_query,
                      builds=builds, before=before))
Exemplo n.º 5
0
 def get(self, prefix, job):
     job_dir = '/%s/%s/' % (prefix, job)
     testgrid_query = testgrid.path_to_query(job_dir)
     before = self.request.get('before')
     builds = build_list(job_dir, before)
     dir_link = re.sub(r'/pull/.*', '/directory/%s' % job, prefix)
     self.render('build_list.html',
                 dict(job=job, job_dir=job_dir, dir_link=dir_link,
                      testgrid_query=testgrid_query,
                      builds=builds, before=before))
Exemplo n.º 6
0
 def get(self, prefix, job):
     job_dir = '/%s/%s/' % (prefix, job)
     testgrid_query = testgrid.path_to_query(job_dir)
     before = self.request.get('before')
     builds = build_list(job_dir, before)
     dir_link = re.sub(r'/pull/.*', '/directory/%s' % job, prefix)
     self.render('build_list.html',
                 dict(job=job, job_dir=job_dir, dir_link=dir_link,
                      testgrid_query=testgrid_query,
                      builds=builds, before=before))
Exemplo n.º 7
0
    def get(self, prefix, job, build):
        # pylint: disable=too-many-locals
        job_dir = '/%s/%s/' % (prefix, job)
        testgrid_query = testgrid.path_to_query(job_dir)
        build_dir = job_dir + build
        details = build_details(build_dir)
        if not details:
            logging.warning('unable to load %s', build_dir)
            self.render(
                'build_404.html',
                dict(build_dir=build_dir,
                     job_dir=job_dir,
                     job=job,
                     build=build))
            self.response.set_status(404)
            return
        started, finished, failures = details

        build_log = ''
        if 'log' in self.request.params or (finished and
                                            finished.get('result') != 'SUCCESS'
                                            and len(failures) == 0):
            build_log = get_build_log(build_dir)

        if started:
            commit = started['version'].split('+')[-1]
        else:
            commit = None

        pr, pr_path, repo = parse_pr_path(prefix)
        pr_digest = None
        if pr:
            pr_digest = models.GHIssueDigest.get(repo, pr)
        self.render(
            'build.html',
            dict(job_dir=job_dir,
                 build_dir=build_dir,
                 job=job,
                 build=build,
                 commit=commit,
                 started=started,
                 finished=finished,
                 failures=failures,
                 build_log=build_log,
                 pr_path=pr_path,
                 pr=pr,
                 pr_digest=pr_digest,
                 testgrid_query=testgrid_query))
Exemplo n.º 8
0
    def get(self, prefix, job, build):
        # pylint: disable=too-many-locals
        job_dir = '/%s/%s/' % (prefix, job)
        testgrid_query = testgrid.path_to_query(job_dir)
        build_dir = job_dir + build
        details = build_details(build_dir)
        if not details:
            logging.warning('unable to load %s', build_dir)
            self.render(
                'build_404.html',
                dict(build_dir=build_dir, job_dir=job_dir, job=job, build=build))
            self.response.set_status(404)
            return
        started, finished, failures = details

        build_log = ''
        build_log_src = None
        if 'log' in self.request.params or (not finished) or \
            (finished and finished.get('result') != 'SUCCESS' and len(failures) == 0):
            build_log = get_build_log(build_dir)
            if not build_log:
                build_log, build_log_src = get_running_build_log(job, build)

        # 'version' might be in either started or finished.
        # prefer finished.
        if finished and 'version' in finished:
            version = finished['version']
        else:
            version = started and started.get('version')
        commit = version and version.split('+')[-1]

        issues = list(models.GHIssueDigest.find_xrefs(build_dir))

        pr, pr_path, repo = parse_pr_path(prefix)
        pr_digest = None
        if pr:
            pr_digest = models.GHIssueDigest.get(repo, pr)

        self.render('build.html', dict(
            job_dir=job_dir, build_dir=build_dir, job=job, build=build,
            commit=commit, started=started, finished=finished,
            failures=failures, build_log=build_log, build_log_src=build_log_src,
            issues=issues,
            pr_path=pr_path, pr=pr, pr_digest=pr_digest,
            testgrid_query=testgrid_query))
Exemplo n.º 9
0
 def test_write_config(self):
     # pylint: disable=protected-access
     self.init_stubs()
     testgrid._testgrid_config = None
     write_config()
     path = 'kubernetes-jenkins/logs/somejob'
     self.assertEqual(
         testgrid.get_config(),
         {
             'test_groups': [{
                 'name': ['tg'],
                 'query': [path]
             }],
             'dashboards': [{
                 'dashboard_tab': [{'name': ['ajob'], 'test_group_name': ['tg']}],
                 'name': ['k8s']
             }],
         })
     self.assertEqual(testgrid.path_to_query(path), 'k8s#ajob')
Exemplo n.º 10
0
    def get(self, prefix, job, build):
        job_dir = '/%s/%s/' % (prefix, job)
        testgrid_query = testgrid.path_to_query(job_dir)
        build_dir = job_dir + build
        details = build_details(build_dir)
        if not details:
            logging.warning('unable to load %s', build_dir)
            self.render(
                'build_404.html',
                dict(build_dir=build_dir,
                     job_dir=job_dir,
                     job=job,
                     build=build))
            self.response.set_status(404)
            return
        started, finished, failures, build_log = details

        if started:
            commit = started['version'].split('+')[-1]
        else:
            commit = None

        pr = None
        pr_digest = None
        if prefix.startswith(view_base.PR_PREFIX):
            pr = os.path.basename(prefix)
            pr_digest = models.GHIssueDigest.get('kubernetes/kubernetes', pr)
        self.render(
            'build.html',
            dict(job_dir=job_dir,
                 build_dir=build_dir,
                 job=job,
                 build=build,
                 commit=commit,
                 started=started,
                 finished=finished,
                 failures=failures,
                 build_log=build_log,
                 pr=pr,
                 pr_digest=pr_digest,
                 testgrid_query=testgrid_query))
 def test_write_config(self):
     # pylint: disable=protected-access
     self.init_stubs()
     testgrid._testgrid_config = None
     write_config()
     path = 'kubernetes-jenkins/logs/somejob'
     self.assertEqual(
         testgrid.get_config(), {
             'test_groups': [{
                 'name': ['tg'],
                 'query': [path]
             }],
             'dashboards': [{
                 'dashboard_tab': [{
                     'name': ['ajob'],
                     'test_group_name': ['tg']
                 }],
                 'name': ['k8s']
             }],
         })
     self.assertEqual(testgrid.path_to_query(path), 'k8s#ajob')
Exemplo n.º 12
0
    def get(self, prefix, job, build):
        # pylint: disable=too-many-locals
        if prefix.endswith('/directory'):
            # redirect directory requests
            link = gcs_async.read('/%s/%s/%s.txt' % (prefix, job, build)).get_result()
            if link and link.startswith('gs://'):
                self.redirect('/build/' + link.replace('gs://', ''))
                return

        job_dir = '/%s/%s/' % (prefix, job)
        testgrid_query = testgrid.path_to_query(job_dir)
        build_dir = job_dir + build
        started, finished, metadata, results = build_details(build_dir)
        if started is None and finished is None:
            logging.warning('unable to load %s', build_dir)
            self.render(
                'build_404.html',
                dict(build_dir=build_dir, job_dir=job_dir, job=job, build=build))
            self.response.set_status(404)
            return

        want_build_log = False
        build_log = ''
        build_log_src = None
        if 'log' in self.request.params or (not finished) or \
            (finished and finished.get('result') != 'SUCCESS' and len(results['failed']) <= 1):
            want_build_log = True
            build_log = get_build_log(build_dir)

        pr, pr_path, pr_digest = None, None, None
        repo = '%s/%s' % (self.app.config['default_org'],
                          self.app.config['default_repo'])
        spyglass_link = ''
        external_config = get_build_config(prefix, self.app.config)
        if external_config is not None:
            if external_config.get('spyglass'):
                spyglass_link = 'https://' + external_config['prow_url'] + '/view/gcs/' + build_dir
            if '/pull/' in prefix:
                pr, pr_path, pr_digest, repo = get_pr_info(prefix, self.app.config)
            if want_build_log and not build_log:
                build_log, build_log_src = get_running_build_log(job, build,
                                                                 external_config["prow_url"])

        # 'version' might be in either started or finished.
        # prefer finished.
        if finished and 'version' in finished:
            version = finished['version']
        else:
            version = started and started.get('version')
        commit = version and version.split('+')[-1]

        issues = list(models.GHIssueDigest.find_xrefs(build_dir))

        # openshift does not have a pull string because the entrypoint does not
        # set it into started
        ref_string = ""
        if 'repos' in metadata and metadata['repos']:
            if repo in metadata['repos']:
                ref_string = metadata['repos'][repo]
                del metadata['repos'][repo]
        if len(ref_string) == 0 and started and 'pull' in started:
            ref_string = started['pull']

        refs = []
        if len(ref_string) > 0:
            for ref in ref_string.split(','):
                x = ref.split(':', 1)
                if len(x) == 2:
                    refs.append((x[0], x[1]))
                else:
                    refs.append((x[0], ''))

        work_namespace = ""
        if 'work-namespace' in metadata:
            work_namespace = metadata['work-namespace']
            del metadata['work-namespace']

        self.render('build.html', dict(
            job_dir=job_dir, build_dir=build_dir, job=job, build=build,
            commit=commit, started=started, finished=finished, metadata=metadata,
            res=results, refs=refs,
            work_namespace=work_namespace,
            build_log=build_log, build_log_src=build_log_src,
            issues=issues, repo=repo,
            pr_path=pr_path, pr=pr, pr_digest=pr_digest,
            testgrid_query=testgrid_query))
Exemplo n.º 13
0
    def get(self, prefix, job, build):
        # pylint: disable=too-many-locals
        if prefix.endswith('/directory'):
            # redirect directory requests
            link = gcs_async.read('/%s/%s/%s.txt' %
                                  (prefix, job, build)).get_result()
            if link and link.startswith('gs://'):
                self.redirect('/build/' + link.replace('gs://', ''))
                return

        job_dir = '/%s/%s/' % (prefix, job)
        testgrid_query = testgrid.path_to_query(job_dir)
        build_dir = job_dir + build
        started, finished, results = build_details(build_dir)
        if started is None and finished is None:
            logging.warning('unable to load %s', build_dir)
            self.render(
                'build_404.html',
                dict(build_dir=build_dir,
                     job_dir=job_dir,
                     job=job,
                     build=build))
            self.response.set_status(404)
            return

        want_build_log = False
        build_log = ''
        build_log_src = None
        if 'log' in self.request.params or (not finished) or \
            (finished and finished.get('result') != 'SUCCESS' and len(results['failed']) <= 1):
            want_build_log = True
            build_log = get_build_log(build_dir)

        pr, pr_path, pr_digest = None, None, None
        repo = '%s/%s' % (self.app.config['default_org'],
                          self.app.config['default_repo'])
        external_config = get_build_config(prefix, self.app.config)
        if external_config is not None:
            if '/pull/' in prefix:
                pr, pr_path, pr_digest, repo = get_pr_info(
                    prefix, self.app.config)
            if want_build_log and not build_log:
                build_log, build_log_src = get_running_build_log(
                    job, build, external_config["prow_url"])

        # 'version' might be in either started or finished.
        # prefer finished.
        version = finished and finished.get(
            'version') or started and started.get('version')
        commit = version and version.split('+')[-1]

        issues = list(models.GHIssueDigest.find_xrefs(build_dir))

        refs = []
        if started and started.get('pull'):
            for ref in started['pull'].split(','):
                x = ref.split(':', 1)
                if len(x) == 2:
                    refs.append((x[0], x[1]))
                else:
                    refs.append((x[0], ''))

        self.render(
            'build.html',
            dict(job_dir=job_dir,
                 build_dir=build_dir,
                 job=job,
                 build=build,
                 commit=commit,
                 started=started,
                 finished=finished,
                 res=results,
                 refs=refs,
                 build_log=build_log,
                 build_log_src=build_log_src,
                 issues=issues,
                 repo=repo,
                 pr_path=pr_path,
                 pr=pr,
                 pr_digest=pr_digest,
                 testgrid_query=testgrid_query))
 def expect(path, out):
     self.assertEqual(testgrid.path_to_query(path), out)
Exemplo n.º 15
0
 def expect(path, out):
     self.assertEqual(testgrid.path_to_query(path), out)
Exemplo n.º 16
0
    def get(self, prefix, job, build):
        # pylint: disable=too-many-locals
        if prefix.endswith('/directory'):
            # redirect directory requests
            link = gcs_async.read('/%s/%s/%s.txt' % (prefix, job, build)).get_result()
            if link and link.startswith('gs://'):
                self.redirect('/build/' + link.replace('gs://', ''))
                return

        job_dir = '/%s/%s/' % (prefix, job)
        testgrid_query = testgrid.path_to_query(job_dir)
        build_dir = job_dir + build
        started, finished, results = build_details(build_dir)
        if started is None and finished is None:
            logging.warning('unable to load %s', build_dir)
            self.render(
                'build_404.html',
                dict(build_dir=build_dir, job_dir=job_dir, job=job, build=build))
            self.response.set_status(404)
            return

        want_build_log = False
        build_log = ''
        build_log_src = None
        if 'log' in self.request.params or (not finished) or \
            (finished and finished.get('result') != 'SUCCESS' and len(results['failed']) <= 1):
            want_build_log = True
            build_log = get_build_log(build_dir)

        pr, pr_path, pr_digest = None, None, None
        repo = '%s/%s' % (self.app.config['default_org'],
                          self.app.config['default_repo'])
        external_config = get_build_config(prefix, self.app.config)
        if external_config is not None:
            if '/pull/' in prefix:
                pr, pr_path, pr_digest, repo = get_pr_info(prefix, self.app.config)
            if want_build_log and not build_log:
                build_log, build_log_src = get_running_build_log(job, build,
                                                                 external_config["prow_url"])

        # 'version' might be in either started or finished.
        # prefer finished.
        version = finished and finished.get('version') or started and started.get('version')
        commit = version and version.split('+')[-1]

        issues = list(models.GHIssueDigest.find_xrefs(build_dir))

        refs = []
        if started and started.get('pull'):
            for ref in started['pull'].split(','):
                x = ref.split(':', 1)
                if len(x) == 2:
                    refs.append((x[0], x[1]))
                else:
                    refs.append((x[0], ''))

        self.render('build.html', dict(
            job_dir=job_dir, build_dir=build_dir, job=job, build=build,
            commit=commit, started=started, finished=finished,
            res=results, refs=refs,
            build_log=build_log, build_log_src=build_log_src,
            issues=issues, repo=repo,
            pr_path=pr_path, pr=pr, pr_digest=pr_digest,
            testgrid_query=testgrid_query))