@@ -18,26 +18,22 @@ angular.module('birdwatch.services').factory('cf', function (utils) {
18
18
else return 0 ;
19
19
} ) ;
20
20
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 ) ) } ; }
22
24
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 ( ) ;
34
30
35
31
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 ( ) ; }
41
37
} ;
42
38
43
39
// freeze imposes filter on crossfilter that only shows anything older than and including the latest
0 commit comments