-
Notifications
You must be signed in to change notification settings - Fork 2
/
yaml.go
60 lines (51 loc) · 1.35 KB
/
yaml.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 enrichers
import (
"github.com/mobalyticshq/alertsforge/sharedtools"
"gopkg.in/yaml.v3"
)
type yamlEnricher struct {
alertinfo AlertInfo
config map[string]string
fileReader fileInterface
}
func NewYamlEnricher(alertinfo AlertInfo, config map[string]string) *yamlEnricher {
return &yamlEnricher{alertinfo: alertinfo, config: config, fileReader: &fileReader{}}
}
func (y *yamlEnricher) Enrich() (map[string]string, error) {
if err := isEnoughConfigParameters(y.config, []string{
fileName,
targetLabel,
value,
}); err != nil {
return nil, err
}
variables := make(map[string]interface{})
file, err := y.fileReader.getFile(y.config[fileName])
if err != nil {
return nil, err
}
err = yaml.Unmarshal(file, variables)
if err != nil {
return nil, err
}
type extendedAlertInfo struct {
Labels map[string]string
Annotations map[string]string
Variables map[string]interface{}
StartsAt string
}
alertInfoWithVariables := extendedAlertInfo{
Labels: y.alertinfo.Labels,
Annotations: y.alertinfo.Annotations,
Variables: variables,
StartsAt: y.alertinfo.StartsAt,
}
parsedValue, err := sharedtools.TemplateString(y.config[value], alertInfoWithVariables)
if err != nil {
return nil, err
}
if len(parsedValue) == 0 {
return nil, nil
}
return map[string]string{y.config[targetLabel]: parsedValue}, nil
}