Milimetric has submitted this change and it was merged.

Change subject: fixed csv output and errant user_id column
......................................................................


fixed csv output and errant user_id column

Change-Id: I1653a1dbb9908a64347074dbc7bde6cb8c98b8e1
---
M tests/test_models/test_report_response.py
M wikimetrics/config/celery_config.yaml
M wikimetrics/controllers/reports.py
M wikimetrics/models/report_nodes/aggregate_report.py
4 files changed, 52 insertions(+), 17 deletions(-)

Approvals:
  Milimetric: Verified; Looks good to me, approved



diff --git a/tests/test_models/test_report_response.py 
b/tests/test_models/test_report_response.py
index 89fe9b0..503109e 100644
--- a/tests/test_models/test_report_response.py
+++ b/tests/test_models/test_report_response.py
@@ -1,4 +1,4 @@
-from wikimetrics.models import Cohort, RunReport, MultiProjectMetricReport
+from wikimetrics.models import Cohort, RunReport, MultiProjectMetricReport, 
Aggregation
 from wikimetrics.metrics import NamespaceEdits
 from ..fixtures import QueueDatabaseTest
 from nose.tools import assert_equals, assert_true
@@ -32,7 +32,7 @@
         results = jr.task.delay(jr).get()[0]
         # TODO: figure out why one of the resulting wiki_user_ids is None here
         assert_equals(
-            results['individual 
results'][0][self.test_mediawiki_user_id]['edits'],
+            results[Aggregation.IND][0][self.test_mediawiki_user_id]['edits'],
             2,
         )
     
@@ -55,12 +55,12 @@
         jr = RunReport(desired_responses, user_id=self.test_user_id)
         results = jr.task.delay(jr).get()[0]
         assert_equals(
-            results['individual 
results'][0][self.test_mediawiki_user_id]['edits'],
+            results[Aggregation.IND][0][self.test_mediawiki_user_id]['edits'],
             2,
         )
         
         assert_equals(
-            results['Sum']['edits'],
+            results[Aggregation.SUM]['edits'],
             5,
         )
     
@@ -83,12 +83,12 @@
         jr = RunReport(desired_responses, user_id=self.test_user_id)
         results = jr.task.delay(jr).get()[0]
         assert_equals(
-            results['individual 
results'][0][self.test_mediawiki_user_id]['net_sum'],
+            
results[Aggregation.IND][0][self.test_mediawiki_user_id]['net_sum'],
             10,
         )
         
         assert_equals(
-            results['Sum']['positive_only_sum'],
+            results[Aggregation.SUM]['positive_only_sum'],
             50,
         )
     
@@ -119,7 +119,7 @@
         for report in reports:
             try:
                 results = report.get()[0]
-                if results['Sum']['positive_only_sum'] == 50:
+                if results[Aggregation.SUM]['positive_only_sum'] == 50:
                     successes += 1
             except:
                 print('timeout expired for this task')
diff --git a/wikimetrics/config/celery_config.yaml 
b/wikimetrics/config/celery_config.yaml
index 36a3398..0b28098 100644
--- a/wikimetrics/config/celery_config.yaml
+++ b/wikimetrics/config/celery_config.yaml
@@ -3,7 +3,7 @@
 CELERY_TASK_RESULT_EXPIRES          : 3600
 CELERY_DISABLE_RATE_LIMITS          : True
 CELERY_STORE_ERRORS_EVEN_IF_IGNORED : True
-CELERYD_CONCURRENCY                 : 8
-CELERYD_TASK_TIME_LIMIT             : 10
-CELERYD_TASK_SOFT_TIME_LIMIT        : 5
+CELERYD_CONCURRENCY                 : 16
+CELERYD_TASK_TIME_LIMIT             : 60
+CELERYD_TASK_SOFT_TIME_LIMIT        : 30
 DEBUG                               : True
diff --git a/wikimetrics/controllers/reports.py 
b/wikimetrics/controllers/reports.py
index 77253db..ccce0a0 100644
--- a/wikimetrics/controllers/reports.py
+++ b/wikimetrics/controllers/reports.py
@@ -4,6 +4,7 @@
 from celery.task.control import revoke
 from ..configurables import app, db
 from ..models import Report, RunReport, PersistentReport
+from ..models.report_nodes import Aggregation
 from ..metrics import metric_classes
 from ..utils import json_response, json_error, json_redirect, thirty_days_ago
 import json
@@ -78,17 +79,50 @@
         
         csv_io = StringIO()
         if task_result:
+            columns = []
+            
+            if Aggregation.IND in task_result:
+                columns = task_result[Aggregation.IND][0].values()[0].keys()
+            elif Aggregation.SUM in task_result:
+                columns = task_result[Aggregation.SUM].keys()
+            elif Aggregation.AVG in task_result:
+                columns = task_result[Aggregation.AVG].keys()
+            elif Aggregation.STD in task_result:
+                columns = task_result[Aggregation.STD].keys()
+            
             # if task_result is not empty find header in first row
-            fieldnames = ['user_id'] + sorted(task_result.values()[0].keys())
+            fieldnames = ['user_id'] + columns
         else:
             fieldnames = ['user_id']
         writer = DictWriter(csv_io, fieldnames)
         
+        # collect rows to output in CSV
         task_rows = []
-        # fold user_id into dict so we can use DictWriter to escape things
-        for user_id, row in task_result.iteritems():
-            row['user_id'] = user_id
-            task_rows.append(row)
+        
+        # Individual Results
+        if Aggregation.IND in task_result:
+            # fold user_id into dict so we can use DictWriter to escape things
+            for user_id, row in task_result[Aggregation.IND][0].iteritems():
+                task_row = row.copy()
+                task_row['user_id'] = user_id
+                task_rows.append(task_row)
+        
+        # Aggregate Results
+        if Aggregation.SUM in task_result:
+            task_row = task_result[Aggregation.SUM].copy()
+            task_row['user_id'] = Aggregation.SUM
+            task_rows.append(task_row)
+        
+        if Aggregation.AVG in task_result:
+            task_row = task_result[Aggregation.AVG].copy()
+            task_row['user_id'] = Aggregation.AVG
+            task_rows.append(task_row)
+        
+        if Aggregation.STD in task_result:
+            task_row = task_result[Aggregation.STD].copy()
+            task_row['user_id'] = Aggregation.STD
+            task_rows.append(task_row)
+        
         writer.writeheader()
         writer.writerows(task_rows)
         return Response(csv_io.getvalue(), mimetype='text/csv')
diff --git a/wikimetrics/models/report_nodes/aggregate_report.py 
b/wikimetrics/models/report_nodes/aggregate_report.py
index fef5cf4..09a08f1 100644
--- a/wikimetrics/models/report_nodes/aggregate_report.py
+++ b/wikimetrics/models/report_nodes/aggregate_report.py
@@ -4,12 +4,13 @@
 from celery.utils.log import get_task_logger
 
 
-__all__ = ['AggregateReport']
+__all__ = ['AggregateReport', 'Aggregation']
 
 task_logger = get_task_logger(__name__)
 
 
 class Aggregation(object):
+    IND = 'Individual Results'
     SUM = 'Sum'
     AVG = 'Average'
     STD = 'Standard Deviation'
@@ -81,7 +82,7 @@
                 )
         
         if self.individual:
-            aggregated_results['individual results'] = multi_project_results
+            aggregated_results[Aggregation.IND] = multi_project_results
         
         return aggregated_results
     

-- 
To view, visit https://gerrit.wikimedia.org/r/76930
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: I1653a1dbb9908a64347074dbc7bde6cb8c98b8e1
Gerrit-PatchSet: 1
Gerrit-Project: analytics/wikimetrics
Gerrit-Branch: master
Gerrit-Owner: Milimetric <dandree...@wikimedia.org>
Gerrit-Reviewer: Milimetric <dandree...@wikimedia.org>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to