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  }