8
8
"log/slog"
9
9
"net/http"
10
10
"os"
11
- "path/filepath"
12
11
"plugin"
13
12
"strconv"
14
13
"strings"
@@ -196,13 +195,21 @@ func initKafkaConfig(ko *koanf.Koanf) ([]relay.ConsumerGroupCfg, relay.ProducerC
196
195
197
196
// initFilters loads the go plugin, initializes it and return a map of filter plugins.
198
197
func initFilters (ko * koanf.Koanf , lo * slog.Logger ) (map [string ]filter.Provider , error ) {
198
+ if ko .String ("mode" ) != "single" {
199
+ log .Fatalf ("filters can only be used in `single` mode." )
200
+ }
201
+
199
202
out := make (map [string ]filter.Provider )
200
- for _ , name := range ko .MapKeys ("filters" ) {
201
- plg , err := plugin .Open (name )
203
+ for _ , id := range ko .MapKeys ("filters" ) {
204
+ if ! ko .Bool ("filters." + id + ".enabled" ) {
205
+ continue
206
+ }
207
+
208
+ path := ko .String ("filters." + id + ".path" )
209
+ plg , err := plugin .Open (path )
202
210
if err != nil {
203
- return nil , fmt .Errorf ("error loading provider plugin '%s': %v" , name , err )
211
+ return nil , fmt .Errorf ("error loading provider plugin '%s': %s: % v" , id , path , err )
204
212
}
205
- id := strings .TrimSuffix (filepath .Base (name ), filepath .Ext (name ))
206
213
207
214
newFunc , err := plg .Lookup ("New" )
208
215
if err != nil {
@@ -215,7 +222,7 @@ func initFilters(ko *koanf.Koanf, lo *slog.Logger) (map[string]filter.Provider,
215
222
216
223
var cfg filter.Config
217
224
if err := ko .Unmarshal ("filter." + id , & cfg ); err != nil {
218
- log .Fatalf ("error unmarshalling filter config: %s: %v" , name , err )
225
+ log .Fatalf ("error unmarshalling filter config: %s: %v" , id , err )
219
226
}
220
227
if cfg .Config == "" {
221
228
lo .Info (fmt .Sprintf ("WARNING: No config 'filter.%s' for '%s' in config" , id , id ))
@@ -226,7 +233,7 @@ func initFilters(ko *koanf.Koanf, lo *slog.Logger) (map[string]filter.Provider,
226
233
if err != nil {
227
234
return nil , fmt .Errorf ("error initializing filter provider plugin '%s': %v" , id , err )
228
235
}
229
- lo .Info (fmt .Sprintf ("loaded filter provider plugin '%s' from %s" , id , name ))
236
+ lo .Info (fmt .Sprintf ("loaded filter provider plugin '%s' from %s" , id , id ))
230
237
231
238
p , ok := prov .(filter.Provider )
232
239
if ! ok {
0 commit comments