From bc3d2c6df1088eb987f5c0d6d65ad9daa4d3ea76 Mon Sep 17 00:00:00 2001 From: Ilya Shakhat Date: Mon, 14 Oct 2013 16:42:04 +0400 Subject: [PATCH] Implementation of top mentors report * Renamed report from New-comers to Top Mentors * Made review threshold configurable * Renamed field that holds review number Implements blueprint bp-popularity Change-Id: If9ca4597e2a1e3225cd80be92a9f3c3f63a1654c --- dashboard/static/css/style.css | 2 +- dashboard/templates/layout.html | 4 ++ dashboard/templates/overview.html | 46 ++++++++++++++++++++-- dashboard/web.py | 30 ++++++++------ stackalytics/processor/record_processor.py | 10 ++--- 5 files changed, 70 insertions(+), 22 deletions(-) diff --git a/dashboard/static/css/style.css b/dashboard/static/css/style.css index 14ef0cbb0..6230ac66b 100644 --- a/dashboard/static/css/style.css +++ b/dashboard/static/css/style.css @@ -79,7 +79,7 @@ div.drops { margin-top: 10px; } -div.drops label { +div.drop label { color: #909cb5; } diff --git a/dashboard/templates/layout.html b/dashboard/templates/layout.html index 359b571c2..76c34c7cf 100644 --- a/dashboard/templates/layout.html +++ b/dashboard/templates/layout.html @@ -270,6 +270,10 @@
+
+ {% block report_options %}{% endblock %} +
+ - {% if metric in ['marks', 'nc_marks'] %} + {% if metric in ['marks', 'tm_marks'] %} {% endif %} diff --git a/dashboard/web.py b/dashboard/web.py index de619292f..347fb507b 100644 --- a/dashboard/web.py +++ b/dashboard/web.py @@ -41,13 +41,14 @@ DEFAULTS = { 'metric': 'commits', 'release': 'havana', 'project_type': 'openstack', + 'review_nth': 5, } METRIC_LABELS = { 'loc': 'Lines of code', 'commits': 'Commits', 'marks': 'Reviews', - 'nc_marks': 'Newcomers Reviews', + 'tm_marks': 'Top Mentors', 'emails': 'Emails', 'bpd': 'Drafted Blueprints', 'bpc': 'Completed Blueprints', @@ -57,7 +58,7 @@ METRIC_TO_RECORD_TYPE = { 'loc': 'commit', 'commits': 'commit', 'marks': 'mark', - 'nc_marks': 'mark', + 'tm_marks': 'mark', 'emails': 'email', 'bpd': 'bpd', 'bpc': 'bpc', @@ -349,15 +350,16 @@ def record_filter(ignore=None, use_default=True): record_ids &= memory_storage.get_record_ids_by_type( METRIC_TO_RECORD_TYPE[metric]) - if metric == 'nc_marks': - filtered_ids = [] - for record in memory_storage.get_records(record_ids): - parent = memory_storage.get_record_by_primary_key( - record['review_id']) - if (parent and ('review_attempt' in parent) - and (parent['review_attempt'] <= 5)): - filtered_ids.append(record['record_id']) - record_ids = filtered_ids + if 'tm_marks' in metrics: + filtered_ids = [] + review_nth = int(get_parameter(kwargs, 'review_nth')[0]) + for record in memory_storage.get_records(record_ids): + parent = memory_storage.get_record_by_primary_key( + record['review_id']) + if (parent and ('review_number' in parent) and + (parent['review_number'] <= review_nth)): + filtered_ids.append(record['record_id']) + record_ids = filtered_ids kwargs['records'] = memory_storage.get_records(record_ids) return f(*args, **kwargs) @@ -416,7 +418,7 @@ def aggregate_filter(): 'commits': (incremental_filter, None), 'loc': (loc_filter, None), 'marks': (mark_filter, mark_finalize), - 'nc_marks': (mark_filter, mark_finalize), + 'tm_marks': (mark_filter, mark_finalize), 'emails': (incremental_filter, None), 'bpd': (incremental_filter, None), 'bpc': (incremental_filter, None), @@ -509,6 +511,8 @@ def templated(template=None, return_code=200): else: release = releases[release]['release_name'] ctx['release'] = (release or get_default('release')).lower() + ctx['review_nth'] = (flask.request.args.get('review_nth') or + get_default('review_nth')) ctx['project_type_options'] = get_project_type_options() ctx['release_options'] = get_release_options() @@ -659,7 +663,7 @@ def get_activity_json(records): parent = memory_storage_inst.get_record_by_primary_key( review['review_id']) if parent: - review['review_attempt'] = parent.get('review_attempt') + review['review_number'] = parent.get('review_number') review['subject'] = parent['subject'] review['url'] = parent['url'] review['parent_author_link'] = make_link( diff --git a/stackalytics/processor/record_processor.py b/stackalytics/processor/record_processor.py index f493b5f69..a344c341a 100644 --- a/stackalytics/processor/record_processor.py +++ b/stackalytics/processor/record_processor.py @@ -411,10 +411,10 @@ class RecordProcessor(object): reviews_index = {} for launchpad_id, reviews in users_reviews.iteritems(): reviews.sort(key=lambda x: x['date']) - review_attempt = 0 + review_number = 0 for review in reviews: - review_attempt += 1 - review['review_attempt'] = review_attempt + review_number += 1 + review['review_number'] = review_number reviews_index[review['id']] = review for record in self.runtime_storage_inst.get_all_records(): @@ -453,8 +453,8 @@ class RecordProcessor(object): if record['record_type'] == 'review': review = reviews_index[record['id']] - if record.get('review_attempt') != review['review_attempt']: - record['review_attempt'] = review['review_attempt'] + if record.get('review_number') != review['review_number']: + record['review_number'] = review['review_number'] need_update = True if need_update:
diff --git a/dashboard/templates/overview.html b/dashboard/templates/overview.html index 738941376..e2e76a33f 100644 --- a/dashboard/templates/overview.html +++ b/dashboard/templates/overview.html @@ -1,7 +1,7 @@ {% extends "layout.html" %} {% set show_company_breakdown = (not company) and (not user_id) %} -{% set show_engineer_breakdown = ((company) or (module)) and (not user_id) %} +{% set show_engineer_breakdown = (not user_id) %} {% set show_bp_breakdown = (module) and (not user_id) and (metric == 'bpd!') %} {% set show_module_breakdown = (not module) %} {% set show_user_activity = (user_id) %} @@ -11,6 +11,7 @@ {% set show_module_contribution = (module) and (not user_id) %} {% set show_contribution = (show_user_contribution) or (show_module_contribution) %} {% set show_user_profile = (user_id) %} +{% set show_top_mentors_options = (metric == 'tm_marks') %} {% block scripts %} +
+ + +
+ {% endif %} +{% endblock %} + {% block left_frame %} {% if show_company_breakdown %} @@ -214,7 +254,7 @@
# Engineer {{ metric_label }}-2|-1|+1|+2 (+/- ratio)