/
filters.go
47 lines (41 loc) · 1.18 KB
/
filters.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
package main
import (
"github.com/jitsucom/bulker/jitsubase/utils"
"strings"
)
func SatisfyFilter(filter, subject string) bool {
return filter == "*" || strings.TrimSpace(strings.ToLower(filter)) == strings.TrimSpace(strings.ToLower(subject))
}
func SatisfyDomainFilter(filter, subject string) bool {
if filter == "*" {
return true
}
if strings.HasPrefix(filter, "*.") {
return strings.HasSuffix(subject, filter[1:])
} else {
return filter == subject
}
}
func parseFilter(value any) []string {
switch v := value.(type) {
case string:
return strings.Split(v, "\n")
case []string:
return v
case nil:
return []string{"*"}
default:
return []string{}
}
}
func ApplyFilters(event *AnalyticsServerEvent, opts map[string]any) bool {
eventsArray := parseFilter(opts["events"])
hostsArray := parseFilter(opts["hosts"])
return utils.ArrayContainsF(hostsArray, func(f string) bool {
return SatisfyDomainFilter(f, event.GetPathS("context.page.host"))
}) && (utils.ArrayContainsF(eventsArray, func(f string) bool {
return SatisfyFilter(f, event.GetS("type"))
}) || utils.ArrayContainsF(eventsArray, func(f string) bool {
return SatisfyFilter(f, event.GetS("event"))
}))
}