diff --git a/libbeat/filter/condition.go b/libbeat/filter/condition.go index 76275aa45d3..bb51980b2b8 100644 --- a/libbeat/filter/condition.go +++ b/libbeat/filter/condition.go @@ -62,13 +62,8 @@ func (c *Condition) AddContains(contains map[string]string) error { return nil } -func (c *Condition) AddRegexp(r map[string]string) error { - - for field, value := range r { - reg, err := regexp.CompilePOSIX(value) - if err != nil { - return err - } +func (c *Condition) AddRegexp(r map[string]*regexp.Regexp) error { + for field, reg := range r { c.Regexp[field] = reg } return nil diff --git a/libbeat/filter/condition_test.go b/libbeat/filter/condition_test.go index 58cce23fa45..793dfe5faf3 100644 --- a/libbeat/filter/condition_test.go +++ b/libbeat/filter/condition_test.go @@ -1,6 +1,7 @@ package filter import ( + "regexp" "testing" "github.com/elastic/beats/libbeat/common" @@ -126,8 +127,8 @@ func TestRegexpCondition(t *testing.T) { // first simple condition config1 := ConditionConfig{ - Regexp: map[string]string{ - "source": "apache2/error.*", + Regexp: map[string]*regexp.Regexp{ + "source": regexp.MustCompile("apache2/error.*"), }, } cond1, err := NewCondition(config1) @@ -135,8 +136,8 @@ func TestRegexpCondition(t *testing.T) { // second simple condition config2 := ConditionConfig{ - Regexp: map[string]string{ - "source": "apache2/access.*", + Regexp: map[string]*regexp.Regexp{ + "source": regexp.MustCompile("apache2/access.*"), }, } cond2, err := NewCondition(config2) @@ -144,9 +145,9 @@ func TestRegexpCondition(t *testing.T) { // third complex condition config3 := ConditionConfig{ - Regexp: map[string]string{ - "source": "apache2/error.*", - "message": "[client 1.2.3.4]", + Regexp: map[string]*regexp.Regexp{ + "source": regexp.MustCompile("apache2/error.*"), + "message": regexp.MustCompile("[client 1.2.3.4]"), }, } cond3, err := NewCondition(config3) @@ -217,7 +218,7 @@ func TestRangeCondition(t *testing.T) { assert.True(t, err == nil) // float condition - var v05 float64 = 0.5 + var v05 = 0.5 config4 := ConditionConfig{ Range: map[string]RangeValue{ "proc.cpu.total_p": RangeValue{Gte: &v05}, diff --git a/libbeat/filter/config.go b/libbeat/filter/config.go index 72d44aabe64..dcdbd7c75fb 100644 --- a/libbeat/filter/config.go +++ b/libbeat/filter/config.go @@ -1,10 +1,12 @@ package filter +import "regexp" + type ConditionConfig struct { - Equals map[string]string `config:"equals"` - Contains map[string]string `config:"contains"` - Regexp map[string]string `config:"regexp"` - Range map[string]RangeValue `config:"range"` + Equals map[string]string `config:"equals"` + Contains map[string]string `config:"contains"` + Regexp map[string]*regexp.Regexp `config:"regexp"` + Range map[string]RangeValue `config:"range"` } type RangeValue struct { diff --git a/libbeat/filter/filter_test.go b/libbeat/filter/filter_test.go index b2a5cb4eb79..92247284ad9 100644 --- a/libbeat/filter/filter_test.go +++ b/libbeat/filter/filter_test.go @@ -1,6 +1,7 @@ package filter import ( + "regexp" "testing" "github.com/elastic/beats/libbeat/common" @@ -83,8 +84,8 @@ func TestIncludeFields1(t *testing.T) { rule, err := NewIncludeFields(IncludeFieldsConfig{ Fields: []string{"proc.cpu.total_ddd"}, - ConditionConfig: ConditionConfig{Regexp: map[string]string{ - "proc.cmdline": "launchd", + ConditionConfig: ConditionConfig{Regexp: map[string]*regexp.Regexp{ + "proc.cmdline": regexp.MustCompile("launchd"), }}, }) assert.True(t, err == nil)