/
filter_silence_jira.go
73 lines (67 loc) · 1.64 KB
/
filter_silence_jira.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
61
62
63
64
65
66
67
68
69
70
71
72
73
package filters
import (
"fmt"
"strings"
"github.com/prymitive/karma/internal/models"
)
type silenceJiraFilter struct {
alertFilter
}
func (filter *silenceJiraFilter) Match(alert *models.Alert, matches int) bool {
if filter.IsValid {
var isMatch bool
if alert.IsSilenced() {
for _, silenceID := range alert.SilencedBy {
for _, am := range alert.Alertmanager {
silence, found := am.Silences[silenceID]
if found {
m := filter.Matcher.Compare(silence.JiraID, filter.Value)
if m {
isMatch = m
}
}
}
}
} else {
isMatch = filter.Matcher.Compare("", filter.Value)
}
if isMatch {
filter.Hits++
}
return isMatch
}
e := fmt.Sprintf("Match() called on invalid filter %#v", filter)
panic(e)
}
func newSilenceJiraFilter() FilterT {
f := silenceJiraFilter{}
return &f
}
func silenceJiraIDAutocomplete(name string, operators []string, alerts []models.Alert) []models.Autocomplete {
tokens := map[string]models.Autocomplete{}
for _, alert := range alerts {
if alert.IsSilenced() {
for _, silenceID := range alert.SilencedBy {
for _, am := range alert.Alertmanager {
silence, found := am.Silences[silenceID]
if found && silence.JiraID != "" {
for _, operator := range operators {
token := fmt.Sprintf("%s%s%s", name, operator, silence.JiraID)
tokens[token] = makeAC(token, []string{
name,
strings.TrimPrefix(name, "@"),
fmt.Sprintf("%s%s", name, operator),
silence.JiraID,
})
}
}
}
}
}
}
acData := []models.Autocomplete{}
for _, token := range tokens {
acData = append(acData, token)
}
return acData
}