github.com/netdata/go.d.plugin@v0.58.1/pkg/prometheus/selector/expr.go (about) 1 // SPDX-License-Identifier: GPL-3.0-or-later 2 3 package selector 4 5 import "fmt" 6 7 type Expr struct { 8 Allow []string `yaml:"allow"` 9 Deny []string `yaml:"deny"` 10 } 11 12 func (e Expr) Empty() bool { 13 return len(e.Allow) == 0 && len(e.Deny) == 0 14 15 } 16 17 func (e Expr) Parse() (Selector, error) { 18 if e.Empty() { 19 return nil, nil 20 } 21 22 var srs []Selector 23 var allow Selector 24 var deny Selector 25 26 for _, item := range e.Allow { 27 sr, err := Parse(item) 28 if err != nil { 29 return nil, fmt.Errorf("parse selector '%s': %v", item, err) 30 } 31 srs = append(srs, sr) 32 } 33 34 switch len(srs) { 35 case 0: 36 allow = trueSelector{} 37 case 1: 38 allow = srs[0] 39 default: 40 allow = Or(srs[0], srs[1], srs[2:]...) 41 } 42 43 srs = srs[:0] 44 for _, item := range e.Deny { 45 sr, err := Parse(item) 46 if err != nil { 47 return nil, fmt.Errorf("parse selector '%s': %v", item, err) 48 } 49 srs = append(srs, sr) 50 } 51 52 switch len(srs) { 53 case 0: 54 deny = falseSelector{} 55 case 1: 56 deny = srs[0] 57 default: 58 deny = Or(srs[0], srs[1], srs[2:]...) 59 } 60 61 return And(allow, Not(deny)), nil 62 }