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  }