1
- import { groupBy , meanBy , sortBy } from 'lodash'
1
+ import { groupBy , sortBy } from 'lodash'
2
2
3
3
function createData ( info , type , metaData ) {
4
4
switch ( type ) {
@@ -90,66 +90,84 @@ function createBatteryLifeHistoryData(info) {
90
90
* is not an int, then really you should average the two elements on either
91
91
* side to find q1.
92
92
*/
93
- let q1 = values [ Math . floor ( ( values . length / 4 ) ) ] ;
93
+ let q1 = values [ Math . floor ( ( values . length / 4 ) ) ]
94
94
// Likewise for q3.
95
- let q3 = values [ Math . ceil ( ( values . length * ( 3 / 4 ) ) ) ] ;
95
+ let q3 = values [ Math . ceil ( ( values . length * ( 3 / 4 ) ) ) ]
96
96
let iqr = q3 - q1 ;
97
97
98
98
// Then find min and max values
99
99
let maxValue = q3 + iqr * 1.5 ;
100
100
101
- // Then filter anything beyond or beneath these values.
102
- return array . filter ( function ( x ) {
103
- return ( x <= maxValue )
104
- } ) ;
101
+ // Then reduce anything beyond or beneath these values.
102
+ return array . reduce ( ( data , item , index ) => {
103
+ if ( item <= maxValue ) {
104
+ data . indexes . push ( index )
105
+ data . data . push ( item )
106
+ return data
107
+ }
108
+ return data
109
+ } , {
110
+ data : [ ] ,
111
+ indexes : [ ]
112
+ } )
105
113
}
106
114
107
- function filterDataset ( value , index ) {
108
- let activeDatasetRowAverage = meanBy ( value , index )
115
+ function averageDatasetByMonth ( value , index ) {
109
116
return value . reduce ( ( data , element ) => {
110
- let value = element [ index ]
111
- if ( data / activeDatasetRowAverage < 5 ) {
112
- data += value
113
- }
117
+ data += element [ index ]
114
118
return data
115
119
} , 0 ) / value . length
116
120
}
117
121
118
- let formattedInfo = groupBy ( info . data . map ( item => {
119
- return [
122
+ let formattedInfo = groupBy ( info . data . reduce ( ( data , item ) => {
123
+ if ( item [ 1 ] === "0:00:00" || item [ 3 ] === "0:00:00" ) {
124
+ return data
125
+ }
126
+ data . push ( [
120
127
chooseDate ( item [ 0 ] ) ,
121
128
Number ( item [ 1 ] . split ( ":" ) [ 0 ] ) * 60 + Number ( item [ 1 ] . split ( ":" ) [ 1 ] ) ,
122
129
Number ( item [ 3 ] . split ( ":" ) [ 0 ] ) * 60 + Number ( item [ 3 ] . split ( ":" ) [ 1 ] ) ,
123
- ]
124
- } ) , 0 )
130
+ ] )
131
+ return data
132
+ } , [ ] ) , 0 )
125
133
126
134
let activeDataset = [ ]
127
135
let designDataset = [ ]
128
136
129
137
for ( let [ , value ] of Object . entries ( formattedInfo ) ) {
130
- activeDataset . push ( filterDataset ( value , 1 ) )
131
- designDataset . push ( filterDataset ( value , 2 ) )
138
+ activeDataset . push ( averageDatasetByMonth ( value , 1 ) )
139
+ designDataset . push ( averageDatasetByMonth ( value , 2 ) )
132
140
}
141
+ let filteredDataset = filterOutliers ( activeDataset )
142
+ let filteredActiveDataset = filterOutliers ( activeDataset ) . data
143
+ let filteredDesignDataset = designDataset . filter ( ( item , index ) => filteredDataset . indexes . includes ( index ) )
144
+ let labelsDataset = Object . keys ( formattedInfo ) . reduce ( ( data , item , index ) => {
145
+ if ( filteredDataset . indexes . includes ( index ) ) {
146
+ data . push ( item . slice ( 0 , 4 ) + "/" + item . slice ( 4 , 6 ) )
147
+ return data
148
+ }
149
+ return data
150
+ } , [ ] )
133
151
134
152
return {
135
- labels : Object . keys ( formattedInfo ) ,
153
+ labels : labelsDataset ,
136
154
datasets : [ {
137
155
label : info . keys [ 1 ] ,
138
156
backgroundColor : 'red' ,
139
157
borderColor : 'red' ,
140
- data : filterOutliers ( activeDataset ) ,
158
+ data : filteredActiveDataset ,
141
159
fill : false ,
142
160
} , {
143
161
label : info . keys [ 3 ] ,
144
162
backgroundColor : 'blue' ,
145
163
borderColor : 'blue' ,
146
- data : filterOutliers ( designDataset ) ,
164
+ data : filteredDesignDataset ,
147
165
fill : false ,
148
166
} ]
149
167
}
150
168
}
151
169
152
- function getGroupedPowerUsageInfoData ( info , filterConditional ) {
170
+ function getGroupedPowerUsageInfoData ( info ) {
153
171
let formattedData = info . data . reduce ( ( data , item , index ) => {
154
172
function getDuration ( pastItem , currentItem , futureItem ) {
155
173
function getDateObject ( dateString ) {
@@ -199,9 +217,6 @@ function getGroupedPowerUsageInfoData(info, filterConditional) {
199
217
]
200
218
}
201
219
}
202
- if ( filterConditional ( item ) ) {
203
- return data
204
- }
205
220
switch ( index ) {
206
221
case info . data . length - 1 :
207
222
return data
@@ -247,9 +262,7 @@ function formatPowerUsageInfoTime(minutes) {
247
262
}
248
263
249
264
function createCumulativePiePowerUsageInfoData ( info ) {
250
- let groupData = getGroupedPowerUsageInfoData ( info , function ( item ) {
251
- return false
252
- } )
265
+ let groupData = getGroupedPowerUsageInfoData ( info )
253
266
let powerUsageDataset = getDailySumGroupedPowerUsageInfoData (
254
267
groupData ,
255
268
( item ) => item [ 3 ] . toLowerCase ( ) === 'suspended' ,
@@ -276,17 +289,15 @@ function createCumulativePiePowerUsageInfoData(info) {
276
289
}
277
290
278
291
function createBarPowerUsageInfoData ( info ) {
279
- let groupData = getGroupedPowerUsageInfoData ( info , function ( item ) {
280
- return false
281
- } )
292
+ let groupData = getGroupedPowerUsageInfoData ( info )
282
293
let powerUsageDataset = getDailySumGroupedPowerUsageInfoData (
283
294
groupData ,
284
295
( item ) => item [ 3 ] . toLowerCase ( ) === 'suspended' ,
285
296
( item ) => item [ 4 ] . toUpperCase ( ) === 'AC'
286
297
)
287
298
let powerUsageActiveSuspendedDataset = getDailySumGroupedPowerUsageInfoData (
288
299
groupData ,
289
- ( item ) => false ,
300
+ ( _ ) => false ,
290
301
( item ) => item [ 3 ] . toLowerCase ( ) === 'active'
291
302
)
292
303
@@ -321,12 +332,10 @@ function createBarPowerUsageInfoData(info) {
321
332
}
322
333
323
334
function createActiveSuspendedPiePowerUsageInfoData ( info ) {
324
- let groupData = getGroupedPowerUsageInfoData ( info , function ( _ ) {
325
- return false
326
- } )
335
+ let groupData = getGroupedPowerUsageInfoData ( info )
327
336
let powerUsageActiveSuspendedDataset = getDailySumGroupedPowerUsageInfoData (
328
337
groupData ,
329
- ( item ) => false ,
338
+ ( _ ) => false ,
330
339
( item ) => item [ 3 ] . toLowerCase ( ) === 'active'
331
340
)
332
341
let cumulativePowerUsageActiveSuspendedDataset = powerUsageActiveSuspendedDataset . reduce ( ( data , item ) => {
@@ -353,7 +362,9 @@ function createLinePowerUsageInfoData(info) {
353
362
let percentageDataset = info . data . reduce ( ( data , item , index ) => {
354
363
let dateString = ( date ) => date . getMonth ( ) + 1 + "/" + date . getDate ( ) + " " + date . getHours ( ) + ":" + date . getMinutes ( )
355
364
if ( index > 1 ) {
356
- if ( item [ item . length - 2 ] === info . data [ index - 2 ] [ info . data [ index - 2 ] . length - 2 ] ) {
365
+ let currentPercentage = item [ item . length - 2 ]
366
+ let lastPercentage = info . data [ index - 1 ] [ info . data [ index - 1 ] . length - 2 ]
367
+ if ( currentPercentage === lastPercentage ) {
357
368
return data
358
369
}
359
370
}
0 commit comments