1- module . exports = function ( { bucket, min, max } ) {
2- var bucket_size = typeof bucket === 'number' ? bucket : 10 ;
3- var min_solve = typeof min === 'number' ? min : 0 ;
4- var max_solve = typeof max === 'number' ? max : Number . MAX_SAFE_INTEGER ;
5-
1+ module . exports = function ( { bucket, min, max, before, after } ) {
62 var async = require ( 'async' ) ;
7- var fileModule = require ( './file-module.js' ) ;
8- var pushed_file_name = require ( './constants.js' ) . PUSHED_FILE_PATH ;
9- var local_file_name = require ( './constants.js' ) . LOCAL_FILE_PATH ;
10-
113 var fs = require ( 'fs' ) ;
124 var csv = require ( 'fast-csv' ) ;
135 var Stats = require ( 'fast-stats' ) . Stats ;
146 var clc = require ( 'cli-color' ) ;
157 var barHorizontal = require ( 'bar-horizontal' ) ;
8+ // Local modules
9+ var fileModule = require ( './file-module.js' ) ;
10+ // Constants
11+ var pushed_file_name = require ( './constants.js' ) . PUSHED_FILE_PATH ;
12+ var local_file_name = require ( './constants.js' ) . LOCAL_FILE_PATH ;
13+ // Helper functions
14+ var parseStrToMomentOrUndefined = require ( './utils.js' ) . parseStrToMomentOrUndefined ;
15+ var solveValidator = require ( './utils.js' ) . solveValidator ;
16+ var prettifyVerbose = require ( './utils.js' ) . prettifyVerbose ;
1617
17- var prettyMs = require ( 'pretty-ms' ) ;
18-
19- function prettifyVerbose ( ms ) {
20- return prettyMs ( ms , { verbose : true , secDecimalDigits : 2 } ) ;
21- }
18+ var bucket_size = typeof bucket === 'number' ? bucket : 10 ;
19+ var min_solve = typeof min === 'number' ? min : 0 ;
20+ var max_solve = typeof max === 'number' ? max : Number . MAX_SAFE_INTEGER ;
21+ var before_timestamp = parseStrToMomentOrUndefined ( before ) ;
22+ var after_timestamp = parseStrToMomentOrUndefined ( after ) ;
23+ var validatorFunc = solveValidator ( min_solve , max_solve , before_timestamp , after_timestamp ) ;
2224
2325 var all_times = new Stats ( { bucket_precision : bucket_size } ) ;
2426
2527 var avail_files = [ ] ;
26-
2728 if ( fileModule . pushedFileExists ( ) ) {
2829 avail_files . push ( pushed_file_name ) ;
2930 }
30-
3131 if ( fileModule . localFileExists ( ) ) {
3232 avail_files . push ( local_file_name ) ;
3333 }
@@ -36,8 +36,16 @@ module.exports = function ({ bucket, min, max }) {
3636 function ( file_name , callback ) {
3737 var csvStream = csv ( )
3838 . on ( 'data' , function ( data ) {
39+ // Step 1: Get the solve time, this should always be present
3940 var solve_time = parseFloat ( data [ 0 ] ) ;
40- if ( ! isNaN ( solve_time ) && solve_time >= min_solve && solve_time <= max_solve ) {
41+
42+ // Step 2: Try to parse solve timestamp
43+ // This was introduced in v1.2.0. Files written by versions of cli-cube-timer before v1.2.0
44+ // will not have this column.
45+ var solve_timestamp = data . length >= 3 ? data [ 2 ] : undefined ;
46+ var solve_unix_ts = parseFloat ( solve_timestamp , 10 ) / 1000 ;
47+
48+ if ( validatorFunc ( solve_time , solve_unix_ts ) ) {
4149 all_times . push ( solve_time ) ;
4250 }
4351 } )
@@ -71,6 +79,17 @@ module.exports = function ({ bucket, min, max }) {
7179 } ) ;
7280
7381 barHorizontal ( input_obj , { labels : true } ) ;
82+
83+ if ( before_timestamp !== undefined || after_timestamp !== undefined ) {
84+ console . log ( '\nTime constraints:' ) ;
85+ }
86+
87+ if ( after_timestamp !== undefined ) {
88+ console . log ( `After: ${ clc . green ( after_timestamp ) } ` ) ;
89+ }
90+ if ( before_timestamp !== undefined ) {
91+ console . log ( `Before: ${ clc . green ( before_timestamp ) } ` ) ;
92+ }
7493 }
7594 } ) ;
7695} ;
0 commit comments