Skip to content

Commit c711a6f

Browse files
committed
fixing infinite digest issue in time series chart; simplification of dimension functions
1 parent b0819cb commit c711a6f

File tree

2 files changed

+14
-18
lines changed

2 files changed

+14
-18
lines changed

app/assets/javascripts/directives.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ angular.module('birdwatch.directives', ['charts.barchart', 'charts.wordcloud'])
8181

8282
$scope.$watch("tsdata", function() {
8383
if ($scope.tsdata.length > 0) {
84-
graph.series[0].data = $scope.tsdata;
84+
graph.series[0].data = $scope.tsdata.map(function(el) { return { x: el.key, y: el.value } });
8585
graph.update();
8686
}
8787
});

app/assets/javascripts/services/crossfilter.js

+13-17
Original file line numberDiff line numberDiff line change
@@ -18,26 +18,22 @@ angular.module('birdwatch.services').factory('cf', function (utils) {
1818
else return 0;
1919
});
2020

21-
var rsMapper = function(el) { return { x: el.key, y: el.value }};
21+
// Higher-order function, returns a function that rounds time down. Interval s is specified in seconds.
22+
// Example: returned function makes Jan 1, 2012, 16:45:00 out of Jan 1, 2012, 16:45:55 when interval is 60s
23+
function dateRound(s) { return function(t) { return s * Math.floor(Date.parse(t.created_at) / (s * 1000)) }; }
2224

23-
var parseDateRoundedByMin = function(t) { return 60 * Math.floor(Date.parse(t.created_at) / 60000) };
24-
var parseDateRoundedBy15Min = function(t) { return 900 * Math.floor(Date.parse(t.created_at) / 900000) };
25-
var parseDateRoundedByHour = function(t) { return 3600 * Math.floor(Date.parse(t.created_at) / 3600000) };
26-
var parseDateRoundedBy6Hour = function(t) { return 6*3600 * Math.floor(Date.parse(t.created_at) / 3600000 / 6) };
27-
var parseDateRoundedByDay = function(t) { return 24*3600 * Math.floor(Date.parse(t.created_at) / 3600000 / 24) };
28-
29-
var byMinGrp = cf.dimension(parseDateRoundedByMin).group();
30-
var by15MinGrp = cf.dimension(parseDateRoundedBy15Min).group();
31-
var byHourGrp = cf.dimension(parseDateRoundedByHour).group();
32-
var by6HourGrp = cf.dimension(parseDateRoundedBy6Hour).group();
33-
var byDayGrp = cf.dimension(parseDateRoundedByDay).group();
25+
var byMinGrp = cf.dimension(dateRound( 60)).group();
26+
var by15MinGrp = cf.dimension(dateRound( 15*60)).group();
27+
var byHourGrp = cf.dimension(dateRound( 60*60)).group();
28+
var by6HourGrp = cf.dimension(dateRound( 6*60*60)).group();
29+
var byDayGrp = cf.dimension(dateRound(24*60*60)).group();
3430

3531
exports.timeseries = function() {
36-
if (byMinGrp.size() < 60) { return byMinGrp.all().map(rsMapper); }
37-
else if (by15MinGrp.size() < 48) { return by15MinGrp.all().map(rsMapper); }
38-
else if (byHourGrp.size() < 96) { return byHourGrp.all().map(rsMapper); }
39-
else if (by6HourGrp.size() < 40) { return by6HourGrp.all().map(rsMapper); }
40-
else { return byDayGrp.all().map(rsMapper); }
32+
if (byMinGrp.size() < 60) { return byMinGrp.all(); }
33+
else if (by15MinGrp.size() < 48) { return by15MinGrp.all(); }
34+
else if (byHourGrp.size() < 96) { return byHourGrp.all(); }
35+
else if (by6HourGrp.size() < 40) { return by6HourGrp.all(); }
36+
else { return byDayGrp.all(); }
4137
};
4238

4339
// freeze imposes filter on crossfilter that only shows anything older than and including the latest

0 commit comments

Comments
 (0)