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 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))
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))
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))
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))
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))
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')
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')
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))
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)
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))