From dbf763b938de0f6ad65bb6f5d2d29093a1a42e73 Mon Sep 17 00:00:00 2001 From: Michael Still Date: Thu, 6 Mar 2014 16:57:54 +1100 Subject: [PATCH] Refactor conf into its own file, and per user reports. --- analyse.py | 51 ++---------------------------- conf.py | 93 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ report.py | 75 ++++++++++++++----------------------------- 3 files changed, 118 insertions(+), 101 deletions(-) create mode 100644 conf.py diff --git a/analyse.py b/analyse.py index d9fb348..a87bf18 100755 --- a/analyse.py +++ b/analyse.py @@ -5,54 +5,7 @@ import json import sys import urllib - -# This list from https://review.openstack.org/#/admin/groups/270,members and -# https://review.openstack.org/#/admin/groups/91,members -CI_SYSTEM = ['Jenkins', - 'Arista Testing', - 'Big Switch CI', - 'Brocade Tempest', - 'Cisco OpenStack CI Robot', - 'CitrixJenkins', - 'Compass CI', - 'Designate Jenkins', - 'Docker CI', - 'Freescale CI', - 'Fuel CI', - 'Huawei CI', - 'Hyper-V CI', - 'IBM DB2 Test', - 'IBM Neutron Testing', - 'IBM PowerKVM Testing', - 'IBM PowerVC Test', - 'Mellanox External Testing', - 'Metaplugin CI Test', - 'Midokura CI Bot', - 'NEC OpenStack CI', - 'NetScaler TestingSystem', - 'Neutron Ryu', - 'Nuage CI', - 'OpenContrail', - 'OpenDaylight Jenkins', - 'PLUMgrid CI', - 'Puppet Ceph Integration', - 'Puppet OpenStack CI', - 'Radware 3rd Party Testing', - 'Red Hat CI', - 'SmokeStack', - 'Tail-f NCS Jenkins', - 'VMware Mine Sweeper', - 'Wherenow.org Jenkins CI', - 'XenServer CI', - 'murano-ci', - 'nicirabot', - 'novaimagebuilder-jenkins', - 'reddwarf', - 'savanna-ci', - 'turbo-hipster', - 'vArmour CI Test', - 'vanillabot', - ] +import conf def read_remote_lines(url): @@ -117,7 +70,7 @@ if __name__ == '__main__': j['approvals'] = [{'type': 'CRVW', 'value': 0}] author = j['author']['name'] - if not author in CI_SYSTEM: + if not author in conf.CI_USERS: skipped_authors.setdefault(author, 0) skipped_authors[author] += 1 continue diff --git a/conf.py b/conf.py new file mode 100644 index 0000000..2e09d89 --- /dev/null +++ b/conf.py @@ -0,0 +1,93 @@ +# Configuration options + +# This list from https://review.openstack.org/#/admin/groups/270,members and +# https://review.openstack.org/#/admin/groups/91,members +CI_USERS = [ + 'Jenkins', + 'Arista Testing', + 'Big Switch CI', + 'Brocade Tempest', + 'Cisco OpenStack CI Robot', + 'CitrixJenkins', + 'Compass CI', + 'Designate Jenkins', + 'Docker CI', + 'Freescale CI', + 'Fuel CI', + 'Huawei CI', + 'Hyper-V CI', + 'IBM DB2 Test', + 'IBM Neutron Testing', + 'IBM PowerKVM Testing', + 'IBM PowerVC Test', + 'Mellanox External Testing', + 'Metaplugin CI Test', + 'Midokura CI Bot', + 'NEC OpenStack CI', + 'NetScaler TestingSystem', + 'Neutron Ryu', + 'Nuage CI', + 'OpenContrail', + 'OpenDaylight Jenkins', + 'PLUMgrid CI', + 'Puppet Ceph Integration', + 'Puppet OpenStack CI', + 'Radware 3rd Party Testing', + 'Red Hat CI', + 'SmokeStack', + 'Tail-f NCS Jenkins', + 'VMware Mine Sweeper', + 'Wherenow.org Jenkins CI', + 'XenServer CI', + 'murano-ci', + 'nicirabot', + 'novaimagebuilder-jenkins', + 'reddwarf', + 'savanna-ci', + 'turbo-hipster', + 'vArmour CI Test', + 'vanillabot', + ] + +CI_SYSTEM = { + 'nova': [ + 'Jenkins', + 'Docker CI', + 'Hyper-V CI', + 'IBM PowerKVM Testing', + 'VMware Mine Sweeper', + 'XenServer CI', + 'turbo-hipster', + ], + 'neutron': [ + 'Jenkins', + 'Arista Testing', + 'Big Switch CI', + 'Brocade Tempest', + 'Cisco OpenStack CI Robot', + 'Huawei CI', + 'Hyper-V CI', + 'IBM Neutron Testing', + 'Mellanox External Testing', + 'Midokura CI Bot', + 'NEC OpenStack CI', + 'NetScaler TestingSystem', + 'Neutron Ryu', + 'Nuage CI', + 'OpenContrail', + 'OpenDaylight Jenkins', + 'PLUMgrid CI', + 'Tail-f NCS Jenkins', + 'VMware Mine Sweeper', + 'nicirabot', + ] + } + +SENTIMENTS = [ + 'Positive', + 'Negative', + 'Positive comment', + 'Negative comment', + 'Negative, buried in comment', + 'Unknown' + ] diff --git a/report.py b/report.py index 8a4112d..74d6a2d 100755 --- a/report.py +++ b/report.py @@ -5,50 +5,7 @@ import json import sys import time - -CI_SYSTEM = { - 'nova': [ - 'Jenkins', - 'Docker CI', - 'Hyper-V CI', - 'IBM PowerKVM Testing', - 'VMware Mine Sweeper', - 'XenServer CI', - 'turbo-hipster', - ], - 'neutron': [ - 'Jenkins', - 'Arista Testing', - 'Big Switch CI', - 'Brocade Tempest', - 'Cisco OpenStack CI Robot', - 'Huawei CI', - 'Hyper-V CI', - 'IBM Neutron Testing', - 'Mellanox External Testing', - 'Midokura CI Bot', - 'NEC OpenStack CI', - 'NetScaler TestingSystem', - 'Neutron Ryu', - 'Nuage CI', - 'OpenContrail', - 'OpenDaylight Jenkins', - 'PLUMgrid CI', - 'Tail-f NCS Jenkins', - 'VMware Mine Sweeper', - 'nicirabot', - ] - } - -SENTIMENTS = [ - 'Positive', - 'Negative', - 'Positive comment', - 'Negative comment', - 'Negative, buried in comment', - 'Unknown' - ] - +import conf def patch_list_as_html(l): out = [] @@ -59,10 +16,17 @@ def patch_list_as_html(l): return ', '.join(out) -def report(project, prefix): +def report(project_filter, user_filter, prefix): with open('patchsets.json') as f: patchsets = json.loads(f.read()) + if not user_filter: + user_filter = conf.CI_SYSTEM[prefix] + elif user_filter and not 'Jenkins' in user_filter: + user_filter_new = ['Jenkins'] + user_filter_new.extend(user_filter) + user_filter = user_filter_new + # This is more complicated than it looks because we need to handle # patchsets which are uploaded so rapidly that older patchsets aren't # finished testing. @@ -78,8 +42,9 @@ def report(project, prefix): if patchsets[number].get('__exemption__'): continue - if patchsets[number].get('__project__') != project: - continue + if project_filter != '*': + if patchsets[number].get('__project__') != project_filter: + continue patches = sorted(patchsets[number].keys()) valid_patches = [] @@ -109,6 +74,9 @@ def report(project, prefix): if author == '__created__': continue + if author not in user_filter: + continue + total_votes.setdefault(author, 0) total_votes[author] += 1 @@ -128,7 +96,7 @@ def report(project, prefix): sentiments[author][sentiment].append( '%s,%s' % (number, patch)) - for author in CI_SYSTEM[prefix]: + for author in user_filter: if not author in patchsets[number][patch]: missed_votes.setdefault(author, []) missed_votes[author].append('%s,%s' % (number, patch)) @@ -136,7 +104,7 @@ def report(project, prefix): with open('%s-cireport.html' % prefix, 'w') as f: f.write('Valid patches in report period: %d