github.com/crowdsecurity/crowdsec@v1.6.1/pkg/parser/enrich.go (about) 1 package parser 2 3 import ( 4 log "github.com/sirupsen/logrus" 5 6 "github.com/crowdsecurity/crowdsec/pkg/types" 7 ) 8 9 /* should be part of a package shared with enrich/geoip.go */ 10 type EnrichFunc func(string, *types.Event, interface{}, *log.Entry) (map[string]string, error) 11 type InitFunc func(map[string]string) (interface{}, error) 12 13 type EnricherCtx struct { 14 Registered map[string]*Enricher 15 } 16 17 type Enricher struct { 18 Name string 19 InitFunc InitFunc 20 EnrichFunc EnrichFunc 21 Ctx interface{} 22 } 23 24 /* mimic plugin loading */ 25 func Loadplugin(path string) (EnricherCtx, error) { 26 enricherCtx := EnricherCtx{} 27 enricherCtx.Registered = make(map[string]*Enricher) 28 29 enricherConfig := map[string]string{"datadir": path} 30 31 EnrichersList := []*Enricher{ 32 { 33 Name: "GeoIpCity", 34 InitFunc: GeoIPCityInit, 35 EnrichFunc: GeoIpCity, 36 }, 37 { 38 Name: "GeoIpASN", 39 InitFunc: GeoIPASNInit, 40 EnrichFunc: GeoIpASN, 41 }, 42 { 43 Name: "IpToRange", 44 InitFunc: IpToRangeInit, 45 EnrichFunc: IpToRange, 46 }, 47 { 48 Name: "reverse_dns", 49 InitFunc: reverseDNSInit, 50 EnrichFunc: reverse_dns, 51 }, 52 { 53 Name: "ParseDate", 54 InitFunc: parseDateInit, 55 EnrichFunc: ParseDate, 56 }, 57 { 58 Name: "UnmarshalJSON", 59 InitFunc: unmarshalInit, 60 EnrichFunc: unmarshalJSON, 61 }, 62 } 63 64 for _, enricher := range EnrichersList { 65 log.Debugf("Initiating enricher '%s'", enricher.Name) 66 pluginCtx, err := enricher.InitFunc(enricherConfig) 67 if err != nil { 68 log.Errorf("unable to register plugin '%s': %v", enricher.Name, err) 69 continue 70 } 71 enricher.Ctx = pluginCtx 72 log.Infof("Successfully registered enricher '%s'", enricher.Name) 73 enricherCtx.Registered[enricher.Name] = enricher 74 } 75 76 return enricherCtx, nil 77 }