Fix event filter

If a filter provides a k/v map, then the keys must exist in the event,
otherwise it's not a mach.
This commit is contained in:
Ingo Oppermann
2023-07-20 15:43:28 +02:00
parent e6391b0b7b
commit 11e28a8d37
2 changed files with 55 additions and 1 deletions

View File

@@ -67,7 +67,7 @@ func (e *Event) Filter(ef *EventFilter) bool {
for k, r := range ef.reData {
v, ok := e.Data[k]
if !ok {
continue
return false
}
if !r.MatchString(v) {

View File

@@ -80,6 +80,60 @@ func TestEventFilter(t *testing.T) {
require.False(t, res)
}
func TestEventFilterDataKey(t *testing.T) {
event := Event{
Timestamp: 1234,
Level: 3,
Component: "foobar",
Message: "none",
Data: map[string]string{
"foo": "bar",
},
}
filter := EventFilter{
Component: "foobar",
Level: "info",
Message: "none",
}
err := filter.Compile()
require.NoError(t, err)
res := event.Filter(&filter)
require.True(t, res)
filter = EventFilter{
Component: "foobar",
Level: "info",
Message: "none",
Data: map[string]string{
"bar": "foo",
},
}
err = filter.Compile()
require.NoError(t, err)
res = event.Filter(&filter)
require.False(t, res)
filter = EventFilter{
Component: "foobar",
Level: "info",
Message: "none",
Data: map[string]string{
"foo": "bar",
},
}
err = filter.Compile()
require.NoError(t, err)
res = event.Filter(&filter)
require.True(t, res)
}
func BenchmarkEventFilters(b *testing.B) {
event := Event{
Timestamp: 1234,