github.com/netdata/go.d.plugin@v0.58.1/pkg/matcher/simple_patterns.go (about) 1 // SPDX-License-Identifier: GPL-3.0-or-later 2 3 package matcher 4 5 import ( 6 "strings" 7 ) 8 9 type ( 10 simplePatternTerm struct { 11 matcher Matcher 12 positive bool 13 } 14 15 // simplePatternsMatcher patterns. 16 simplePatternsMatcher []simplePatternTerm 17 ) 18 19 // NewSimplePatternsMatcher creates new simple patterns. It returns error in case one of patterns has bad syntax. 20 func NewSimplePatternsMatcher(expr string) (Matcher, error) { 21 var ps simplePatternsMatcher 22 23 for _, pattern := range strings.Fields(expr) { 24 if err := ps.add(pattern); err != nil { 25 return nil, err 26 } 27 } 28 if len(ps) == 0 { 29 return FALSE(), nil 30 } 31 return ps, nil 32 } 33 34 func (m *simplePatternsMatcher) add(term string) error { 35 p := simplePatternTerm{} 36 if term[0] == '!' { 37 p.positive = false 38 term = term[1:] 39 } else { 40 p.positive = true 41 } 42 matcher, err := NewGlobMatcher(term) 43 if err != nil { 44 return err 45 } 46 47 p.matcher = matcher 48 *m = append(*m, p) 49 50 return nil 51 } 52 53 func (m simplePatternsMatcher) Match(b []byte) bool { 54 return m.MatchString(string(b)) 55 } 56 57 // MatchString matches. 58 func (m simplePatternsMatcher) MatchString(line string) bool { 59 for _, p := range m { 60 if p.matcher.MatchString(line) { 61 return p.positive 62 } 63 } 64 return false 65 }