Milimetric has submitted this change and it was merged.

Change subject: some small cleanup and links
......................................................................


some small cleanup and links

Change-Id: I63747e1d90e527731780bcb426aeacf0f70b6eff
---
M wikimetrics/controllers/jobs.py
M wikimetrics/models/job.py
M wikimetrics/models/multi_project_metric_job.py
M wikimetrics/templates/jobs.html
M wikimetrics/utils.py
5 files changed, 43 insertions(+), 15 deletions(-)

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



diff --git a/wikimetrics/controllers/jobs.py b/wikimetrics/controllers/jobs.py
index ecbfee4..a856a00 100644
--- a/wikimetrics/controllers/jobs.py
+++ b/wikimetrics/controllers/jobs.py
@@ -4,7 +4,7 @@
 from ..configurables import app, db
 from ..models import Cohort, Job, JobResponse, PersistentJob, 
MultiProjectMetricJob
 from ..metrics import metric_classes
-from ..utils import json_response, json_redirect
+from ..utils import json_response, json_redirect, deduplicate
 import json
 
 
@@ -28,6 +28,8 @@
     else:
         parsed = json.loads(request.form['responses'])
         metric_jobs = []
+        metric_names = []
+        cohort_names = []
         for cohort_metric_dict in parsed:
             
             # get cohort
@@ -50,14 +52,15 @@
             #app.logger.debug('metric: %s', metric)
             
             # construct and start JobResponse
-            metric_job = MultiProjectMetricJob(
-                cohort,
-                metric,
-                name=cohort_metric_dict['name']
-            )
+            metric_job = MultiProjectMetricJob(cohort, metric)
             metric_jobs.append(metric_job)
+            metric_names.append(metric.label)
+            cohort_names.append(cohort.name)
         
-        jr = JobResponse(metric_jobs)
+        metric_names = deduplicate(metric_names)
+        cohort_names = deduplicate(cohort_names)
+        name = ', '.join(metric_names) + ' for ' + ', '.join(cohort_names)
+        jr = JobResponse(metric_jobs, name=name)
         async_response = jr.task.delay()
         app.logger.info('starting job: %s', async_response.task_id)
         
@@ -69,10 +72,12 @@
 def jobs_list():
     db_session = db.get_session()
     jobs = db_session.query(PersistentJob)\
-        .filter_by(user_id=current_user.id).all()
+        .filter_by(user_id=current_user.id)\
+        .filter_by(show_in_ui=True).all()
     # update status for each job
     for job in jobs:
         job.update_status()
+    
     # TODO fix json_response to deal with PersistentJob objects
     jobs_json = json_response(jobs=[job._asdict() for job in jobs])
     db_session.close()
diff --git a/wikimetrics/models/job.py b/wikimetrics/models/job.py
index 962146c..7064890 100644
--- a/wikimetrics/models/job.py
+++ b/wikimetrics/models/job.py
@@ -1,4 +1,4 @@
-from sqlalchemy import Column, Integer, String, DateTime, func
+from sqlalchemy import Column, Integer, String, DateTime, Boolean, func
 from sqlalchemy.orm import Session
 import celery
 from celery import group, chord
@@ -36,8 +36,6 @@
 
 
 task_logger = get_task_logger(__name__)
-sh = logging.StreamHandler()
-task_logger.addHandler(sh)
 
 
 class PersistentJob(db.WikimetricsBase):
@@ -48,7 +46,8 @@
     user_id = Column(Integer)
     result_key = Column(String(50))
     status = Column(String(50))
-    name = Column(String(200))
+    name = Column(String(2000))
+    show_in_ui = Column(Boolean)
     
     def update_status(self):
         if self.status not in (celery.states.SUCCESS, celery.states.FAILURE):
@@ -92,7 +91,8 @@
         # note that result_key is always empty at this stage
         pj = PersistentJob(user_id=self.user_id,
                            status=self.status,
-                           name=self.name)
+                           name=self.name,
+                           show_in_ui=self.show_in_ui)
         db_session = db.get_session()
         db_session.add(pj)
         db_session.commit()
diff --git a/wikimetrics/models/multi_project_metric_job.py 
b/wikimetrics/models/multi_project_metric_job.py
index 8d8e16b..7e51a2f 100644
--- a/wikimetrics/models/multi_project_metric_job.py
+++ b/wikimetrics/models/multi_project_metric_job.py
@@ -8,6 +8,8 @@
     'MultiProjectMetricJob',
 ]
 
+task_logger = get_task_logger(__name__)
+
 
 class MultiProjectMetricJob(job.JobNode):
     """
@@ -30,5 +32,8 @@
     def finish(self, query_results):
         merged = {}
         for res in query_results:
-            merged.update(res)
+            try:
+                merged.update(res)
+            except:
+                task_logger.error('updating failed: %s', res)
         return merged
diff --git a/wikimetrics/templates/jobs.html b/wikimetrics/templates/jobs.html
index a1060d6..6c733ff 100644
--- a/wikimetrics/templates/jobs.html
+++ b/wikimetrics/templates/jobs.html
@@ -14,6 +14,7 @@
             <th>Created</th>
             <th>Status</th>
             <th>Name</th>
+            <th data-bind="if: status === 'SUCCESS'">Result</th>
         </tr>
     </thead>
     <tbody data-bind="foreach: jobs_sorted">
@@ -23,7 +24,18 @@
             </td>
             <td data-bind="text: status"></td>
             <td data-bind="text: name"></td>
-            <td>...</td>
+            <td data-bind="if: status === 'SUCCESS'">
+                <div class="btn-group">
+                    <button class="btn btn-primary">Details</button>
+                    <button class="btn btn-primary dropdown-toggle" 
data-toggle="dropdown">
+                    <span class="caret"></span>
+                    </button>
+                    <ul class="dropdown-menu">
+                        <li><a href="{{url_for('jobs_list')}}">JSON</a></li>
+                        <li><a href="{{url_for('jobs_list')}}">CSV</a></li>
+                    </ul>
+                </div>
+            </td>
         </tr>
     </tbody>
 </table>
diff --git a/wikimetrics/utils.py b/wikimetrics/utils.py
index 611f715..0be6145 100644
--- a/wikimetrics/utils.py
+++ b/wikimetrics/utils.py
@@ -58,3 +58,9 @@
     Callable that gets the date 30 days ago, needed by WTForms DateFields
     """
     return datetime.date.today() - datetime.timedelta(days=30)
+
+
+def deduplicate(sequence):
+    seen = set()
+    seen_add = seen.add
+    return [ x for x in sequence if x not in seen and not seen_add(x)]

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

Gerrit-MessageType: merged
Gerrit-Change-Id: I63747e1d90e527731780bcb426aeacf0f70b6eff
Gerrit-PatchSet: 1
Gerrit-Project: analytics/wikimetrics
Gerrit-Branch: master
Gerrit-Owner: Milimetric <[email protected]>
Gerrit-Reviewer: Milimetric <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to