esc-reporting/esc-analyze.py | 18 - esc-reporting/esc-report.py | 450 +++++++++++++++---------------------------- 2 files changed, 170 insertions(+), 298 deletions(-)
New commits: commit c8775f5a99192c92bbf9b8b2544e937747059040 Author: jan Iversen <[email protected]> Date: Tue Dec 20 20:13:05 2016 +0100 update to make report work with new data flow diff --git a/esc-reporting/esc-analyze.py b/esc-reporting/esc-analyze.py index 7d600a9..b217bdb 100755 --- a/esc-reporting/esc-analyze.py +++ b/esc-reporting/esc-analyze.py @@ -224,12 +224,14 @@ def util_create_statList(): def util_check_mail(name, mail): - global cfg, statList + global statList - if mail in cfg['aliases']: - mail = cfg['aliases'][mail] + if mail in statList['aliases']: + mail = statList['aliases'][mail] if not mail in statList['people']: statList['people'][mail] = util_create_person_gerrit(name, mail) + if mail == '*DUMMY*': + statList['people'][mail]['licenseOK'] = True return mail @@ -455,7 +457,7 @@ def analyze_qa(): util_build_period_stat(xDate, email, 'qa', 'fixed') def analyze_myfunc(): - global cfg, statList, openhubData, bugzillaData, gerritData, gitData, aliasData, licenceCompanyData, licencePersonalData + global cfg, statList, openhubData, bugzillaData, gerritData, gitData, licenceCompanyData, licencePersonalData print("myfunc: analyze nothing", flush=True) @@ -521,18 +523,18 @@ def runLoadCSV(): try: fileName = cfg['homedir'] + 'gitdm-config/aliases' - cfg['aliases'] = util_load_csv(fileName, ' ') + statList['aliases'] = util_load_csv(fileName, ' ') fileName = cfg['homedir'] + 'gitdm-config/licenseCompany.csv' cfg['companies'] = util_load_csv(fileName, ';') fileName = cfg['homedir'] + 'gitdm-config/licensePersonal.csv' licencePersonalData = util_load_csv(fileName, ';') # check consistency - for i in cfg['aliases']: + for i in statList['aliases']: if i in licencePersonalData: raise Exception('alias ' + i + ' in aliases is licensed') - elif cfg['aliases'][i] not in licencePersonalData: - raise Exception('target ' + cfg['aliases'][i] + ' for alias ' + i + ' in aliases is NOT licensed') + elif statList['aliases'][i] not in licencePersonalData: + raise Exception('target ' + statList['aliases'][i] + ' for alias ' + i + ' in aliases is NOT licensed') # create base people info for id, row in licencePersonalData.items(): diff --git a/esc-reporting/esc-report.py b/esc-reporting/esc-report.py index 6281b45..095ffea 100755 --- a/esc-reporting/esc-report.py +++ b/esc-reporting/esc-report.py @@ -52,13 +52,14 @@ def util_load_data_file(fileName): -def util_check_mail(mail, statList, combineMail): - if mail in combineMail: - mail = combineMail[mail] +def util_check_mail(mail): + global statList + if mail in statList['aliases']: + mail = statList['aliases'][mail] if not mail in statList['people']: - print('Error mail ' + mail + ' not in stats.json/people') - exit(-1) - return mail + return None + else: + return mail @@ -72,38 +73,36 @@ def util_formatGerrit(id, owner, title): -def util_print_line(fp, loopList, title, doGerrit=False, doBugzilla=False, doName=None): +def util_print_line(fp, loopList, title, doGerrit=False, doBugzilla=False): print("\n\n" + title + ':', file=fp) - for i in loopList: + for row in loopList: if doGerrit: - x = 'https://gerrit.libreoffice.org/#/c/{} {} -> "{}"'.format(i['id'], i['email'], i['title']) + x = 'https://gerrit.libreoffice.org/#/c/{} {} -> "{}"'.format(row['id'], row['email'], row['title']) elif doBugzilla: - x = 'https://bugs.documentfoundation.org/show_bug.cgi?id=' + i - elif not doName is None: - x = i + ' ' + doName[i]['name'] + x = 'https://bugs.documentfoundation.org/show_bug.cgi?id=' + row + elif 'id' in row: + x = '{} {} {} {}'.format(row['name'], row['email'], row['license'], row['id']) else: - x = i + x = '{} {} {}'.format(row['name'], row['email'], row['license']) print(' ' + x, file=fp) -def util_build_escNumber(db, tag, statList): +def util_build_escNumber(db, tag): + global statList return str(statList['data'][db][tag]) + '(' + str(statList['data'][db][tag]) + ')' -def util_build_matrix(title, lineDesc, index, statList): +def util_build_matrix(title, lineDesc, index): + global statList xValue = [[title, '1 week', '', '1 month', '', '3 months', '', '12 months', '']] xLen = [len(xValue[0][0]), 0, 0, 0, 0, 0, 0, 0, 0] for row in lineDesc: xLine = [row['text']] for i in '1week', '1month', '3month', '1year': - if index is None: - x1 = statList['data'][row['db']][i][row['tag']] - x2 = statList['diff'][row['db']][i][row['tag']] - else: - x1 = statList['data'][row['db']][index][i][row['tag']] - x2 = statList['diff'][row['db']][index][i][row['tag']] + x1 = statList['data'][row['db']][index][i][row['tag']] + x2 = statList['diff'][row['db']][index][i][row['tag']] xLine.append(str(x1)) xLine.append('(' + str(x2) + ')') xValue.append(xLine) @@ -128,53 +127,56 @@ def util_build_matrix(title, lineDesc, index, statList): -def report_mentoring(statList, openhubData, gerritData, gitData, bugzillaData, cfg): - myStatList = {'missing_license': {}, - 'to_abandon': [], - 'to_review': [], - 'we_miss_you_email': [], - 'remove_cc': [], - 'needsDevEval': [], +def report_mentoring(): + global statList, openhubData, gerritData, gitData, bugzillaData, cfg + myStatList = {'needsDevEval': [], 'needsUXEval': [], 'missing_ui_cc': [], 'needinfo': [], + 'to_be_closed': [], + 'easyhacks_new': [], 'to_unassign': [], - 'assign_problem': [], 'too_many_comments': [], 'missing_cc': [], - 'to_be_closed': [], - 'easyhacks_new': [], + 'assign_problem': [], + 'we_miss_you_email': [], + 'award_1st_email': [], + 'pending_license': [], + 'missing_license': [], + 'to_abandon' : [], + 'to_review': [], 'top10commit': [], 'top10review': [], - 'welcome_back_email': [], - 'award_1st_email': []} - + 'remove_cc': [] + } mailedDate = datetime.datetime.strptime(cfg['git']['last-mail-run'], '%Y-%m-%d') - datetime.timedelta(days=90) - zDate = datetime.datetime(year=2001, month=1, day=1) - for i in statList['people']: - row = statList['people'][i] - if not row['hasLicense'] and row['isContributor'] and row['commits']['1month']['merged'] != 0: - myStatList['missing_license'][row['email']] = row['name'] - if row['commits']['1year']['merged'] == row['commits']['1month']['merged'] and \ - row['commits']['1month']['merged'] != 0 and not row['email'] in cfg['contributor']['award-mailed']: - myStatList['award_1st_email'].append(row['email']) - + zeroDate = datetime.datetime(year=2001, month=1, day=1) + for id, row in statList['people'].items(): + entry = {'name': row['name'], 'email': id, 'license': row['licenseText']} newestCommitDate = datetime.datetime.strptime(row['newestCommit'], '%Y-%m-%d') - prevCommitDate = datetime.datetime.strptime(row['prevCommit'], '%Y-%m-%d') - if newestCommitDate >= mailedDate and \ - newestCommitDate < cfg['3monthDate']: - myStatList['we_miss_you_email'].append(i) - delta = newestCommitDate - prevCommitDate - if delta > datetime.timedelta(days=180) and prevCommitDate != zDate and \ - newestCommitDate > cfg['1weekDate'] : - myStatList['welcome_back_email'].append(i) - - for key in gerritData['patch']: - row = gerritData['patch'][key] + if newestCommitDate >= mailedDate and newestCommitDate < cfg['3monthDate']: + myStatList['we_miss_you_email'].append(entry) + x = row['commits']['3month']['owner'] + if x != 0 and row['commits']['total'] == x and not id in cfg['award-mailed']: + myStatList['award_1st_email'].append(entry) + if row['licenseText'].startswith('PENDING'): + myStatList['pending_license'].append(entry) + + for key,row in gerritData['patch'].items(): if row['status'] == 'SUBMITTED' or row['status'] == 'DRAFT': row['status'] = 'NEW' xDate = datetime.datetime.strptime(row['updated'], '%Y-%m-%d %H:%M:%S.%f000') - ownerEmail = util_check_mail(row['owner']['email'], statList, cfg['contributor']['combine-email']) + ownerEmail = util_check_mail(row['owner']['email']) + entry = {'id': key, 'name': row['owner']['name'], 'email': ownerEmail, 'title': row['subject']} + if row['status'] != 'ABANDONED': + if ownerEmail is None: + ownerEmail = row['owner']['email'] + entry['email'] = ownerEmail + entry['license'] = 'GERRIT NO LICENSE' + myStatList['missing_license'].append(entry) + elif not statList['people'][ownerEmail]['licenseOK']: + entry['license'] = 'GERRIT: ' + statList['people'][ownerEmail]['licenseText'] + myStatList['missing_license'].append(entry) if row['status'] == 'NEW': doBlock = False @@ -186,9 +188,21 @@ def report_mentoring(statList, openhubData, gerritData, gitData, bugzillaData, c if x['email'] != ownerEmail and x['email'] != '[email protected]': cntReview += 1 if xDate < cfg['1monthDate'] and not doBlock: - myStatList['to_abandon'].append({'id': key, 'email': row['owner']['email'], 'title': row['subject']}) + myStatList['to_abandon'].append(entry) if cntReview == 0 and not statList['people'][ownerEmail]['isCommitter']: - myStatList['to_review'].append({'id': key, 'email': row['owner']['email'], 'title': row['subject']}) + myStatList['to_review'].append(entry) + + for key,row in gitData['commits'].items(): + for i in 'author', 'committer': + email = util_check_mail(row[i+'-email']) + entry = {'id': key, 'name': row[i], 'email': email} + if email is None: + entry['email'] = row['author-email'] + entry['license'] = 'GIT AUTHOR NO LICENSE' + myStatList['missing_license'].append(entry) + elif not statList['people'][ownerEmail]['licenseOK']: + entry['license'] = 'GIT: ' + statList['people'][email]['licenseText'] + myStatList['missing_license'].append(entry) for key, row in bugzillaData['bugs'].items(): if not 'cc' in row: @@ -210,91 +224,65 @@ def report_mentoring(statList, openhubData, gerritData, gitData, bugzillaData, c myStatList['needsUXEval'].append(key) if 'topicUI' in row['keywords'] and '[email protected]' not in row['cc']: myStatList['missing_ui_cc'].append(key) - if row['status'] == 'NEEDINFO': myStatList['needinfo'].append(key) elif row['status'] == 'ASSIGNED': xDate = datetime.datetime.strptime(row['last_change_time'], "%Y-%m-%dT%H:%M:%SZ") if xDate < cfg['1monthDate']: myStatList['to_unassign'].append(key) - - if (row['status'] == 'ASSIGNED' and row['assigned_to'] == '') or \ - (row['status'] != 'ASSIGNED' and row['assigned_to'] != '' and \ - row['assigned_to'] != '[email protected]') : - myStatList['assign_problem'].append(key) - + if row['assigned_to'] == '' or (row['assigned_to'] != '' and row['assigned_to'] != '[email protected]') : + myStatList['assign_problem'].append(key) if len(row['comments']) >= 5: myStatList['too_many_comments'].append(key) - if not '[email protected]' in row['cc']: myStatList['missing_cc'].append(key) - - if row['comments'][-1]['creator'] == '[email protected]' and \ - not key in cfg['bugzilla']['close_except']: + if row['comments'][-1]['creator'] == '[email protected]' and not key in cfg['bugzilla']['close_except']: myStatList['to_be_closed'].append(key) - cDate = datetime.datetime.strptime(row['creation_time'], "%Y-%m-%dT%H:%M:%SZ") if cDate >= cfg['1weekDate'] or 'easyhack' in row['history'][-1]['changes'][0]['added']: myStatList['easyhacks_new'].append(key) - - tmpClist = sorted(statList['people'], key=lambda k: (statList['people'][k]['commits']['1month']['merged']), reverse=True) - for i in tmpClist: - if not statList['people'][i]['isCommitter']: - x = {'mail': i, 'name': statList['people'][i]['name'], - 'month' :statList['people'][i]['commits']['1month']['merged'], - 'year':statList['people'][i]['commits']['1year']['merged']} - myStatList['top10commit'].append(x) - if len(myStatList['top10commit']) >= 10: - break - tmpRlist = sorted(statList['people'], key=lambda k: (statList['people'][k]['gerrit']['1month']['reviewer']), reverse=True) - for i in tmpRlist: - if i != '[email protected]': - x = {'mail': i, 'name': statList['people'][i]['name'], - 'month' :statList['people'][i]['gerrit']['1month']['reviewer'], - 'year':statList['people'][i]['gerrit']['1year']['reviewer']} - myStatList['top10review'].append(x) - if len(myStatList['top10review']) >= 10: - break - - fp = open('/tmp/esc_mentoring_report.txt', 'w', encoding='utf-8') - print('ESC mentoring report, generated {} based on stats.json from {}'.format( - datetime.datetime.now().strftime("%Y-%m-%d"), statList['addDate']), file=fp) + tmpClist = sorted(statList['people'], key=lambda k: (statList['people'][k]['commits']['1month']['owner']),reverse=True) + for i in tmpClist: + if not statList['people'][i]['isCommitter']: + x = {'mail': i, 'name': statList['people'][i]['name'], + 'month': statList['people'][i]['commits']['1month']['owner'], + 'year': statList['people'][i]['commits']['1year']['owner']} + myStatList['top10commit'].append(x) + if len(myStatList['top10commit']) >= 10: + break + tmpRlist = sorted(statList['people'], key=lambda k: (statList['people'][k]['gerrit']['1month']['reviewer']),reverse=True) + for i in tmpRlist: + if i != '[email protected]': + x = {'mail': i, 'name': statList['people'][i]['name'], + 'month': statList['people'][i]['gerrit']['1month']['reviewer'], + 'year': statList['people'][i]['gerrit']['1year']['reviewer']} + myStatList['top10review'].append(x) + if len(myStatList['top10review']) >= 10: + break + + fp = open('/tmp/esc_mentoring_report.txt', 'w', encoding='utf-8') + print('ESC mentoring report, generated {} based on stats.json from {}'.format( + datetime.datetime.now().strftime("%Y-%m-%d"), statList['addDate']), file=fp) print("copy/paste to esc pad:\n" "* mentoring/easyhack update (janI)\n" - " + openhub statistics based on analysis from {}\n" - " {} people did in total: {} commits in {} lines of code\n" - " {} people did in 12 month: {} commits\n" + " + openhub statistics ({}), {} people did {} commits in 12 month in {} lines of code\n" " + gerrit/git statistics:".format( statList['stat']['openhub_last_analyse'], - util_build_escNumber('openhub', 'total_contributors', statList), - util_build_escNumber('openhub', 'total_commits', statList), - util_build_escNumber('openhub', 'lines_of_code', statList), - util_build_escNumber('openhub', 'year_contributors', statList), - util_build_escNumber('openhub', 'year_commits', statList)), file=fp) - - xRow = [{'db': 'gerrit', 'tag': 'NEW', 'text': 'open'}, - {'db': 'gerrit', 'tag': 'reviewed', 'text': 'reviews'}, - {'db': 'gerrit', 'tag': 'MERGED', 'text': 'merged'}, - {'db': 'gerrit', 'tag': 'ABANDONED', 'text': 'abandoned'}, - {'db': 'commits', 'tag': '#', 'text': 'commits'}] - print(util_build_matrix('committer...', xRow, 'committer', statList), end='', file=fp) - print(util_build_matrix('contributor...', xRow, 'contributor', statList), end='', file=fp) - - print(" + Distribution of people based on number of merged patches:", file=fp) - xRow = [{'db': 'trendCommitter', 'tag': '1-5', 'text': '1-5'}, - {'db': 'trendCommitter', 'tag': '6-25', 'text': '6-25'}, - {'db': 'trendCommitter', 'tag': '26-50', 'text': '26-50'}, - {'db': 'trendCommitter', 'tag': '51-100', 'text': '51-100'}, - {'db': 'trendCommitter', 'tag': '100+', 'text': '100+'}] - print(util_build_matrix('Committer distribution', xRow, None, statList), end='', file=fp) - for i in xRow: - i['db'] = 'trendContributor' - print(util_build_matrix('Contributor distribution', xRow, None, statList), end='', file=fp) - + util_build_escNumber('openhub', 'year_contributors'), + util_build_escNumber('openhub', 'year_commits'), + util_build_escNumber('openhub', 'lines_of_code')), file=fp) + xRow = [{'db': 'gerrit', 'tag': 'NEW', 'text': 'open'}, + {'db': 'gerrit', 'tag': 'reviewed', 'text': 'reviews'}, + {'db': 'gerrit', 'tag': 'MERGED', 'text': 'merged'}, + {'db': 'gerrit', 'tag': 'ABANDONED', 'text': 'abandoned'}, + {'db': 'commits', 'tag': 'owner', 'text': 'own commits'}, + {'db': 'commits', 'tag': 'reviewMerged', 'text': 'review commits'}] + print(util_build_matrix('committer...', xRow, 'committer'), end='', file=fp) + print(util_build_matrix('contributor...', xRow, 'contributor'), end='', file=fp) print(" + easyHack statistics:\n ", end='', file=fp) for i1 in 'needsDevEval', 'needsUXEval', 'cleanup_comments', 'total', 'assigned', 'open': - print(i1 + ' ' + util_build_escNumber('easyhacks', i1, statList) + ' ', end="", file=fp) + print(i1 + ' ' + util_build_escNumber('easyhacks', i1) + ' ', end="", file=fp) if i1 == 'cleanup_comments': print('\n ', end='', file=fp) print("\n + received patches from " + str(len(myStatList['missing_license'])) + " emails the last month without licesense statement", file=fp) @@ -312,19 +300,17 @@ def report_mentoring(statList, openhubData, gerritData, gitData, bugzillaData, c myStatList['top10review'][i]['year']), file=fp) print(" + big CONGRATULATIONS to contributors who have at least 1 merged patch, since last report:", file=fp) - for i in myStatList['award_1st_email']: - print(' ' + statList['people'][i]['name'], file=fp) + for row in myStatList['award_1st_email']: + print(' ' + row['name'], file=fp) print("\n\n\n\n\n\n\n\n\n\n", file=fp) - print('Day mentoring report, generated {} based on stats.json from {}'.format( datetime.datetime.now().strftime("%Y-%m-%d"), statList['addDate']), file=fp) - util_print_line(fp, myStatList['welcome_back_email'], 'welcome back', doName=statList['people']) - util_print_line(fp, myStatList['missing_license'], 'missing license statement', doName=statList['people']) + util_print_line(fp, myStatList['missing_license'], 'missing license statement' ) util_print_line(fp, myStatList['to_abandon'], 'gerrit to abandon', doGerrit=True) util_print_line(fp, myStatList['to_review'], 'gerrit to review', doGerrit=True) util_print_line(fp, myStatList['to_unassign'], 'easyhacks to unassign', doBugzilla=True) - util_print_line(fp, myStatList['needinfo'], 'easyhacks with NEEDINFO', doBugzilla=True) + util_print_line(fp, myStatList['needinfo'], 'easyhacks with NEEDINFO', doBugzilla=True) util_print_line(fp, myStatList['easyhacks_new'], 'easyhacks new', doBugzilla=True) util_print_line(fp, myStatList['missing_cc'], 'easyhacks missing cc', doBugzilla=True) util_print_line(fp, myStatList['remove_cc'], 'easyhacks remove cc', doBugzilla=True) @@ -333,22 +319,25 @@ def report_mentoring(statList, openhubData, gerritData, gitData, bugzillaData, c util_print_line(fp, myStatList['to_be_closed'], 'easyhacks to be closed', doBugzilla=True) util_print_line(fp, myStatList['needsDevEval'], 'easyhacks needsDevEval', doBugzilla=True) util_print_line(fp, myStatList['needsUXEval'], 'easyhacks needsUXEval', doBugzilla=True) - util_print_line(fp, myStatList['we_miss_you_email'], 'we miss you email', doName=statList['people']) + util_print_line(fp, myStatList['we_miss_you_email'], 'we miss you email' ) util_print_line(fp, myStatList['too_many_comments'], 'easyhacks reduce comments', doBugzilla=True) + util_print_line(fp, myStatList['pending_license'], 'pending license statement' ) fp.close() - return {'title': 'esc_mentoring, MENTORING', 'mail': '[email protected]', 'file': '/tmp/esc_mentoring_report.txt'} -def report_ui(statList, openhubData, gerritData, gitData, bugzillaData, cfg): - tmpClist = sorted(statList['people'], key=lambda k: (statList['people'][k]['ui']['1month']['total']), reverse=True) +def report_ui(): + global statList, openhubData, gerritData, gitData, bugzillaData, cfg + tmpClist = sorted(statList['people'], key=lambda k: (statList['people'][k]['ui']['1month']['history']+statList['people'][k]['ui']['1month']['commented']), reverse=True) top10list = [] for i in tmpClist: if i != '[email protected]' and i != '[email protected]': + xYear = statList['people'][i]['ui']['1year']['history'] + statList['people'][i]['ui']['1year']['commented'] + xMonth = statList['people'][i]['ui']['1month']['history'] + statList['people'][i]['ui']['1month']['commented'] x = {'mail': i, 'name': statList['people'][i]['name'], - 'month' :statList['people'][i]['ui']['1month']['total'], - 'year':statList['people'][i]['ui']['1year']['total']} + 'month' : xMonth, + 'year': xYear} top10list.append(x) if len(top10list) >= 10: break @@ -362,22 +351,14 @@ def report_ui(statList, openhubData, gerritData, gitData, bugzillaData, cfg): " + Bugzilla (topicUI) statistics\n" " {} (topicUI) bugs open, {} (needsUXEval) needs to be evaluated by the UXteam\n" " + Updates:".format( - util_build_escNumber('ui', 'topicUI', statList), - util_build_escNumber('ui', 'needsUXEval', statList)), file=fp) + util_build_escNumber('ui', 'topicUI'), + util_build_escNumber('ui', 'needsUXEval')), file=fp) xRow = [{'db': 'ui', 'tag': 'added', 'text': 'added'}, {'db': 'ui', 'tag': 'commented', 'text': 'commented'}, {'db': 'ui', 'tag': 'removed', 'text': 'removed'}, {'db': 'ui', 'tag': 'resolved', 'text': 'resolved'}] - print(util_build_matrix('BZ changes', xRow, None, statList), end='', file=fp) -# print(" + Distribution of people based on number of changes:", file=fp) -# xRow = [{'db': 'trendUI', 'tag': '1-5', 'text': '1-5'}, -# {'db': 'trendUI', 'tag': '6-25', 'text': '6-25'}, -# {'db': 'trendUI', 'tag': '26-50', 'text': '26-50'}, -# {'db': 'trendUI', 'tag': '51-100', 'text': '51-100'}, -# {'db': 'trendUI', 'tag': '100+', 'text': '100+'}] -# print(util_build_matrix('distribution', xRow, None, statList), end='', file=fp) - + print(util_build_matrix('BZ changes', xRow, 'contributor'), end='', file=fp) print(" + top 10 contributors:", file=fp) for i in range(0, 10): print(' {} made {} changes in 1 month, and {} changes in 1 year'.format( @@ -388,27 +369,28 @@ def report_ui(statList, openhubData, gerritData, gitData, bugzillaData, cfg): -def report_qa(statList, openhubData, gerritData, gitData, bugzillaData, cfg): +def report_qa(): + global statList, openhubData, gerritData, gitData, bugzillaData, cfg + return + tmpClist = sorted(statList['people'], key=lambda k: (statList['people'][k]['qa']['1month']['total']), reverse=True) + top10list = [] + for i in tmpClist: + if i != '[email protected]' and i != '[email protected]': + x = {'mail': i, 'name': statList['people'][i]['name'], + 'month' :statList['people'][i]['qa']['1month']['total'], + 'year':statList['people'][i]['qa']['1year']['total']} + top10list.append(x) + if len(top10list) >= 10: + break fp = open('/tmp/esc_qa_report.txt', 'w', encoding='utf-8') print('ESC QA report, generated {} based on stats.json from {}'.format( datetime.datetime.now().strftime("%Y-%m-%d"), statList['addDate']), file=fp) print("copy/paste to esc pad:\n" - "* qa update (xisco)\n", file=fp) - - print(" + UNCONFIRMED: {} ( )\n" - " + enhancements: {} ( )\n" - " + needsUXEval: {} ( )\n" - " + haveBackTrace: {} ( )\n" - " + needsDevAdvice: {} ( )\n".format( - statList['data']['qa']['unconfirmed']['count'], - statList['data']['qa']['unconfirmed']['enhancement'], - statList['data']['qa']['unconfirmed']['needsUXEval'], - statList['data']['qa']['unconfirmed']['haveBacktrace'], - statList['data']['qa']['unconfirmed']['needsDevAdvice'],), file=fp) - - print("\n + Bugzilla statistics:", file=fp) + "* qa update (xisco)\n" + " + Bugzilla statistics", file=fp) + xRow = [{'db': 'qa', 'tag': 'ASSIGNED', 'text': 'ASSIGNED'}, {'db': 'qa', 'tag': 'CLOSED', 'text': 'CLOSED'}, {'db': 'qa', 'tag': 'NEEDINFO', 'text': 'NEEDINFO'}, @@ -429,141 +411,25 @@ def report_qa(statList, openhubData, gerritData, gitData, bugzillaData, cfg): {'db': 'trendQA', 'tag': '100+', 'text': '100+'}] print(util_build_matrix('distribution', xRow, None, statList), end='', file=fp) - tmpClist = sorted(statList['people'], key=lambda k: (statList['people'][k]['qa']['1week']['owner']), reverse=True) - top10reporters = [] - for i in tmpClist: - if i != '[email protected]' and i != '[email protected]': - x = {'mail': i, - 'name': statList['people'][i]['name'], - 'week' :statList['people'][i]['qa']['1week']['owner'], - 'month' :statList['people'][i]['qa']['1month']['owner'], - '3month':statList['people'][i]['qa']['3month']['owner']} - top10reporters.append(x) - if len(top10reporters) >= 10: - break - - print("\n + top 10 bugs reporters:", file=fp) - xRow = [] - for i in top10reporters: - print(' {} reported {} bugs in 1 week, {} bugs in 1 month and {} bugs in 3 months'.format( - i['name'], i['week'], i['month'], i['3month']), file=fp) - - - tmpClist = sorted(statList['people'], key=lambda k: (statList['people'][k]['qa']['1week']['fixed']), reverse=True) - top10fixers = [] - for i in tmpClist: - if i != '[email protected]' and i != '[email protected]': - x = {'mail': i, - 'name': statList['people'][i]['name'], - 'week' :statList['people'][i]['qa']['1week']['fixed'], - 'month' :statList['people'][i]['qa']['1month']['fixed'], - '3month':statList['people'][i]['qa']['3month']['fixed']} - top10fixers.append(x) - if len(top10fixers) >= 10: - break - - print("\n + top 10 bugs fixers:", file=fp) - xRow = [] - for i in top10fixers: - print(' {} fixed {} bugs in 1 week, {} bugs in 1 month and {} bugs in 3 months'.format( - i['name'], i['week'], i['month'], i['3month']), file=fp) - - - tmpClist = sorted(statList['people'], key=lambda k: (statList['people'][k]['qa']['1week']['bisected']), reverse=True) - top10bisected = [] - for i in tmpClist: - if i != '[email protected]' and i != '[email protected]' and \ - statList['people'][i]['qa']['1week']['bisected'] > 0: - x = {'mail': i, - 'name': statList['people'][i]['name'], - 'week' :statList['people'][i]['qa']['1week']['bisected'], - 'month' :statList['people'][i]['qa']['1month']['bisected'], - '3month':statList['people'][i]['qa']['3month']['bisected']} - top10bisected.append(x) - if len(top10bisected) >= 10: - break - - print("\n + Done by:", file=fp) - xRow = [] - for i in top10bisected: - print(' {} bisected {} bugs in 1 week, {} bugs in 1 month and {} bugs in 3 months'.format( - i['name'], i['week'], i['month'], i['3month']), file=fp) - - - tmpClist = sorted(statList['people'], key=lambda k: (statList['people'][k]['qa']['1week']['bibisected']), reverse=True) - top10bibisected = [] - for i in tmpClist: - if i != '[email protected]' and i != '[email protected]' and \ - statList['people'][i]['qa']['1week']['bibisected'] > 0: - x = {'mail': i, - 'name': statList['people'][i]['name'], - 'week' :statList['people'][i]['qa']['1week']['bibisected'], - 'month' :statList['people'][i]['qa']['1month']['bibisected'], - '3month':statList['people'][i]['qa']['3month']['bibisected']} - top10bibisected.append(x) - if len(top10bibisected) >= 10: - break - - print("\n + Done by:", file=fp) - xRow = [] - for i in top10bibisected: - print(' {} bibisected {} bugs in 1 week, {} bugs in 1 month and {} bugs in 3 months'.format( - i['name'], i['week'], i['month'], i['3month']), file=fp) - - - tmpClist = sorted(statList['people'], key=lambda k: (statList['people'][k]['qa']['1week']['regression']), reverse=True) - top10regression = [] - for i in tmpClist: - if i != '[email protected]' and i != '[email protected]' and \ - statList['people'][i]['qa']['1week']['regression'] > 0: - x = {'mail': i, - 'name': statList['people'][i]['name'], - 'week' :statList['people'][i]['qa']['1week']['regression'], - 'month' :statList['people'][i]['qa']['1month']['regression'], - '3month':statList['people'][i]['qa']['3month']['regression']} - top10regression.append(x) - if len(top10regression) >= 10: - break - - print("\n + Done by:", file=fp) - xRow = [] - for i in top10regression: - print(' {} added \'regression\' to {} bugs in 1 week, {} bugs in 1 month and {} bugs in 3 months'.format( - i['name'], i['week'], i['month'], i['3month']), file=fp) - - tmpClist = sorted(statList['people'], key=lambda k: (statList['people'][k]['qa']['1week']['backtrace']), reverse=True) - top10backtrace = [] - for i in tmpClist: - if i != '[email protected]' and i != '[email protected]' and \ - statList['people'][i]['qa']['1week']['backtrace'] > 0: - x = {'mail': i, - 'name': statList['people'][i]['name'], - 'week' :statList['people'][i]['qa']['1week']['backtrace'], - 'month' :statList['people'][i]['qa']['1month']['backtrace'], - '3month':statList['people'][i]['qa']['3month']['backtrace']} - top10backtrace.append(x) - if len(top10backtrace) >= 10: - break - - print("\n + Done by:", file=fp) - xRow = [] - for i in top10backtrace: - print(' {} added a backtrace to {} bugs in 1 week, {} bugs in 1 month and {} bugs in 3 months'.format( - i['name'], i['week'], i['month'], i['3month']), file=fp) - + print("\n + top 10 contributors:", file=fp) + for i in range(0, 10): + print(' {} made {} changes in 1 month, and {} changes in 1 year'.format( + top10list[i]['mail'], top10list[i]['month'], top10list[i]['year']), file=fp) fp.close() return None -def report_myfunc(statList, openhubData, gerritData, gitData, bugzillaData, cfg): +def report_myfunc(): + global statList, openhubData, gerritData, gitData, bugzillaData, cfg # {'title': 'mail from me', 'addr': '[email protected]', 'file': '/tmp/myfile.txt'} return None -def DUMP_report(cfg, statList) : +def DUMP_report() : + global cfg, statList return tot = len(statList['list']['easyHacks_comments']) print('duming {} easyHacks with more than 5 comments:'.format(tot)) @@ -597,6 +463,7 @@ def DUMP_report(cfg, statList) : def runCfg(platform): + global cfg if 'esc_homedir' in os.environ: homeDir = os.environ['esc_homedir'] else: @@ -606,7 +473,7 @@ def runCfg(platform): cfg['platform'] = platform print("Reading and writing data to " + cfg['homedir']) - cfg['contributor'] = util_load_data_file(cfg['homedir'] + 'dump/developers_dump.json') + cfg['contributor'] = util_load_data_file(cfg['homedir'] + 'award.json') cfg['nowDate'] = datetime.datetime.now().replace(hour=0, minute=0, second=0, microsecond=0) cfg['cutDate'] = cfg['nowDate'] - datetime.timedelta(days=365) cfg['1weekDate'] = cfg['nowDate'] - datetime.timedelta(days=7) @@ -617,7 +484,9 @@ def runCfg(platform): -def runReport(cfg): +def runReport(): + global cfg, statList, openhubData, bugzillaData, gerritData, gitData + statList = util_load_data_file(cfg['homedir'] + 'stats.json') openhubData = util_load_data_file(cfg['homedir'] + 'dump/openhub_dump.json') bugzillaData = util_load_data_file(cfg['homedir'] + 'dump/bugzilla_dump.json') @@ -625,16 +494,16 @@ def runReport(cfg): gitData = util_load_data_file(cfg['homedir'] + 'dump/git_dump.json') xMail = [] - x = report_mentoring(statList, openhubData, gerritData, gitData, bugzillaData, cfg) + x = report_mentoring() if not x is None: xMail.append(x) - x = report_ui(statList, openhubData, gerritData, gitData, bugzillaData, cfg) + x = report_ui() if not x is None: xMail.append(x) - x = report_qa(statList, openhubData, gerritData, gitData, bugzillaData, cfg) + x = report_qa() if not x is None: xMail.append(x) - x = report_myfunc(statList, openhubData, gerritData, gitData, bugzillaData, cfg) + x = report_myfunc() if not x is None: xMail.append(x) @@ -648,4 +517,5 @@ def runReport(cfg): if __name__ == '__main__': - runReport(runCfg(sys.platform)) + runCfg(sys.platform) + runReport() _______________________________________________ Libreoffice-commits mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
