1 module.exports = DataManagerGraph;
3 var _ = require('lodash');
4 var m = require('mithril');
5 // var Morris = require('morrisjs'); /* It's currently a global. */
7 function DataManagerGraph() {};
8 DataManagerGraph.controller = function(opts) {
9 opts.connection.api('Log', 'list', {
10 filters: [['event_type', '=', 'experimental-data-manager-report']],
11 order: ['created_at DESC'],
12 }).then(this.logs = m.prop([])).then(m.redraw);
13 this.configGraph = function configGraph(element, isInitialized, context) {
15 var data = _.compact(this.logs().map(function(item){
17 var p = item.properties;
18 var runId = '' + p.run_info.pid + '/' + p.run_info.start_time;
20 seriesLabel: '' + p.run_info.pid,
21 collectionsRead: p.collection_info.collections_read,
22 logCreatedAt: toDate(item.created_at),
23 runStartTime: toDate(p.run_info.start_time),
25 pt[runId] = pt.collectionsRead;
26 seriesLabel[runId] = p.run_info.pid;
34 hoverCallback: morrisHoverCallback,
36 ykeys: _.keys(seriesLabel),
37 labels: _.values(seriesLabel),
40 if (!isInitialized || !_.isEqual(chartopts, context.chartopts)) {
41 context.chartopts = chartopts;
42 context.chart = new Morris.Line(_.merge({data:data}, chartopts));
43 } else if (!context.chart) {
44 // Initialization crashed, no chart?
45 } else if (!_.isEqual(data, context.data)) {
46 context.chart.setData(data);
50 function toDate(timestamp) {
51 // 2015-01-13T01:13:52.281556508Z -> 2015-01-13 01:13:52.281
52 return timestamp.match(/([-\d]{10})T([:\.\d]{8,12})/).slice(1).join(' ');
54 function morrisHoverCallback(index, options, content, row) {
55 return ''+row.seriesLabel+': '+row.collectionsRead+' collections read @ '+row.logCreatedAt;
58 DataManagerGraph.view = function(ctrl) {
59 return ctrl.logs().length==0 ? [] : m('div', {
60 config: ctrl.configGraph,
61 style: { width: '100%', height: 200 },