| 102 | } |
| 103 | |
| 104 | func (n *Node) processFilter(cachedExprEnv map[string]any) (bool, error) { |
| 105 | clog := n.Logger |
| 106 | if n.RunTimeFilter == nil { |
| 107 | clog.Trace("Node has no filter, enter") |
| 108 | return true, nil |
| 109 | } |
| 110 | |
| 111 | // Evaluate node's filter |
| 112 | output, err := exprhelpers.Run(n.RunTimeFilter, cachedExprEnv, clog, n.Debug) |
| 113 | if err != nil { |
| 114 | clog.Warningf("failed to run filter: %v", err) |
| 115 | clog.Debug("Event leaving node: ko") |
| 116 | |
| 117 | return false, nil |
| 118 | } |
| 119 | |
| 120 | switch out := output.(type) { |
| 121 | case bool: |
| 122 | if !out { |
| 123 | clog.Debug("Event leaving node: ko (failed filter)") |
| 124 | return false, nil |
| 125 | } |
| 126 | default: |
| 127 | clog.Warningf("Expr %q returned non-bool, abort: %T", n.Filter, output) |
| 128 | clog.Debug("Event leaving node: ko") |
| 129 | |
| 130 | return false, nil |
| 131 | } |
| 132 | |
| 133 | return true, nil |
| 134 | } |
| 135 | |
| 136 | func (n *Node) processWhitelist(cachedExprEnv map[string]any, p *pipeline.Event) (bool, error) { |
| 137 | var exprErr error |