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