@@ -473,6 +473,19 @@ def severity_to_level(severity):
473
473
return 0
474
474
475
475
476
+ def severity_filter (min_severity ):
477
+ """
478
+ Create Severity Filter when min_severity >= Low.
479
+ """
480
+ severity_levels = ["Low" , "Medium" , "High" ]
481
+ severity_filter = ""
482
+ if min_severity in severity_levels :
483
+ min_level = severity_to_level (min_severity )
484
+ conditions = [f"properties/severity eq '{ s } '" for s in severity_levels if severity_to_level (s ) >= min_level ]
485
+ severity_filter = f"and ({ ' or ' .join (conditions ) } )"
486
+ return severity_filter
487
+
488
+
476
489
def generic_list_incident_items (client , incident_id , items_kind , key_in_raw_result , outputs_prefix , xsoar_transformer ):
477
490
"""
478
491
Get a list of incident's items
@@ -1312,7 +1325,7 @@ def fetch_incidents_additional_info(client: AzureSentinelClient, incidents: List
1312
1325
incident [info_type ] = client .http_request (method , f'incidents/{ incident_id } /{ info_type } ' ).get (results_key )
1313
1326
1314
1327
1315
- def fetch_incidents (client : AzureSentinelClient , last_run : dict , first_fetch_time : str , min_severity : int ) -> tuple :
1328
+ def fetch_incidents (client : AzureSentinelClient , last_run : dict , first_fetch_time : str , min_severity : str ) -> tuple :
1316
1329
"""Fetching incidents.
1317
1330
Args:
1318
1331
first_fetch_time: The first fetch time.
@@ -1346,21 +1359,23 @@ def fetch_incidents(client: AzureSentinelClient, last_run: dict, first_fetch_tim
1346
1359
1347
1360
latest_created_time_str = latest_created_time .strftime (DATE_FORMAT )
1348
1361
command_args = {
1349
- 'filter' : f'properties/createdTimeUtc ge { latest_created_time_str } ' ,
1362
+ 'filter' : f'properties/createdTimeUtc ge { latest_created_time_str } { severity_filter ( min_severity ) } ' ,
1350
1363
'orderby' : 'properties/createdTimeUtc asc' ,
1351
1364
'limit' : limit
1352
1365
}
1366
+ demisto .debug (f"Filter query used:{ command_args ['filter' ]} " )
1353
1367
1354
1368
else :
1355
1369
demisto .debug ("last fetch time is empty, trying to fetch incidents by last incident id" )
1356
1370
latest_created_time = dateparser .parse (last_fetch_time )
1357
1371
if latest_created_time is None :
1358
1372
raise DemistoException (f"{ last_fetch_time = } couldn't be parsed" )
1359
1373
command_args = {
1360
- 'filter' : f'properties/incidentNumber gt { last_incident_number } ' ,
1374
+ 'filter' : f'properties/incidentNumber gt { last_incident_number } { severity_filter ( min_severity ) } ' ,
1361
1375
'orderby' : 'properties/incidentNumber asc' ,
1362
1376
'limit' : limit
1363
1377
}
1378
+ demisto .debug (f"Filter query used:{ command_args ['filter' ]} " )
1364
1379
1365
1380
raw_incidents = list_incidents_command (client , command_args , is_fetch_incidents = True ).outputs
1366
1381
if isinstance (raw_incidents , dict ):
@@ -1371,14 +1386,14 @@ def fetch_incidents(client: AzureSentinelClient, last_run: dict, first_fetch_tim
1371
1386
1372
1387
fetch_incidents_additional_info (client , raw_incidents )
1373
1388
1374
- return process_incidents (raw_incidents , min_severity ,
1389
+ return process_incidents (raw_incidents ,
1375
1390
latest_created_time , last_incident_number ) # type: ignore[attr-defined]
1376
1391
1377
1392
1378
1393
def fetch_incidents_command (client , params ):
1379
1394
# How much time before the first fetch to retrieve incidents
1380
1395
first_fetch_time = params .get ('fetch_time' , '3 days' ).strip ()
1381
- min_severity = severity_to_level ( params .get ('min_severity' , 'Informational' ) )
1396
+ min_severity = params .get ('min_severity' , 'Informational' )
1382
1397
# Set and define the fetch incidents command to run after activated via integration settings.
1383
1398
last_run = demisto .getLastRun ()
1384
1399
demisto .debug (f"Current last run is { last_run } " )
@@ -1393,14 +1408,13 @@ def fetch_incidents_command(client, params):
1393
1408
demisto .incidents (incidents )
1394
1409
1395
1410
1396
- def process_incidents (raw_incidents : list , min_severity : int , latest_created_time : datetime ,
1411
+ def process_incidents (raw_incidents : list , latest_created_time : datetime ,
1397
1412
last_incident_number ):
1398
1413
"""Processing the raw incidents
1399
1414
Args:
1400
1415
raw_incidents: The incidents that were fetched from the API.
1401
1416
last_incident_number: The last incident number that was fetched.
1402
1417
latest_created_time: The latest created time.
1403
- min_severity: The minimum severity.
1404
1418
1405
1419
Returns:
1406
1420
A next_run dictionary, and an array of incidents.
@@ -1417,23 +1431,20 @@ def process_incidents(raw_incidents: list, min_severity: int, latest_created_tim
1417
1431
1418
1432
incident_created_time = dateparser .parse (incident .get ('CreatedTimeUTC' ))
1419
1433
current_fetch_ids .append (incident .get ('ID' ))
1420
- if incident_severity >= min_severity :
1421
- add_mirroring_fields (incident )
1422
- xsoar_incident = {
1423
- 'name' : '[Azure Sentinel] ' + incident .get ('Title' ),
1424
- 'occurred' : incident .get ('CreatedTimeUTC' ),
1425
- 'severity' : incident_severity ,
1426
- 'rawJSON' : json .dumps (incident )
1427
- }
1428
- incidents .append (xsoar_incident )
1429
- else :
1430
- demisto .debug (f"drop creation of { incident .get ('IncidentNumber' )= } "
1431
- f"due to the { incident_severity = } is lower then { min_severity = } " )
1434
+ add_mirroring_fields (incident )
1435
+ xsoar_incident = {
1436
+ 'name' : '[Azure Sentinel] ' + incident .get ('Title' ),
1437
+ 'occurred' : incident .get ('CreatedTimeUTC' ),
1438
+ 'severity' : incident_severity ,
1439
+ 'rawJSON' : json .dumps (incident )
1440
+ }
1432
1441
1433
1442
# Update last run to the latest fetch time
1434
1443
if incident_created_time is None :
1435
1444
raise DemistoException (f"{ incident .get ('CreatedTimeUTC' )= } couldn't be parsed" )
1436
1445
1446
+ incidents .append (xsoar_incident )
1447
+
1437
1448
if incident_created_time > latest_created_time :
1438
1449
latest_created_time = incident_created_time
1439
1450
if incident .get ('IncidentNumber' ) > last_incident_number :
0 commit comments