@@ -88,27 +88,28 @@ def insert_events(self, tenant_id, events: typing.List[AlertDto]):
88
88
# TODO: more sophisticated filtering/attributes/nested, etc
89
89
filter_key = filter .get ("key" )
90
90
filter_val = filter .get ("value" )
91
- if not getattr (event , filter_key , None ):
91
+ event_val = self ._get_event_value (event , filter_key )
92
+ if not event_val :
92
93
self .logger .warning (
93
94
"Failed to run filter, skipping the event. Probably misconfigured workflow."
94
95
)
96
+ should_run = False
95
97
continue
96
98
# if its list, check if the filter is in the list
97
- if isinstance (getattr ( event , filter_key ) , list ):
98
- for val in getattr ( event , filter_key ) :
99
+ if isinstance (event_val , list ):
100
+ for val in event_val :
99
101
# if one filter applies, it should run
100
102
if self ._apply_filter (filter_val , val ):
101
103
should_run = True
102
104
break
103
105
should_run = False
104
106
# elif the filter is string/int/float, compare them:
105
- elif type (getattr ( event , filter_key , None ) ) in [
107
+ elif type (event_val ) in [
106
108
int ,
107
109
str ,
108
110
float ,
109
111
]:
110
- val = getattr (event , filter_key )
111
- if not self ._apply_filter (filter_val , val ):
112
+ if not self ._apply_filter (filter_val , event_val ):
112
113
self .logger .debug (
113
114
"Filter didn't match, skipping" ,
114
115
extra = {
@@ -148,6 +149,24 @@ def insert_events(self, tenant_id, events: typing.List[AlertDto]):
148
149
}
149
150
)
150
151
152
+ def _get_event_value (self , event , filter_key ):
153
+ # if the filter key is a nested key, get the value
154
+ if "." in filter_key :
155
+ filter_key_split = filter_key .split ("." )
156
+ # event is alert dto so we need getattr
157
+ event_val = getattr (event , filter_key_split [0 ], None )
158
+ if not event_val :
159
+ return None
160
+ # iterate the other keys
161
+ for key in filter_key_split [1 :]:
162
+ event_val = event_val .get (key , None )
163
+ # if the key doesn't exist, return None because we didn't find the value
164
+ if not event_val :
165
+ return None
166
+ return event_val
167
+ else :
168
+ return getattr (event , filter_key , None )
169
+
151
170
# TODO should be fixed to support the usual CLI
152
171
def run (self , workflows : list [Workflow ]):
153
172
"""
0 commit comments