@@ -187,7 +187,7 @@ async function storeAlerts(repoId, alertResult) {
187
187
}
188
188
}
189
189
190
- async function getAlertsTrendLines ( organization , projectName , repoId , daysToGoBack , summaryBucket ) {
190
+ async function getAlertsTrendLines ( organization , projectName , repoId , daysToGoBack , summaryBucket , alertType , overviewType = false , showClosed = false ) {
191
191
consoleLog ( `getAlertsTrend for organization [${ organization } ], project [${ projectName } ], repo [${ repoId } ]` )
192
192
try {
193
193
alertResult = null
@@ -214,23 +214,40 @@ async function getAlertsTrendLines(organization, projectName, repoId, daysToGoBa
214
214
codeAlertsTrend : [ ]
215
215
}
216
216
}
217
+ if ( overviewType === false ) {
218
+ consoleLog ( 'Loading all alerts trend lines' )
219
+ // load the Secret alerts and create a trend line over the last 3 weeks
220
+ const secretAlerts = alertResult . value . filter ( alert => alert . alertType === AlertType . SECRET . name )
221
+ const secretAlertsTrend = getAlertsTrendLine ( secretAlerts , AlertType . SECRET . name , daysToGoBack , summaryBucket )
222
+ consoleLog ( '' )
223
+ // load the Dependency alerts and create a trend line over the last 3 weeks
224
+ const dependencyAlerts = alertResult . value . filter ( alert => alert . alertType === AlertType . DEPENDENCY . name )
225
+ const dependencyAlertsTrend = getAlertsTrendLine ( dependencyAlerts , AlertType . DEPENDENCY . name , daysToGoBack , summaryBucket )
226
+ consoleLog ( '' )
227
+ // load the Code alerts and create a trend line over the last 3 weeks
228
+ const codeAlerts = alertResult . value . filter ( alert => alert . alertType === AlertType . CODE . name )
229
+ const codeAlertsTrend = getAlertsTrendLine ( codeAlerts , AlertType . CODE . name , daysToGoBack , summaryBucket )
217
230
218
- // load the Secret alerts and create a trend line over the last 3 weeks
219
- const secretAlerts = alertResult . value . filter ( alert => alert . alertType === AlertType . SECRET . name )
220
- const secretAlertsTrend = getAlertsTrendLine ( secretAlerts , AlertType . SECRET . name , daysToGoBack , summaryBucket )
221
- consoleLog ( '' )
222
- // load the Dependency alerts and create a trend line over the last 3 weeks
223
- const dependencyAlerts = alertResult . value . filter ( alert => alert . alertType === AlertType . DEPENDENCY . name )
224
- const dependencyAlertsTrend = getAlertsTrendLine ( dependencyAlerts , AlertType . DEPENDENCY . name , daysToGoBack , summaryBucket )
225
- consoleLog ( '' )
226
- // load the Code alerts and create a trend line over the last 3 weeks
227
- const codeAlerts = alertResult . value . filter ( alert => alert . alertType === AlertType . CODE . name )
228
- const codeAlertsTrend = getAlertsTrendLine ( codeAlerts , AlertType . CODE . name , daysToGoBack , summaryBucket )
231
+ return {
232
+ secretAlertsTrend : secretAlertsTrend ,
233
+ dependencyAlertsTrend : dependencyAlertsTrend ,
234
+ codeAlertsTrend : codeAlertsTrend
235
+ }
236
+ }
237
+ else {
238
+ consoleLog ( `Loading alerts trend lines for alert type: [$alertType.name}]` )
239
+ // filter the alerts based on the alertType
240
+ const alerts = alertResult . value . filter ( alert => alert . alertType === alertType . name )
241
+ // create a trend line over the last 3 weeks for number of open alerts
242
+ const alertsOpenTrend = getAlertsTrendLine ( alerts , alertType . name , daysToGoBack , summaryBucket , 'open' )
243
+ const alertsDismissedTrend = getAlertsTrendLine ( alerts , alertType . name , daysToGoBack , summaryBucket , 'dismissed' )
244
+ const alertFixedTrend = getAlertsTrendLine ( alerts , alertType . name , daysToGoBack , summaryBucket , 'fixed' )
229
245
230
- return {
231
- secretAlertsTrend : secretAlertsTrend ,
232
- dependencyAlertsTrend : dependencyAlertsTrend ,
233
- codeAlertsTrend : codeAlertsTrend
246
+ return {
247
+ alertsOpenTrend : alertsOpenTrend ,
248
+ alertsDismissedTrend : alertsDismissedTrend ,
249
+ alertFixedTrend : alertFixedTrend
250
+ }
234
251
}
235
252
}
236
253
catch ( err ) {
@@ -258,7 +275,29 @@ function checkAlertActiveOnDate(alert, dateStr) {
258
275
return seenClosed ;
259
276
}
260
277
261
- function getAlertsTrendLine ( alerts , type , daysToGoBack = 21 , summaryBucket = 1 ) {
278
+ function checkAlertDismissedOnDate ( alert , dateStr ) {
279
+ // check if the alert.firstSeenDate is within the date range
280
+ // and if fixedDate is not set or is after the date range
281
+ const seenClosed = ( alert . firstSeenDate . split ( 'T' ) [ 0 ] <= dateStr && ( ! alert . fixedDate || alert . fixedDate . split ( 'T' ) [ 0 ] > dateStr ) ) ;
282
+ if ( seenClosed ) {
283
+ // check the dismissal.requestedOn date as well
284
+ if ( alert . dismissal && alert . dismissal . requestedOn ) {
285
+ const dismissed = ( alert . dismissal . requestedOn . split ( 'T' ) [ 0 ] <= dateStr ) ;
286
+ return dismissed ;
287
+ }
288
+ }
289
+
290
+ return false ;
291
+ }
292
+
293
+ function checkAlertFixedOnDate ( alert , dateStr ) {
294
+ // check if the alert.firstSeenDate is within the date range
295
+ // and if fixedDate is not set or is after the date range
296
+ const seenClosed = ( alert . firstSeenDate . split ( 'T' ) [ 0 ] <= dateStr && ( alert . fixedDate && alert . fixedDate . split ( 'T' ) [ 0 ] < dateStr ) ) ;
297
+ return seenClosed ;
298
+ }
299
+
300
+ function getAlertsTrendLine ( alerts , type , daysToGoBack = 21 , summaryBucket = 1 , filter = 'open' ) {
262
301
consoleLog ( `getAlertsTrendLine for type ${ type } ` ) ;
263
302
264
303
const trendLine = [ ] ;
@@ -270,9 +309,23 @@ function getAlertsTrendLine(alerts, type, daysToGoBack = 21, summaryBucket = 1)
270
309
for ( let d = startDate ; d <= today ; d . setDate ( d . getDate ( ) + summaryBucket ) ) {
271
310
const date = new Date ( d ) ;
272
311
const dateStr = date . toISOString ( ) . split ( 'T' ) [ 0 ] ;
273
-
274
- const alertsOnDate = alerts . filter ( alert => checkAlertActiveOnDate ( alert , dateStr ) ) ;
275
- console . log ( `On [${ dateStr } ] there were [${ alertsOnDate . length } ] active ${ type } alerts` ) ;
312
+ let alertsOnDate = [ ]
313
+ switch ( filter ) {
314
+ case 'open' :
315
+ alertsOnDate = alerts . filter ( alert => checkAlertActiveOnDate ( alert , dateStr ) ) ;
316
+ break ;
317
+ case 'dismissed' :
318
+ alertsOnDate = alerts . filter ( alert => checkAlertDismissedOnDate ( alert , dateStr ) ) ;
319
+ break ;
320
+ case 'fixed' :
321
+ alertsOnDate = alerts . filter ( alert => checkAlertFixedOnDate ( alert , dateStr ) ) ;
322
+ break ;
323
+ default :
324
+ // get all active alerts on this date
325
+ alertsOnDate = alerts . filter ( alert => checkAlertActiveOnDate ( alert , dateStr ) ) ;
326
+ break ;
327
+ }
328
+ console . log ( `On [${ dateStr } ] there were [${ alertsOnDate . length } ] [${ filter } ] [${ type } ] alerts` ) ;
276
329
trendLine . push ( {
277
330
date : dateStr ,
278
331
count : alertsOnDate . length
0 commit comments