Limit changes list in review report on server side

Also adds an option 'report-default-limit' that allows to configure
default amount of changes to present in open changes report, in case
if limit query parameter is not provided.

Change-Id: I916d40c934a1dc2977ac76c4b0ceed3c80385926
This commit is contained in:
Andrii Ostapenko 2019-03-23 14:18:08 -05:00
parent 048b924b78
commit 627edcf745
4 changed files with 23 additions and 10 deletions

View File

@ -191,3 +191,6 @@
# Password for github access (string value)
#github_password = password
# Default number of open reviews to present in open changes report
#report_default_limit = 5

View File

@ -36,6 +36,9 @@ DASHBOARD_OPTS = [
help='Name of file to store python profiler data'),
cfg.IntOpt('age-warn', default=2 * 24 * 60 * 60,
help='Warn if the age of data is more than this value, sec'),
cfg.IntOpt('report-default-limit', default=5,
help='Number of open reviews to present in open changes '
'report'),
]

View File

@ -20,6 +20,7 @@ import operator
import time
import flask
from oslo_config import cfg
from stackalytics.dashboard import decorators
from stackalytics.dashboard import helpers
@ -28,6 +29,8 @@ from stackalytics.dashboard import vault
from stackalytics.processor import utils
CONF = cfg.CONF
DEFAULT_DAYS_COUNT = 7
FIRST_MEMBER_DATE = "2012-Jul-18"
@ -59,7 +62,7 @@ def _get_day(timestamp, time_now):
return int((time_now - timestamp) / 60 / 60 / 24)
def _process_stat(data, key, time_now):
def _process_stat(data, key, time_now, limit=None):
if not data:
return None
@ -75,7 +78,7 @@ def _process_stat(data, key, time_now):
chart_data[_get_day(review[key], time_now)] += 1
return {
'reviews': data,
'reviews': data[:limit],
'average': utils.make_age_string(sum_ages / len(data)),
'max': data[0][key + '_age'],
'chart_data': json.dumps(chart_data),
@ -119,6 +122,10 @@ def open_reviews(module):
# new requests without votes, waiting for CI
pass
limit = int(flask.request.args.get('limit') or CONF.report_default_limit)
if limit < 0:
limit = None
return {
'module': module,
'total_open': total_open,
@ -127,13 +134,13 @@ def open_reviews(module):
'waiting_on_ci': (total_open - len(waiting_on_reviewer) -
len(waiting_on_submitter)),
'reviewer_latest_revision': _process_stat(
waiting_on_reviewer, 'updated_on', time_now),
waiting_on_reviewer, 'updated_on', time_now, limit),
'reviewer_first_revision': _process_stat(
waiting_on_reviewer, 'date', time_now),
waiting_on_reviewer, 'date', time_now, limit),
'submitter_latest_revision': _process_stat(
waiting_on_submitter, 'updated_on', time_now),
waiting_on_submitter, 'updated_on', time_now, limit),
'submitter_first_revision': _process_stat(
waiting_on_submitter, 'date', time_now),
waiting_on_submitter, 'date', time_now, limit),
}

View File

@ -43,7 +43,7 @@
<div id="reviewer_latest_revision_chart" style="width: 100%; height: 350px;"></div>
<ol>
{% for item in reviewer_latest_revision.reviews[:5] %}
{% for item in reviewer_latest_revision.reviews %}
<li>{{ item.updated_on_age }} <a href="{{ item.url }}">{{ item.url }}</a> {{ item.subject }} by {{ item.author_link|safe }} ({{ item.company_link|safe }})</li>
{% endfor %}
</ol>
@ -58,7 +58,7 @@
<div id="reviewer_first_revision_chart" style="width: 100%; height: 350px;"></div>
<ol>
{% for item in reviewer_first_revision.reviews[:5] %}
{% for item in reviewer_first_revision.reviews %}
<li>{{ item.date_age }} <a href="{{ item.url }}">{{ item.url }}</a> {{ item.subject }} by {{ item.author_link|safe }} ({{ item.company_link|safe }})</li>
{% endfor %}
</ol>
@ -79,7 +79,7 @@
<div id="submitter_latest_revision_chart" style="width: 100%; height: 350px;"></div>
<ol>
{% for item in submitter_latest_revision.reviews[:5] %}
{% for item in submitter_latest_revision.reviews %}
<li>{{ item.updated_on_age }} <a href="{{ item.url }}">{{ item.url }}</a> {{ item.subject }} by {{ item.author_link|safe }} ({{ item.company_link|safe }})</li>
{% endfor %}
</ol>
@ -94,7 +94,7 @@
<div id="submitter_first_revision_chart" style="width: 100%; height: 350px;"></div>
<ol>
{% for item in submitter_first_revision.reviews[:5] %}
{% for item in submitter_first_revision.reviews %}
<li>{{ item.date_age }} <a href="{{ item.url }}">{{ item.url }}</a> {{ item.subject }} by {{ item.author_link|safe }} ({{ item.company_link|safe }})</li>
{% endfor %}
</ol>