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