diff --git a/augur/datasources/augur_db/augur_db.py b/augur/datasources/augur_db/augur_db.py index 2a7cc7a85d..d0e4624e94 100644 --- a/augur/datasources/augur_db/augur_db.py +++ b/augur/datasources/augur_db/augur_db.py @@ -692,6 +692,182 @@ def code_changes_lines(self, repo_group_id, repo_id=None, period='day', begin_da 'begin_date': begin_date, 'end_date': end_date}) return results + @annotate(tag='reviews') + def reviews(self, repo_group_id, repo_id=None, period='day', begin_date=None, end_date=None): + """ Returns a timeseris of new reviews or pull requests opened + + :param repo_group_id: The repository's repo_group_id + :param repo_id: The repository's repo_id, defaults to None + :param period: To set the periodicity to 'day', 'week', 'month' or 'year', defaults to 'day' + :param begin_date: Specifies the begin date, defaults to '1970-1-1 00:00:00' + :param end_date: Specifies the end date, defaults to datetime.now() + :return: DataFrame of new reviews/period + """ + if not begin_date: + begin_date = '1970-1-1' + if not end_date: + end_date = datetime.datetime.now().strftime('%Y-%m-%d') + + if not repo_id: + reviews_SQL = s.sql.text(""" + SELECT + pull_requests.repo_id, + repo_name, + DATE_TRUNC(:period, pull_requests.pr_created_at) AS date, + COUNT(pr_src_id) AS pull_requests + FROM pull_requests JOIN repo ON pull_requests.repo_id = repo.repo_id + WHERE pull_requests.repo_id IN + (SELECT repo_id FROM repo WHERE repo_group_id = :repo_group_id) + AND pull_requests.pr_created_at + BETWEEN to_timestamp(:begin_date, 'YYYY-MM-DD') + AND to_timestamp(:end_date, 'YYYY-MM-DD') + GROUP BY pull_requests.repo_id, repo_name, date + ORDER BY pull_requests.repo_id, date + """) + + results = pd.read_sql(reviews_SQL, self.db, + params={'period': period, 'repo_group_id': repo_group_id, + 'begin_date': begin_date, 'end_date': end_date }) + return results + + else: + reviews_SQL = s.sql.text(""" + SELECT + repo_name, + DATE_TRUNC(:period, pull_requests.pr_created_at) AS date, + COUNT(pr_src_id) AS pull_requests + FROM pull_requests JOIN repo ON pull_requests.repo_id = repo.repo_id + WHERE pull_requests.repo_id = :repo_id + AND pull_requests.pr_created_at + BETWEEN to_timestamp(:begin_date, 'YYYY-MM-DD HH24:MI:SS') + AND to_timestamp(:end_date, 'YYYY-MM-DD HH24:MI:SS') + GROUP BY date, repo_name + ORDER BY date + """) + + results = pd.read_sql(reviews_SQL, self.db, + params={'period': period, 'repo_id': repo_id, + 'begin_date': begin_date, 'end_date': end_date}) + return results + + @annotate(tag='reviews-accepted') + def reviews_accepted(self, repo_group_id, repo_id=None, period='day', begin_date=None, end_date=None): + """Returns a timeseries of number of reviews or pull requests accepted. + + :param repo_group_id: The repository's repo_group_id + :param repo_id: The repository's repo_id, defaults to None + :param period: To set the periodicity to 'day', 'week', 'month' or 'year', defaults to 'day' + :param begin_date: Specifies the begin date, defaults to '1970-1-1 00:00:00' + :param end_date: Specifies the end date, defaults to datetime.now() + :return: DataFrame of accepted reviews/period + """ + if not begin_date: + begin_date = '1970-1-1' + if not end_date: + end_date = datetime.datetime.now().strftime('%Y-%m-%d') + + if not repo_id: + reviews_accepted_SQL = s.sql.text(""" + SELECT + pull_requests.repo_id, + repo.repo_name, + DATE_TRUNC(:period, pull_requests.pr_merged_at) AS date, + COUNT(pr_src_id) AS pull_requests + FROM pull_requests JOIN repo ON pull_requests.repo_id = repo.repo_id + WHERE pull_requests.repo_id IN + (SELECT repo_id FROM repo WHERE repo_group_id = :repo_group_id) + AND pr_merged_at IS NOT NULL + AND pr_merged_at + BETWEEN to_timestamp(:begin_date, 'YYYY-MM-DD') + AND to_timestamp(:end_date, 'YYYY-MM-DD') + GROUP BY pull_requests.repo_id, repo_name, date + ORDER BY pull_requests.repo_id, date + """) + + results = pd.read_sql(reviews_accepted_SQL, self.db, + params={'period': period, 'repo_group_id': repo_group_id, + 'begin_date': begin_date, 'end_date': end_date}) + return results + else: + reviews_accepted_SQL = s.sql.text(""" + SELECT + repo.repo_name, + DATE_TRUNC(:period, pull_requests.pr_merged_at) AS date, + COUNT(pr_src_id) AS pull_requests + FROM pull_requests JOIN repo ON pull_requests.repo_id = repo.repo_id + WHERE pull_requests.repo_id = :repo_id + AND pr_merged_at IS NOT NULL + AND pr_merged_at + BETWEEN to_timestamp(:begin_date, 'YYYY-MM-DD') + AND to_timestamp(:end_date, 'YYYY-MM-DD') + GROUP BY date, repo.repo_name + ORDER BY date + """) + + results = pd.read_sql(reviews_accepted_SQL, self.db, + params={'period': period, 'repo_id': repo_id, + 'begin_date': begin_date, 'end_date': end_date}) + return results + + @annotate(tag='reviews-declined') + def reviews_declined(self, repo_group_id, repo_id=None, period='day', begin_date=None, end_date=None): + """ Returns a time series of reivews declined + + :param repo_group_id: The repository's repo_group_id + :param repo_id: The repository's repo_id, defaults to None + :param period: To set the periodicity to 'day', 'week', 'month' or 'year', defaults to 'day' + :param begin_date: Specifies the begin date, defaults to '1970-1-1 00:00:00' + :param end_date: Specifies the end date, defaults to datetime.now() + :return: DataFrame of declined reviews/period + """ + if not begin_date: + begin_date = '1970-1-1' + if not end_date: + end_date = datetime.datetime.now().strftime('%Y-%m-%d') + + if not repo_id: + reviews_declined_SQL = s.sql.text(""" + SELECT + pull_requests.repo_id, + repo.repo_name, + DATE_TRUNC(:period, pull_requests.pr_closed_at) AS date, + COUNT(pr_src_id) AS pull_requests + FROM pull_requests JOIN repo ON pull_requests.repo_id = repo.repo_id + WHERE pull_requests.repo_id IN + (SELECT repo_id FROM repo WHERE repo_group_id = :repo_group_id) + AND pr_src_state = 'closed' AND pr_merged_at IS NULL + AND pr_closed_at + BETWEEN to_timestamp(:begin_date, 'YYYY-MM-DD') + AND to_timestamp(:end_date, 'YYYY-MM-DD') + GROUP BY pull_requests.repo_id, repo_name, date + ORDER BY pull_requests.repo_id, date + """) + + results = pd.read_sql(reviews_declined_SQL, self.db, + params={'period': period, 'repo_group_id': repo_group_id, + 'begin_date': begin_date, 'end_date': end_date }) + return results + else: + reviews_declined_SQL = s.sql.text(""" + SELECT + repo.repo_name, + DATE_TRUNC(:period, pull_requests.pr_closed_at) AS date, + COUNT(pr_src_id) AS pull_requests + FROM pull_requests JOIN repo ON pull_requests.repo_id = repo.repo_id + WHERE pull_requests.repo_id = :repo_id + AND pr_src_state = 'closed' AND pr_merged_at IS NULL + AND pr_closed_at + BETWEEN to_timestamp(:begin_date, 'YYYY-MM-DD') + AND to_timestamp(:end_date, 'YYYY-MM-DD') + GROUP BY date, repo.repo_name + ORDER BY date + """) + + results = pd.read_sql(reviews_declined_SQL, self.db, + params={'period': period, 'repo_id': repo_id, + 'begin_date': begin_date, 'end_date': end_date}) + return results + @annotate(tag='issues-new') def issues_new(self, repo_group_id, repo_id=None, period='day', begin_date=None, end_date=None): """Returns a timeseries of new issues opened. @@ -855,6 +1031,70 @@ def issues_closed(self, repo_group_id, repo_id=None, period='day', begin_date=No 'begin_date': begin_date, 'end_date': end_date}) return results + @annotate(tag='review-duration') + def review_duration(self, repo_group_id, repo_id=None, begin_date=None, end_date=None): + """ Returns the duartion of each accepted review. + + :param repo_group_id: The repository's repo_group_id + :param repo_id: The repository's repo_id, defaults to None + :param begin_date: Specifies the begin date, defaults to '1970-1-1 00:00:00' + :param end_date: Specifies the end date, defaults to datetime.now() + :return: DataFrame of pull request id with the corresponding duration + """ + if not begin_date: + begin_date = '1970-1-1' + if not end_date: + end_date = datetime.datetime.now().strftime('%Y-%m-%d') + + if not repo_id: + review_duration_SQL = s.sql.text(""" + SELECT + pull_requests.repo_id, + repo.repo_name, + pull_requests.pull_request_id, + pull_requests.pr_created_at AS created_at, + pull_requests.pr_merged_at AS merged_at, + (pr_merged_at - pr_created_at) AS duration + FROM pull_requests JOIN repo ON pull_requests.repo_id = repo.repo_id + WHERE pull_requests.repo_id IN + (SELECT repo_id FROM repo WHERE repo_group_id = :repo_group_id) + AND pr_merged_at IS NOT NULL + AND pr_created_at + BETWEEN to_timestamp(:begin_date, 'YYYY-MM-DD') + AND to_timestamp(:end_date, 'YYYY-MM-DD') + ORDER BY pull_requests.repo_id, pull_requests.pull_request_id + """) + + results = pd.read_sql(review_duration_SQL, self.db, + params={'repo_group_id': repo_group_id, + 'begin_date': begin_date, + 'end_date': end_date}) + results['duration'] = results['duration'].astype(str) + return results + else: + review_duration_SQL = s.sql.text(""" + SELECT + repo_name, + pull_request_id, + pr_created_at AS created_at, + pr_merged_at AS merged_at, + (pr_merged_at - pr_created_at) AS duration + FROM pull_requests JOIN repo ON pull_requests.repo_id = repo.repo_id + WHERE pull_requests.repo_id = :repo_id + AND pr_merged_at IS NOT NULL + AND pr_created_at + BETWEEN to_timestamp(:begin_date, 'YYYY-MM-DD') + AND to_timestamp(:end_date, 'YYYY-MM-DD') + ORDER BY pull_requests.repo_id, pull_request_id + """) + + results = pd.read_sql(review_duration_SQL, self.db, + params={'repo_id': repo_id, + 'begin_date': begin_date, + 'end_date': end_date}) + results['duration'] = results['duration'].astype(str) + return results + @annotate(tag='issue-duration') def issue_duration(self, repo_group_id, repo_id=None, begin_date=None, end_date=None): """Returns the duration of each issue. @@ -1388,7 +1628,7 @@ def license_declared(self, repo_group_id, repo_id=None): repo_name = pd.read_sql(s.sql.text('SELECT repo_name FROM repo WHERE repo_group_id = :repo_group_id'), self.spdx_db, params={'repo_group_id', repo_group_id}) if repo_name.empty: return pd.DataFrame() - + repo_name_list = repo_name['repo_name'].tolist() license_declared_SQL = s.sql.text(""" SELECT packages.name as repo_name, licenses.short_name, COUNT(files_licenses.file_id) as count @@ -1399,11 +1639,11 @@ def license_declared(self, repo_group_id, repo_id=None): GROUP BY licenses.short_name, repo_name ORDER BY count DESC """) - + results = pd.read_sql(license_declared_SQL, self.spdx_db, params={'repo_name_list': repo_name_list}) return results - + @annotate(tag='license-coverage') def license_coverage(self, repo_group_id, repo_id=None): """Returns the declared license @@ -1475,11 +1715,11 @@ def license_coverage(self, repo_group_id, repo_id=None): )b WHERE a.name = b.name """) - + results = pd.read_sql(license_declared_SQL, self.spdx_db, params={'repo_name_list': repo_name_list}) return results - + @annotate(tag='license_count') def license_count(self, repo_group_id, repo_id=None): """Returns the declared license @@ -1579,13 +1819,13 @@ def license_count(self, repo_group_id, repo_id=None): ORDER BY license_declared_file DESC ) c WHERE a.name = b.name - AND b.name = c.name + AND b.name = c.name """) - + results = pd.read_sql(license_declared_SQL, self.spdx_db, params={'repo_name_list': repo_name_list}) return results - + @annotate(tag='issues-maintainer-response-duration') def issues_maintainer_response_duration(self, repo_group_id, repo_id=None, begin_date=None, end_date=None): @@ -1661,7 +1901,7 @@ def issues_maintainer_response_duration(self, repo_group_id, repo_id=None, begin @annotate(tag='committers') def committers(self, repo_group_id, repo_id=None, begin_date=None, end_date=None, period='day'): - + if not begin_date: begin_date = '1970-1-1 00:00:01' if not end_date: @@ -1706,7 +1946,7 @@ def committers(self, repo_group_id, repo_id=None, begin_date=None, end_date=None results = pd.read_sql(committersSQL, self.db, params={'repo_id': repo_id, 'repo_group_id': repo_group_id,'begin_date': begin_date, 'end_date': end_date, 'period':period}) - return results + return results ##################################### diff --git a/augur/datasources/augur_db/routes.py b/augur/datasources/augur_db/routes.py index 77d686df82..5b1a675d35 100644 --- a/augur/datasources/augur_db/routes.py +++ b/augur/datasources/augur_db/routes.py @@ -294,6 +294,210 @@ def get_repos_for_dosocs(): """ server.addRepoMetric(augur_db.code_changes_lines, 'code-changes-lines') + """ + @api {get} /repo-groups/:repo_group_id/reviews Reviews (Repo Group) + @apiName reviews-repo-group + @apiGroup Evolution + @apiDescription Time series of number of new reviews / pull requests opened within a certain period. + CHAOSS Metric Definition + @apiParam {string} repo_group_id Repository Group ID + @apiParam {string=day, week, month, year} [period="day"] Periodicity specification. + @apiParam {string} [begin_date="1970-1-1 0:0:0"] Beginning date specification. E.g. values: `2018`, `2018-05`, `2019-05-01` + @apiParam {string} [end_date="current date"] Ending date specification. E.g. values: `2018`, `2018-05`, `2019-05-01` + @apiSuccessExample {json} Success-Response: + [ + { + "repo_id": 21035, + "repo_name": "prototype-ujs", + "date": "2010-01-01T00:00:00.000Z", + "pull_requests": 1 + }, + { + "repo_id": 21035, + "repo_name": "prototype-ujs", + "date": "2011-01-01T00:00:00.000Z", + "pull_requests": 5 + }, + { + "repo_id": 21042, + "repo_name": "pjax_rails", + "date": "2011-01-01T00:00:00.000Z", + "pull_requests": 16 + }, + { + "repo_id": 21042, + "repo_name": "pjax_rails", + "date": "2012-01-01T00:00:00.000Z", + "pull_requests": 14 + } + ] + """ + server.addRepoGroupMetric(augur_db.reviews, 'reviews') + + """ + @api {get} /repo-groups/:repo_group_id/repos/:repo_id/reviews Reviews (Repo) + @apiName reviews-repo + @apiGroup Evolution + @apiDescription Time series of number of new reviews / pull requests opened within a certain period. + CHAOSS Metric Definition + @apiParam {string} repo_group_id Repository Group ID. + @apiParam {string} repo_id Repository ID. + @apiParam {string=day, week, month, year} [period="day"] Periodicity specification. + @apiParam {string} [begin_date="1970-1-1 0:0:0"] Beginning date specification. E.g. values: `2018`, `2018-05`, `2019-05-01` + @apiParam {string} [end_date="current date"] Ending date specification. E.g. values: `2018`, `2018-05`, `2019-05-01` + @apiSuccessExample {json} Success-Response: + [ + { + "repo_name": "graphql-spec", + "date": "2016-01-01T00:00:00.000Z", + "pull_requests": 37 + }, + { + "repo_name": "graphql-spec", + "date": "2017-01-01T00:00:00.000Z", + "pull_requests": 49 + }, + { + "repo_name": "graphql-spec", + "date": "2018-01-01T00:00:00.000Z", + "pull_requests": 63 + } + ] + """ + server.addRepoMetric(augur_db.reviews, 'reviews') + + """ + @api {get} /repo-groups/:repo_group_id/reviews-accepted Reviews Accepted (Repo Group) + @apiName reviews-accepted-repo-group + @apiGroup Evolution + @apiDescription Time series of number of accepted reviews / pull requests opened within a certain period. + CHAOSS Metric Definition + @apiParam {string} repo_group_id Repository Group ID + @apiParam {string=day, week, month, year} [period="day"] Periodicity specification. + @apiParam {string} [begin_date="1970-1-1 0:0:0"] Beginning date specification. E.g. values: `2018`, `2018-05`, `2019-05-01` + @apiParam {string} [end_date="current date"] Ending date specification. E.g. values: `2018`, `2018-05`, `2019-05-01` + @apiSuccessExample {json} Success-Response: + [ + { + "repo_id": 21035, + "repo_name": "prototype-ujs", + "date": "2010-01-01T00:00:00.000Z", + "pull_requests": 1 + }, + { + "repo_id": 21042, + "repo_name": "pjax_rails", + "date": "2011-01-01T00:00:00.000Z", + "pull_requests": 4 + }, + { + "repo_id": 21042, + "repo_name": "pjax_rails", + "date": "2012-01-01T00:00:00.000Z", + "pull_requests": 4 + } + ] + """ + server.addRepoGroupMetric(augur_db.reviews_accepted, 'reviews-accepted') + + """ + @api {get} /repo-groups/:repo_group_id/repos/:repo_id/reviews-accepted Reviews Accepted (Repo) + @apiName reviews-accepted-repo + @apiGroup Evolution + @apiDescription Time series of number of accepted reviews / pull requests opened within a certain period. + CHAOSS Metric Definition + @apiParam {string} repo_group_id Repository Group ID. + @apiParam {string} repo_id Repository ID. + @apiParam {string=day, week, month, year} [period="day"] Periodicity specification. + @apiParam {string} [begin_date="1970-1-1 0:0:0"] Beginning date specification. E.g. values: `2018`, `2018-05`, `2019-05-01` + @apiParam {string} [end_date="current date"] Ending date specification. E.g. values: `2018`, `2018-05`, `2019-05-01` + @apiSuccessExample {json} Success-Response: + [ + { + "repo_name": "graphql-spec", + "date": "2016-01-01T00:00:00.000Z", + "pull_requests": 30 + }, + { + "repo_name": "graphql-spec", + "date": "2017-01-01T00:00:00.000Z", + "pull_requests": 37 + }, + { + "repo_name": "graphql-spec", + "date": "2018-01-01T00:00:00.000Z", + "pull_requests": 46 + } + ] + """ + server.addRepoMetric(augur_db.reviews_accepted, 'reviews-accepted') + + """ + @api {get} /repo-groups/:repo_group_id/reviews-declined Reviews Declined (Repo Group) + @apiName reviews-declined-repo-group + @apiGroup Evolution + @apiDescription Time series of number of declined reviews / pull requests opened within a certain period. + CHAOSS Metric Definition + @apiParam {string} repo_group_id Repository Group ID + @apiParam {string=day, week, month, year} [period="day"] Periodicity specification. + @apiParam {string} [begin_date="1970-1-1 0:0:0"] Beginning date specification. E.g. values: `2018`, `2018-05`, `2019-05-01` + @apiParam {string} [end_date="current date"] Ending date specification. E.g. values: `2018`, `2018-05`, `2019-05-01` + @apiSuccessExample {json} Success-Response: + [ + { + "repo_id": 21035, + "repo_name": "prototype-ujs", + "date": "2010-01-01T00:00:00.000Z", + "pull_requests": 1 + }, + { + "repo_id": 21042, + "repo_name": "pjax_rails", + "date": "2011-01-01T00:00:00.000Z", + "pull_requests": 3 + }, + { + "repo_id": 21042, + "repo_name": "pjax_rails", + "date": "2012-01-01T00:00:00.000Z", + "pull_requests": 6 + } + ] + """ + server.addRepoGroupMetric(augur_db.reviews_declined, 'reviews-declined') + + """ + @api {get} /repo-groups/:repo_group_id/repos/:repo_id/reviews-declined Reviews Declined (Repo) + @apiName reviews-declined-repo + @apiGroup Evolution + @apiDescription Time series of number of declined reviews / pull requests opened within a certain period. + CHAOSS Metric Definition + @apiParam {string} repo_group_id Repository Group ID. + @apiParam {string} repo_id Repository ID. + @apiParam {string=day, week, month, year} [period="day"] Periodicity specification. + @apiParam {string} [begin_date="1970-1-1 0:0:0"] Beginning date specification. E.g. values: `2018`, `2018-05`, `2019-05-01` + @apiParam {string} [end_date="current date"] Ending date specification. E.g. values: `2018`, `2018-05`, `2019-05-01` + @apiSuccessExample {json} Success-Response: + [ + { + "repo_name": "graphql-spec", + "date": "2016-01-01T00:00:00.000Z", + "pull_requests": 11 + }, + { + "repo_name": "graphql-spec", + "date": "2017-01-01T00:00:00.000Z", + "pull_requests": 16 + }, + { + "repo_name": "graphql-spec", + "date": "2018-01-01T00:00:00.000Z", + "pull_requests": 4 + } + ] + """ + server.addRepoMetric(augur_db.reviews_declined, 'reviews-declined') + """ @api {get} /repo-groups/:repo_group_id/issues-new Issues New (Repo Group) @apiName issues-new-repo-group @@ -492,6 +696,75 @@ def get_repos_for_dosocs(): """ server.addRepoMetric(augur_db.issues_closed, 'issues-closed') + """ + @api {get} /repo-groups/:repo_group_id/review-duration Review Duration (Repo Group) + @apiName review-duration-repo-group + @apiGroup Evolution + @apiDescription Time since an review/pull request is proposed until it is accepted. + CHAOSS Metric Definition + @apiParam {string} repo_group_id Repository Group ID + @apiParam {string} [begin_date="1970-1-1 0:0:0"] Beginning date specification. E.g. values: `2018`, `2018-05`, `2019-05-01` + @apiParam {string} [end_date="current date"] Ending date specification. E.g. values: `2018`, `2018-05`, `2019-05-01` + @apiSuccessExample {json} Success-Response: + [ + { + "repo_id": 21035, + "repo_name": "prototype-ujs", + "pull_request_id": 25386, + "created_at": "2010-09-28T19:07:15.000Z", + "merged_at": "2010-09-29T17:46:59.000Z", + "duration": "0 days 22:39:44.000000000" + }, + { + "repo_id": 21042, + "repo_name": "pjax_rails", + "pull_request_id": 25392, + "created_at": "2011-05-18T14:11:23.000Z", + "merged_at": "2011-05-18T19:03:01.000Z", + "duration": "0 days 04:51:38.000000000" + }, + { + "repo_id": 21042, + "repo_name": "pjax_rails", + "pull_request_id": 25396, + "created_at": "2011-05-25T10:09:01.000Z", + "merged_at": "2011-05-25T19:30:01.000Z", + "duration": "0 days 09:21:00.000000000" + } + ] + """ + server.addRepoGroupMetric(augur_db.review_duration, 'review-duration') + + """ + @api {get} /repo-groups/:repo_group_id/repos/:repo_id/review-duration review Duration (Repo) + @apiName review-duration-repo + @apiGroup Evolution + @apiDescription Time since an review/pull request is proposed until it is accepted. + CHAOSS Metric Definition + @apiParam {string} repo_group_id Repository Group ID. + @apiParam {string} repo_id Repository ID. + @apiParam {string} [begin_date="1970-1-1 0:0:0"] Beginning date specification. E.g. values: `2018`, `2018-05`, `2019-05-01` + @apiParam {string} [end_date="current date"] Ending date specification. E.g. values: `2018`, `2018-05`, `2019-05-01` + @apiSuccessExample {json} Success-Response: + [ + { + "repo_name": "graphql-spec", + "pull_request_id": 25374, + "created_at": "2019-01-02T11:02:08.000Z", + "merged_at": "2019-07-05T09:10:45.000Z", + "duration": "183 days 22:08:37.000000000" + }, + { + "repo_name": "graphql-spec", + "pull_request_id": 25378, + "created_at": "2019-03-28T13:44:04.000Z", + "merged_at": "2019-07-03T23:10:36.000Z", + "duration": "97 days 09:26:32.000000000" + } + ] + """ + server.addRepoMetric(augur_db.review_duration, 'review-duration') + """ @api {get} /repo-groups/:repo_group_id/issue-duration Issue Duration (Repo Group) @apiName issue-duration-repo-group diff --git a/workers/gh_pr_worker/gh_pr_worker/worker.py b/workers/gh_pr_worker/gh_pr_worker/worker.py index 36183fd7ef..4f0a6ed5ef 100644 --- a/workers/gh_pr_worker/gh_pr_worker/worker.py +++ b/workers/gh_pr_worker/gh_pr_worker/worker.py @@ -4,6 +4,7 @@ import os import sys import time +import traceback from datetime import datetime from multiprocessing import Process, Queue from urllib.parse import urlparse @@ -260,18 +261,19 @@ def collect(self): raise ValueError(f'{message.type} is not a recognized task type') if message.type == 'TASK': - try: - git_url = message.entry_info['task']['given']['git_url'] - self.query_pr({'git_url': git_url, 'repo_id': message.entry_info['repo_id']}) - except Exception as e: - logging.info("Worker ran into an error for task: {}\n".format(message.entry_info['task'])) - logging.info("Error encountered: " + str(e) + "\n") - logging.info("Notifying broker and logging task failure in database...\n") + # try: + git_url = message.entry_info['task']['given']['git_url'] + self.query_pr({'git_url': git_url, 'repo_id': message.entry_info['repo_id']}) + # except Exception as e: + # logging.error("Worker ran into an error for task: {}\n".format(message.entry_info['task'])) + # logging.error("Error encountered: " + str(e) + "\n") + # traceback.format_exc() + # logging.info("Notifying broker and logging task failure in database...\n") - message.entry_info['task']['worker_id'] = self.config['id'] + # message.entry_info['task']['worker_id'] = self.config['id'] - requests.post("http://localhost:{}/api/unstable/task_error".format( - self.config['broker_port']), json=message.entry_info['task']) + # requests.post("http://localhost:{}/api/unstable/task_error".format( + # self.config['broker_port']), json=message.entry_info['task']) # Add to history table # task_history = { @@ -298,9 +300,7 @@ def collect(self): # logging.info("Updated job process for model: " + message.entry_info['task']['models'][0] + "\n") # Reset results counter for next task - self.results_counter = 0 - logging.info("passing") - pass + self.results_counter = 0 logging.info("passed") def query_pr(self, entry_info): @@ -356,6 +356,7 @@ def query_pr(self, entry_info): pr = { 'pull_request_id': self.pr_id_inc, + 'repo_id': repo_id, 'pr_url': pr_dict['url'], 'pr_src_id': pr_dict['id'], 'pr_src_node_id': None, @@ -486,10 +487,10 @@ def query_pr_events(self, owner, repo, gh_pr_no, pr_id): for pr_event_dict in pr_events: - if 'actor' in pr_event_dict: + if pr_event_dict['actor']: cntrb_id = self.find_id_from_login(pr_event_dict['actor']['login']) else: - cntrb_id = None + cntrb_id = 1 pr_event = { 'pr_event_id': self.event_id_inc,