openSUSE-release-tools/osclib/check_command.py

131 lines
4.8 KiB
Python
Raw Normal View History

import json
2014-03-06 18:50:59 +01:00
class CheckCommand(object):
def __init__(self, api):
self.api = api
def _previous_check_one_project(self, project, verbose):
2014-03-06 18:50:59 +01:00
"""
Check state of one specified staging project
:param project: project to check
:param verbose: do verbose check or not
"""
state = self.api.check_project_status(project)
2014-03-06 18:50:59 +01:00
# If the project is empty just skip it
if not state:
2014-03-24 15:18:25 +01:00
return False
2014-03-06 18:50:59 +01:00
print('Checking staging project: {}'.format(project))
if type(state) is list:
2014-07-15 11:08:04 +02:00
print(' -- Project still needs attention')
2014-03-06 18:50:59 +01:00
for issue in state:
print(issue)
else:
print(' ++ Acceptable staging project')
return True
def _report(self, project, verbose):
"""Print a single report for a project.
:param project: dict object, converted from JSON.
:param verbose: do verbose check or not
"""
report = []
# Check for superseded requests
report.extend(' - Request %s is superseded by %s' % (r['number'], r['superseded_by'])
for r in project['obsolete_requests'] if r['state'] == 'superseded')
# Untracked requests
report.extend(' - Request %s is no tracked but is open for the project' % r['number']
for r in project['untracked_requests'])
# Status of obsolete requests
for r in project['obsolete_requests']:
2014-07-08 17:25:29 +02:00
if r['state'] == 'superseded':
continue
report.append(' - %s: %s' % (r['package'], r['state']))
if not verbose:
break
# Missing reviews
for r in project['missing_reviews']:
report.append(' - %s: Missing reviews: %s' % (r['package'], r['by']))
if not verbose:
break
# Building repositories
if project['building_repositories']:
report.append(' - At least following repositories are still building:')
for r in project['building_repositories']:
2014-07-08 17:06:31 +02:00
report.append(' %s/%s: %s' % (r['repository'], r['arch'], r['state']))
if not verbose:
break
# Broken packages
if project['broken_packages']:
report.append(' - Following packages are broken:')
for r in project['broken_packages']:
report.append(' %s (%s): %s' % (r['package'], r['repository'], r['state']))
if not verbose:
break
# openQA results
if self.api.copenqa:
if not project['openqa_jobs']:
report.append(' - No openQA result yet')
for job in project['openqa_jobs']:
if job['result'] != 'passed':
qa_result = job['result'] if job['result'] != 'none' else 'running'
report.append(" - openQA's overall status is %s for %s/tests/%s" % (qa_result, self.api.copenqa, job['id']))
report.extend(' %s: fail' % module['name'] for module in job['modules'] if module['result'] == 'fail')
break
if project['overall_state'] == 'acceptable':
report.insert(0, ' ++ Acceptable staging project %s' % project['name'])
elif project['overall_state'] != 'empty':
report.insert(0, ' -- %s Project %s still needs attention' % (project['overall_state'].upper(),
project['name']))
return report
def _check_project(self, project=None):
"""
Check state of one specified staging project
:param project: project to check
"""
report = []
2017-03-16 16:54:34 -05:00
info = self.api.project_status(project, not project)
if not project:
for prj in info:
if not prj['selected_requests']:
continue
2014-07-08 16:54:56 +02:00
report.extend(self._report(prj, False))
report.append('')
else:
report.extend(self._report(info, True))
return report
def perform(self, project=None, previous=False):
2014-03-06 18:50:59 +01:00
"""
Check one staging project verbosibly or all of them at once
:param project: project to check, None for all
"""
if previous:
if project:
project = self.api.prj_from_letter(project)
self._previous_check_one_project(project, True)
else:
for project in self.api.get_staging_projects():
if self._previous_check_one_project(project, False):
# newline to split multiple prjs at once
print('')
2014-03-06 18:50:59 +01:00
else:
2018-04-26 13:28:25 +02:00
print('\n'.join(self._check_project(project)))
2014-03-06 18:50:59 +01:00
return True