13
v1 "github.com/cilium/cilium/pkg/hubble/api/v1"
14
hubbleFilters "github.com/cilium/cilium/pkg/hubble/filters"
15
"github.com/cilium/tetragon/api/v1/tetragon"
16
"github.com/cilium/tetragon/api/v1/tetragon/codegen/helpers"
20
func ParseFilterList(filters string, enablePidSetFilters bool) ([]*tetragon.Filter, error) {
24
dec := json.NewDecoder(strings.NewReader(filters))
25
var results []*tetragon.Filter
27
var result tetragon.Filter
28
if err := dec.Decode(&result); err != nil {
34
if len(result.PidSet) != 0 && !enablePidSetFilters {
35
return nil, fmt.Errorf("pidSet filters use a best-effort approach for tracking PIDs and are intended for testing/development, not for production (pass the --enable-pid-set-filter to ignore)")
37
results = append(results, &result)
43
type OnBuildFilter interface {
44
OnBuildFilter(context.Context, *tetragon.Filter) ([]hubbleFilters.FilterFunc, error)
48
type OnBuildFilterFunc func(context.Context, *tetragon.Filter) ([]hubbleFilters.FilterFunc, error)
51
func (f OnBuildFilterFunc) OnBuildFilter(ctx context.Context, tetragonFilter *tetragon.Filter) ([]hubbleFilters.FilterFunc, error) {
52
return f(ctx, tetragonFilter)
55
func BuildFilter(ctx context.Context, ff *tetragon.Filter, filterFuncs []OnBuildFilter) (hubbleFilters.FilterFuncs, error) {
56
var fs []hubbleFilters.FilterFunc
57
for _, f := range filterFuncs {
58
fl, err := f.OnBuildFilter(ctx, ff)
63
fs = append(fs, fl...)
69
func BuildFilterList(ctx context.Context, ff []*tetragon.Filter, filterFuncs []OnBuildFilter) (hubbleFilters.FilterFuncs, error) {
70
filterList := make([]hubbleFilters.FilterFunc, 0, len(ff))
71
for _, flowFilter := range ff {
72
tf, err := BuildFilter(ctx, flowFilter, filterFuncs)
76
filterFunc := func(ev *v1.Event) bool {
77
return tf.MatchAll(ev)
79
filterList = append(filterList, filterFunc)
81
return filterList, nil
85
var Filters = []OnBuildFilter{
87
&ParentBinaryRegexFilter{},
93
&ArgumentsRegexFilter{},
100
func GetProcess(event *v1.Event) *tetragon.Process {
104
response, ok := event.Event.(*tetragon.GetEventsResponse)
108
return helpers.ResponseGetProcess(response)
111
func GetParent(event *v1.Event) *tetragon.Process {
115
response, ok := event.Event.(*tetragon.GetEventsResponse)
119
return helpers.ResponseGetParent(response)
122
func GetPolicyName(event *v1.Event) string {
126
response, ok := event.Event.(*tetragon.GetEventsResponse)
130
return helpers.ResponseGetProcessKprobe(response).GetPolicyName()