From a085b5dc52ccd9d1bb7f928aaaed73cb3c2c40cc Mon Sep 17 00:00:00 2001 From: Matt Smith Date: Tue, 7 Nov 2017 15:33:28 +1100 Subject: [PATCH] Adding gerrit request file with request methods - These methods help facilitate querying gerrit for different statistics such as earliest merged commit date and number of merged commits - Next step will be to incorporate these methods into a few IRC bots Change-Id: Ic370d48c7d079a40d012bcaa6ae0cda78454e407 --- statusbot/gerritrequest.py | 67 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 statusbot/gerritrequest.py diff --git a/statusbot/gerritrequest.py b/statusbot/gerritrequest.py new file mode 100644 index 0000000..66c085a --- /dev/null +++ b/statusbot/gerritrequest.py @@ -0,0 +1,67 @@ +#!/usr/bin/env python + +from __future__ import print_function, unicode_literals + +import json +import requests + +from dateutil.parser import parse as dparse + +BASE_URL = "https://review.openstack.org/changes/?q=%s" + + +def greq(**kwargs): + gfilter = [] + for k, v in kwargs.items(): + gfilter.append('%s:%s' % (k, v)) + resp = requests.get(BASE_URL % ' AND '.join(gfilter)) + return json.loads(resp.text[4:]) + + +def get_merged(author): + return greq(owner="{%s}" % author, status='merged') + + +def get_abandoned(author): + return greq(owner="{%s}" % author, status='abandoned') + + +def earliest_merged(merged): + return merged[-1]['submitted'].split()[0] + + +def open_review(merged): + longest = None + for review in merged: + d1 = dparse(review['created']) + d2 = dparse(review['submitted']) + dt = d2 - d1 + if not longest or dt > longest: + longest = dt + return longest.days + + +def lines_added(merged): + return sum(map(lambda x: x['insertions'], merged)) + + +def lines_deleted(merged): + return sum(map(lambda x: x['deletions'], merged)) + + +def projects(merged): + found = set() + map(lambda x: found.add(x['project']), merged) + return "\n\t".join(list(sorted(found))) + + +def stats(author): + merged = get_merged(author) + abandoned = get_abandoned(author) + return "\n".join(["Cake Day: %s" % earliest_merged(merged), + "Num Merged: %s" % len(merged), + "Num Abandoned: %s" % len(abandoned), + "Longest Open Merged Review: %s" % open_review(merged), + "Lines Added: %s" % lines_added(merged), + "Lines Deleted: %s" % lines_deleted(merged), + "Projects: %s" % projects(merged)])