@@ -41,10 +41,12 @@ pub fn filter_keyvals_regex(mut events: Vec<Event>, key: &str, regex: &Regex) ->
41
41
let mut filtered_events = Vec :: new ( ) ;
42
42
43
43
for event in events. drain ( ..) {
44
- if let Some ( v) = event. data . get ( key) {
45
- if regex. is_match ( v. as_str ( ) . unwrap ( ) ) . unwrap ( ) {
46
- filtered_events. push ( event) ;
47
- }
44
+ if let Some ( value) = event. data . get ( key) . and_then ( |v| v. as_str ( ) ) {
45
+ match regex. is_match ( value) {
46
+ Ok ( true ) => filtered_events. push ( event) ,
47
+ Ok ( false ) => ( ) ,
48
+ Err ( err) => warn ! ( "Failed to run regex: {}" , err) ,
49
+ } ;
48
50
}
49
51
}
50
52
filtered_events
@@ -132,6 +134,20 @@ mod tests {
132
134
assert_eq ! ( 0 , res. len( ) ) ;
133
135
}
134
136
137
+ #[ test]
138
+ fn test_filter_keyvals_regex_non_string_data_value ( ) {
139
+ let e1 = Event {
140
+ id : None ,
141
+ timestamp : DateTime :: from_str ( "2000-01-01T00:00:00Z" ) . unwrap ( ) ,
142
+ duration : Duration :: seconds ( 1 ) ,
143
+ data : json_map ! { "key1" : json!( 100 ) } ,
144
+ } ;
145
+ let events = vec ! [ e1. clone( ) ] ;
146
+ let regex_value = RegexBuilder :: new ( "value" ) . build ( ) . unwrap ( ) ;
147
+ let res = filter_keyvals_regex ( events. clone ( ) , "key1" , & regex_value) ;
148
+ assert ! ( res. is_empty( ) ) ;
149
+ }
150
+
135
151
#[ test]
136
152
fn test_exclude_keyvals ( ) {
137
153
let e1 = Event {
0 commit comments