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