@@ -28,7 +28,8 @@ def create_alert_graph(alert: SecurityAlert):
2828 alertentity_graph .add_node (alert ['AlertType' ],
2929 name = alert ['AlertType' ],
3030 time = str (alert ['StartTimeUtc' ]),
31- description = 'Alert: ' + alert ['AlertDisplayName' ],
31+ description = 'Alert: ' +
32+ alert ['AlertDisplayName' ],
3233 color = 'red' ,
3334 node_type = 'alert' )
3435
@@ -71,7 +72,8 @@ def create_alert_graph(alert: SecurityAlert):
7172
7273 # if we have a previously created an edge to the alert, remove it
7374 if alertentity_graph .has_edge (alert ['AlertType' ], related_entity ):
74- alertentity_graph .remove_edge (alert ['AlertType' ], related_entity )
75+ alertentity_graph .remove_edge (
76+ alert ['AlertType' ], related_entity )
7577
7678 # if we haven't added an edge to this entity from anything else,
7779 # add one to the alert
@@ -92,10 +94,13 @@ def add_related_alerts(related_alerts: pd.DataFrame, alertgraph: nx.Graph) ->nx.
9294
9395 alert_host_node = _find_graph_node (related_alerts_graph , 'host' , '' )
9496
95- related_alerts .apply (lambda x : _add_alert_node (related_alerts_graph , x ), axis = 1 )
96- related_alerts .apply (lambda x : _add_related_alert_edges (related_alerts_graph ,
97- x ,
98- alert_host_node ), axis = 1 )
97+ related_alerts .apply (lambda x : _add_alert_node (
98+ related_alerts_graph , x ), axis = 1 )
99+ if alert_host_node :
100+ related_alerts .apply (lambda x :
101+ _add_related_alert_edges (related_alerts_graph ,
102+ x ,
103+ alert_host_node ), axis = 1 )
99104 return related_alerts_graph
100105
101106
@@ -105,25 +110,29 @@ def _add_related_alert_edges(related_alerts_graph, alert_row, default_node):
105110 acct_node = _find_graph_node (related_alerts_graph , 'account' ,
106111 related_alert .primary_account .qualified_name )
107112 if acct_node is not None :
108- _add_related_alert_edge (related_alerts_graph , acct_node , related_alert )
113+ _add_related_alert_edge (
114+ related_alerts_graph , acct_node , related_alert )
109115
110116 if related_alert .primary_process is not None :
111117 proc_node = _find_graph_node (related_alerts_graph ,
112118 'process' ,
113119 related_alert .primary_process .ProcessFilePath )
114120 if proc_node is not None :
115- _add_related_alert_edge (related_alerts_graph , proc_node , related_alert )
121+ _add_related_alert_edge (
122+ related_alerts_graph , proc_node , related_alert )
116123
117124 if related_alert .primary_host is not None :
118125 host_node = _find_graph_node (related_alerts_graph ,
119126 'host' , related_alert .primary_host ['HostName' ])
120127 if host_node is not None :
121- _add_related_alert_edge (related_alerts_graph , host_node , related_alert )
128+ _add_related_alert_edge (
129+ related_alerts_graph , host_node , related_alert )
122130
123131 # if we haven't added an edge to this entity from anything else,
124132 # add one to the alert
125133 if not related_alerts_graph [related_alert ['AlertType' ] + '(R)' ]:
126- _add_related_alert_edge (related_alerts_graph , default_node , related_alert )
134+ _add_related_alert_edge (related_alerts_graph ,
135+ default_node , related_alert )
127136
128137
129138def _add_alert_node (nx_graph , alert ):
@@ -159,9 +168,11 @@ def _add_related_alert_edge(nx_graph, source, target):
159168
160169 description = 'Related alert: {} Count:{}' .format (target ['AlertType' ],
161170 current_count )
162- node_attrs = {target_node : {'count' : current_count , 'description' : description }}
171+ node_attrs = {target_node : {
172+ 'count' : current_count , 'description' : description }}
163173 nx .set_node_attributes (nx_graph , node_attrs )
164- nx_graph .add_edge (source , target_node , weight = 0.7 , description = 'Related Alert' )
174+ nx_graph .add_edge (source , target_node , weight = 0.7 ,
175+ description = 'Related Alert' )
165176
166177
167178def _get_account_qualified_name (account ):
@@ -261,7 +272,8 @@ def _get_process_name_desc(entity):
261272
262273
263274def _get_account_name_desc (entity ):
264- e_name = (entity ['NTDomain' ] + '\\ ' if 'NTDomain' in entity else '' ) + entity ['Name' ]
275+ e_name = (entity ['NTDomain' ] +
276+ '\\ ' if 'NTDomain' in entity else '' ) + entity ['Name' ]
265277 e_name = '{}: {}' .format (entity ['Type' ], e_name )
266278 if 'IsDomainJoined' in entity :
267279 domain_joined = entity ['IsDomainJoined' ]
@@ -291,6 +303,7 @@ def _get_host_name_desc(entity, os_family):
291303 domain_joined = 'false'
292304 if 'OSFamily' in entity :
293305 os_family = entity ['OSFamily' ]
294- e_description = '{}\n ({}, Domain-joined: {})' .format (e_name , os_family , domain_joined )
306+ e_description = '{}\n ({}, Domain-joined: {})' .format (e_name ,
307+ os_family , domain_joined )
295308
296309 return e_name , e_description
0 commit comments