From 8f6a3eb80cdbd919fa61ccf1f350b2cff563c60c Mon Sep 17 00:00:00 2001 From: Ilya Shakhat Date: Fri, 26 Dec 2014 15:10:46 +0300 Subject: [PATCH] Extend open reviews report with submitters queues The report now also shows the longest waiting line for submitters. Change-Id: I9d1e9a3023502aaf882f5b7aa19dd2b528820c35 --- stackalytics/dashboard/reports.py | 26 +++++-- .../templates/reports/open_reviews.html | 71 +++++++++++++++---- stackalytics/processor/utils.py | 3 +- 3 files changed, 82 insertions(+), 18 deletions(-) diff --git a/stackalytics/dashboard/reports.py b/stackalytics/dashboard/reports.py index a2200faf9..e0e27b1e4 100644 --- a/stackalytics/dashboard/reports.py +++ b/stackalytics/dashboard/reports.py @@ -101,22 +101,40 @@ def open_reviews(module): memory_storage_inst.get_record_ids_by_types(['review'])) waiting_on_reviewer = [] + waiting_on_submitter = [] total_open = 0 for review in memory_storage_inst.get_records(review_ids): if review.status == 'NEW': total_open += 1 + + # review.value is minimum from votes made for the latest patch if review.value in [1, 2]: - waiting_on_reviewer.append(vault.extend_record(review)) + # CI or engineer liked this change request, waiting for someone + # to merge or to put dislike + waiting_on_reviewer.append(helpers.extend_record(review)) + elif review.value in [-1, -2]: + # CI or reviewer do not like this, waiting for submitter to fix + waiting_on_submitter.append(helpers.extend_record(review)) + else: + # new requests without votes, waiting for CI + pass return { 'module': module, 'total_open': total_open, 'waiting_on_reviewer': len(waiting_on_reviewer), - 'waiting_on_submitter': total_open - len(waiting_on_reviewer), - 'latest_revision': _process_stat( + 'waiting_on_submitter': len(waiting_on_submitter), + '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), - 'first_revision': _process_stat(waiting_on_reviewer, 'date', time_now), + 'reviewer_first_revision': _process_stat( + waiting_on_reviewer, 'date', time_now), + 'submitter_latest_revision': _process_stat( + waiting_on_submitter, 'updated_on', time_now), + 'submitter_first_revision': _process_stat( + waiting_on_submitter, 'date', time_now), } diff --git a/stackalytics/dashboard/templates/reports/open_reviews.html b/stackalytics/dashboard/templates/reports/open_reviews.html index 340ee1254..bd1bdcf53 100644 --- a/stackalytics/dashboard/templates/reports/open_reviews.html +++ b/stackalytics/dashboard/templates/reports/open_reviews.html @@ -7,8 +7,18 @@ Open change requests report for {{ module }} {% block scripts %} {% endblock %} @@ -21,40 +31,77 @@ Open change requests report for {{ module }}
  • Total open reviews: {{ total_open }}
  • Waiting on submitter: {{ waiting_on_submitter }}
  • Waiting on reviewer: {{ waiting_on_reviewer }}
  • +
  • Waiting on CI (no votes yet): {{ waiting_on_ci }}
  • {% if waiting_on_reviewer %}

    Change requests waiting for reviewers since the last vote or mark

    -
    +
      -{% for item in latest_revision.reviews[:5] %} -
    1. {{ item.updated_on_age }} {{ item.url }} {{ item.subject }} by {{ item.author_name }} ({{ item.company_name }})
    2. +{% for item in reviewer_latest_revision.reviews[:5] %} +
    3. {{ item.updated_on_age }} {{ item.url }} {{ item.subject }} by {{ item.author_link|safe }} ({{ item.company_link|safe }})
    4. {% endfor %}

    Change requests waiting for reviewers since the creation date

    -
    +
      -{% for item in first_revision.reviews[:5] %} -
    1. {{ item.date_age }} {{ item.url }} {{ item.subject }} by {{ item.author_name }} ({{ item.company_name }})
    2. +{% for item in reviewer_first_revision.reviews[:5] %} +
    3. {{ item.date_age }} {{ item.url }} {{ item.subject }} by {{ item.author_link|safe }} ({{ item.company_link|safe }})
    4. {% endfor %}
    {% else %}

    No change requests waiting for reviewers

    {% endif %} + + +{% if waiting_on_submitter %} +

    Change requests waiting for submitters since the last vote or mark

    + + + +
    + +
      +{% for item in submitter_latest_revision.reviews[:5] %} +
    1. {{ item.updated_on_age }} {{ item.url }} {{ item.subject }} by {{ item.author_link|safe }} ({{ item.company_link|safe }})
    2. +{% endfor %} +
    + +

    Change requests waiting for submitters since the creation date

    + + + +
    + +
      +{% for item in submitter_first_revision.reviews[:5] %} +
    1. {{ item.date_age }} {{ item.url }} {{ item.subject }} by {{ item.author_link|safe }} ({{ item.company_link|safe }})
    2. +{% endfor %} +
    + +{% else %} +

    No change requests waiting for submitters

    +{% endif %} {% endblock %} diff --git a/stackalytics/processor/utils.py b/stackalytics/processor/utils.py index 692751120..145af381f 100644 --- a/stackalytics/processor/utils.py +++ b/stackalytics/processor/utils.py @@ -195,8 +195,7 @@ def format_text(s): def make_age_string(seconds): days = seconds / (3600 * 24) hours = (seconds / 3600) - (days * 24) - minutes = (seconds / 60) - (days * 24 * 60) - (hours * 60) - return '%d days, %d hours, %d minutes' % (days, hours, minutes) + return '%d days and %d hours' % (days, hours) def merge_records(original, new):