github.com/observiq/carbon@v0.9.11-0.20200820160507-1b872e368a5e/operator/helper/labeler.go (about) 1 package helper 2 3 import ( 4 "github.com/observiq/carbon/entry" 5 ) 6 7 // NewLabelerConfig creates a new labeler config with default values 8 func NewLabelerConfig() LabelerConfig { 9 return LabelerConfig{ 10 Labels: make(map[string]ExprStringConfig), 11 } 12 } 13 14 // LabelerConfig is the configuration of a labeler 15 type LabelerConfig struct { 16 Labels map[string]ExprStringConfig `json:"labels" yaml:"labels"` 17 } 18 19 // Build will build a labeler from the supplied configuration 20 func (c LabelerConfig) Build() (Labeler, error) { 21 labeler := Labeler{ 22 labels: make(map[string]*ExprString), 23 } 24 25 for k, v := range c.Labels { 26 exprString, err := v.Build() 27 if err != nil { 28 return labeler, err 29 } 30 31 labeler.labels[k] = exprString 32 } 33 34 return labeler, nil 35 } 36 37 // Labeler is a helper that adds labels to an entry 38 type Labeler struct { 39 labels map[string]*ExprString 40 } 41 42 // Label will add labels to an entry 43 func (l *Labeler) Label(e *entry.Entry) error { 44 if len(l.labels) == 0 { 45 return nil 46 } 47 48 env := GetExprEnv(e) 49 defer PutExprEnv(env) 50 51 for k, v := range l.labels { 52 rendered, err := v.Render(env) 53 if err != nil { 54 return err 55 } 56 e.AddLabel(k, rendered) 57 } 58 59 return nil 60 }