Merge "Add tool to analyze check and gate success rates"
This commit is contained in:
commit
3e03b7481d
75
tools/gerrit-success-rate.py
Normal file
75
tools/gerrit-success-rate.py
Normal file
@ -0,0 +1,75 @@
|
||||
import datetime
|
||||
import json
|
||||
import requests
|
||||
|
||||
|
||||
today = datetime.date.today()
|
||||
thirty_days = datetime.timedelta(days=30)
|
||||
last_month = today - thirty_days
|
||||
str_today = today.strftime('%Y-%m-%d')
|
||||
str_last_month = last_month.strftime('%Y-%m-%d')
|
||||
|
||||
|
||||
more_changes = True
|
||||
change_count = 0
|
||||
check_successes = 0.0
|
||||
check_failures = 0.0
|
||||
gate_successes = 0.0
|
||||
gate_failures = 0.0
|
||||
while(more_changes):
|
||||
more_changes = False
|
||||
# We look only at merged changes to ignore Do Not Merge changes that are
|
||||
# expected to fail intentionally.
|
||||
r = requests.get('https://review.opendev.org/changes/?q=status:merged+'
|
||||
'after:{after}+before:{before}&n=100&S={offset}'.format(
|
||||
after=str_last_month,
|
||||
before=str_today,
|
||||
offset=(change_count + 1)))
|
||||
|
||||
content = r.content[4:]
|
||||
changes = json.loads(content)
|
||||
|
||||
for change in changes:
|
||||
r = requests.get('https://review.opendev.org/changes/%s/detail' % change['id'])
|
||||
content = r.content[4:]
|
||||
details = json.loads(content)
|
||||
change_count += 1
|
||||
for message in details['messages']:
|
||||
if 'author' not in message or 'message' not in message:
|
||||
continue
|
||||
if message['author']['_account_id'] != 22348:
|
||||
# Don't care about non zuul comments
|
||||
continue
|
||||
if '(check pipeline)' in message['message']:
|
||||
if 'Build succeeded' in message['message']:
|
||||
check_successes += 1
|
||||
elif 'Build failed' in message['message']:
|
||||
# explicitly check for failed builds here to avoid merge
|
||||
# conflict messages
|
||||
check_failures += 1
|
||||
if '(gate pipeline)' in message['message']:
|
||||
if 'Build succeeded' in message['message']:
|
||||
gate_successes += 1
|
||||
elif 'Build failed' in message['message']:
|
||||
# explicitly check for failed builds here to avoid merge
|
||||
# conflict messages
|
||||
gate_failures += 1
|
||||
if '_more_changes' in change:
|
||||
more_changes = True
|
||||
|
||||
print('Changes: %s' % change_count)
|
||||
|
||||
print('Check Failures: %s' % check_failures)
|
||||
print('Check Successes: %s' % check_successes)
|
||||
check_total = check_failures + check_successes
|
||||
print('Check Rate of failure: %s' % (check_failures/check_total))
|
||||
|
||||
print('Gate Failures: %s' % gate_failures)
|
||||
print('Gate Successes: %s' % gate_successes)
|
||||
gate_total = gate_failures + gate_successes
|
||||
print('Gate Rate of failure: %s' % (gate_failures/gate_total))
|
||||
|
||||
print('Total Failures: %s' % (check_failures + gate_failures))
|
||||
print('Total Successes: %s' % (check_successes + gate_successes))
|
||||
total = check_total + gate_total
|
||||
print('Total Rate of failure: %s' % ((check_failures + gate_failures)/total))
|
Loading…
Reference in New Issue
Block a user