-
Notifications
You must be signed in to change notification settings - Fork 6
/
filter.go
71 lines (64 loc) · 1.86 KB
/
filter.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
// Copyright 2019 VMware, Inc. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0
package events
import (
"github.com/gobwas/glob"
"github.com/wavefronthq/observability-for-kubernetes/collector/internal/configuration"
"github.com/wavefronthq/observability-for-kubernetes/collector/internal/filter"
)
type eventFilter struct {
allowList map[string]glob.Glob
denyList map[string]glob.Glob
allowListSets []map[string]glob.Glob
denyListSets []map[string]glob.Glob
}
func newEventFilter(filters configuration.EventsFilter) eventFilter {
allowList := filters.TagWhitelist
if len(filters.TagAllowList) > 0 {
allowList = filters.TagAllowList
}
denyList := filters.TagBlacklist
if len(filters.TagDenyList) > 0 {
denyList = filters.TagDenyList
}
allowListSets := filters.TagWhitelistSets
if len(filters.TagAllowListSets) > 0 {
allowListSets = filters.TagAllowListSets
}
denyListSets := filters.TagBlacklistSets
if len(filters.TagDenyListSets) > 0 {
denyListSets = filters.TagDenyListSets
}
return eventFilter{
allowList: filter.MultiCompile(allowList),
denyList: filter.MultiCompile(denyList),
allowListSets: filter.MultiSetCompile(allowListSets),
denyListSets: filter.MultiSetCompile(denyListSets),
}
}
func (ef eventFilter) matches(tags map[string]string) bool {
if len(ef.allowList) > 0 && !filter.MatchesTags(ef.allowList, tags) {
return false
}
if len(ef.denyList) > 0 && filter.MatchesTags(ef.denyList, tags) {
return false
}
if len(ef.allowListSets) > 0 {
// AND tags within a set, OR between sets
for _, wl := range ef.allowListSets {
if filter.MatchesAllTags(wl, tags) {
return true
}
}
return false
}
if len(ef.denyListSets) > 0 {
// AND tags within a set, OR between sets
for _, bl := range ef.denyListSets {
if filter.MatchesAllTags(bl, tags) {
return false
}
}
}
return true
}