Remove alertmanager models in the models package

Those aren't needed anymore, only mapper package needs to know Alertmanager schema and it already does so
This commit is contained in:
Łukasz Mierzwa
2017-04-06 19:24:48 -07:00
parent 0936f1b9c1
commit 681d3d1a5b
7 changed files with 103 additions and 145 deletions
+53 -53
View File
@@ -34,13 +34,13 @@ var tests = []filterTest{
filterTest{
Expression: "@silenced=true",
IsValid: true,
Alert: models.UnseeAlert{AlertmanagerAlert: models.AlertmanagerAlert{Silenced: "1"}},
Alert: models.UnseeAlert{Silenced: "1"},
IsMatch: true,
},
filterTest{
Expression: "@silenced!=true",
IsValid: true,
Alert: models.UnseeAlert{AlertmanagerAlert: models.AlertmanagerAlert{Silenced: "1"}},
Alert: models.UnseeAlert{Silenced: "1"},
IsMatch: false,
},
filterTest{
@@ -51,225 +51,225 @@ var tests = []filterTest{
filterTest{
Expression: "@silence_jira=1",
IsValid: true,
Alert: models.UnseeAlert{AlertmanagerAlert: models.AlertmanagerAlert{Silenced: "1"}},
Silence: models.UnseeSilence{AlertmanagerSilence: models.AlertmanagerSilence{ID: "1"}, JiraID: "1"},
Alert: models.UnseeAlert{Silenced: "1"},
Silence: models.UnseeSilence{ID: "1", JiraID: "1"},
IsMatch: true,
},
filterTest{
Expression: "@silence_jira=2",
IsValid: true,
Alert: models.UnseeAlert{AlertmanagerAlert: models.AlertmanagerAlert{Silenced: "1"}},
Silence: models.UnseeSilence{AlertmanagerSilence: models.AlertmanagerSilence{ID: "1"}},
Alert: models.UnseeAlert{Silenced: "1"},
Silence: models.UnseeSilence{ID: "1"},
IsMatch: false,
},
filterTest{
Expression: "@silence_jira!=3",
IsValid: true,
Alert: models.UnseeAlert{AlertmanagerAlert: models.AlertmanagerAlert{Silenced: "1"}},
Silence: models.UnseeSilence{AlertmanagerSilence: models.AlertmanagerSilence{ID: "1"}, JiraID: "x"},
Alert: models.UnseeAlert{Silenced: "1"},
Silence: models.UnseeSilence{ID: "1", JiraID: "x"},
IsMatch: true,
},
filterTest{
Expression: "@silence_jira!=4",
IsValid: true,
Alert: models.UnseeAlert{AlertmanagerAlert: models.AlertmanagerAlert{Silenced: "1"}},
Silence: models.UnseeSilence{AlertmanagerSilence: models.AlertmanagerSilence{ID: "1"}, JiraID: "4"},
Alert: models.UnseeAlert{Silenced: "1"},
Silence: models.UnseeSilence{ID: "1", JiraID: "4"},
IsMatch: false,
},
filterTest{
Expression: "@silence_jira!=5",
IsValid: true,
Alert: models.UnseeAlert{AlertmanagerAlert: models.AlertmanagerAlert{Silenced: "1"}},
Silence: models.UnseeSilence{AlertmanagerSilence: models.AlertmanagerSilence{ID: "1"}},
Alert: models.UnseeAlert{Silenced: "1"},
Silence: models.UnseeSilence{ID: "1"},
IsMatch: true,
},
filterTest{
Expression: "@silence_jira=~abc",
IsValid: true,
Alert: models.UnseeAlert{AlertmanagerAlert: models.AlertmanagerAlert{Silenced: "1"}},
Silence: models.UnseeSilence{AlertmanagerSilence: models.AlertmanagerSilence{ID: "1"}, JiraID: "xxabcxx"},
Alert: models.UnseeAlert{Silenced: "1"},
Silence: models.UnseeSilence{ID: "1", JiraID: "xxabcxx"},
IsMatch: true,
},
filterTest{
Expression: "@silence_jira=~abc",
IsValid: true,
Alert: models.UnseeAlert{AlertmanagerAlert: models.AlertmanagerAlert{Silenced: "1"}},
Silence: models.UnseeSilence{AlertmanagerSilence: models.AlertmanagerSilence{ID: "1"}, JiraID: "xxx"},
Alert: models.UnseeAlert{Silenced: "1"},
Silence: models.UnseeSilence{ID: "1", JiraID: "xxx"},
IsMatch: false,
},
filterTest{
Expression: "@silence_author=john",
IsValid: true,
Alert: models.UnseeAlert{AlertmanagerAlert: models.AlertmanagerAlert{Silenced: "1"}},
Silence: models.UnseeSilence{AlertmanagerSilence: models.AlertmanagerSilence{ID: "1", CreatedBy: "john"}},
Alert: models.UnseeAlert{Silenced: "1"},
Silence: models.UnseeSilence{ID: "1", CreatedBy: "john"},
IsMatch: true,
},
filterTest{
Expression: "@silence_author=john",
IsValid: true,
Alert: models.UnseeAlert{AlertmanagerAlert: models.AlertmanagerAlert{Silenced: "1"}},
Silence: models.UnseeSilence{AlertmanagerSilence: models.AlertmanagerSilence{ID: "1", CreatedBy: "bob"}},
Alert: models.UnseeAlert{Silenced: "1"},
Silence: models.UnseeSilence{ID: "1", CreatedBy: "bob"},
IsMatch: false,
},
filterTest{
Expression: "@silence_author!=john",
IsValid: true,
Alert: models.UnseeAlert{AlertmanagerAlert: models.AlertmanagerAlert{Silenced: "1"}},
Silence: models.UnseeSilence{AlertmanagerSilence: models.AlertmanagerSilence{ID: "1", CreatedBy: "bob"}},
Alert: models.UnseeAlert{Silenced: "1"},
Silence: models.UnseeSilence{ID: "1", CreatedBy: "bob"},
IsMatch: true,
},
filterTest{
Expression: "@silence_author!=john",
IsValid: true,
Alert: models.UnseeAlert{AlertmanagerAlert: models.AlertmanagerAlert{Silenced: "1"}},
Silence: models.UnseeSilence{AlertmanagerSilence: models.AlertmanagerSilence{ID: "1", CreatedBy: "john"}},
Alert: models.UnseeAlert{Silenced: "1"},
Silence: models.UnseeSilence{ID: "1", CreatedBy: "john"},
IsMatch: false,
},
filterTest{
Expression: "@silence_author!=john",
IsValid: true,
Alert: models.UnseeAlert{AlertmanagerAlert: models.AlertmanagerAlert{Silenced: "1"}},
Silence: models.UnseeSilence{AlertmanagerSilence: models.AlertmanagerSilence{ID: "1"}},
Alert: models.UnseeAlert{Silenced: "1"},
Silence: models.UnseeSilence{ID: "1"},
IsMatch: true,
},
filterTest{
Expression: "@age<1h",
IsValid: true,
Alert: models.UnseeAlert{AlertmanagerAlert: models.AlertmanagerAlert{StartsAt: time.Now().Add(time.Minute * -55)}},
Alert: models.UnseeAlert{StartsAt: time.Now().Add(time.Minute * -55)},
IsMatch: true,
},
filterTest{
Expression: "@age>1h",
IsValid: true,
Alert: models.UnseeAlert{AlertmanagerAlert: models.AlertmanagerAlert{StartsAt: time.Now().Add(time.Hour * -2)}},
Alert: models.UnseeAlert{StartsAt: time.Now().Add(time.Hour * -2)},
IsMatch: true,
},
filterTest{
Expression: "@age<-1h",
IsValid: true,
Alert: models.UnseeAlert{AlertmanagerAlert: models.AlertmanagerAlert{StartsAt: time.Now().Add(time.Minute * -55)}},
Alert: models.UnseeAlert{StartsAt: time.Now().Add(time.Minute * -55)},
IsMatch: true,
},
filterTest{
Expression: "@age>-1h",
IsValid: true,
Alert: models.UnseeAlert{AlertmanagerAlert: models.AlertmanagerAlert{StartsAt: time.Now().Add(time.Hour * -2)}},
Alert: models.UnseeAlert{StartsAt: time.Now().Add(time.Hour * -2)},
IsMatch: true,
},
filterTest{
Expression: "node=vps1",
IsValid: true,
Alert: models.UnseeAlert{AlertmanagerAlert: models.AlertmanagerAlert{Labels: map[string]string{"node": "vps1"}}},
Alert: models.UnseeAlert{Labels: map[string]string{"node": "vps1"}},
IsMatch: true,
},
filterTest{
Expression: "node=vps1",
IsValid: true,
Alert: models.UnseeAlert{AlertmanagerAlert: models.AlertmanagerAlert{}},
Alert: models.UnseeAlert{},
IsMatch: false,
},
filterTest{
Expression: "node!=vps1",
IsValid: true,
Alert: models.UnseeAlert{AlertmanagerAlert: models.AlertmanagerAlert{Labels: map[string]string{"node": "vps1"}}},
Alert: models.UnseeAlert{Labels: map[string]string{"node": "vps1"}},
IsMatch: false,
},
filterTest{
Expression: "node!=vps1",
IsValid: true,
Alert: models.UnseeAlert{AlertmanagerAlert: models.AlertmanagerAlert{Labels: map[string]string{"node": "vps2"}}},
Alert: models.UnseeAlert{Labels: map[string]string{"node": "vps2"}},
IsMatch: true,
},
filterTest{
Expression: "node=~vps",
IsValid: true,
Alert: models.UnseeAlert{AlertmanagerAlert: models.AlertmanagerAlert{Labels: map[string]string{"node": "vps1"}}},
Alert: models.UnseeAlert{Labels: map[string]string{"node": "vps1"}},
IsMatch: true,
},
filterTest{
Expression: "node!~vps",
IsValid: true,
Alert: models.UnseeAlert{AlertmanagerAlert: models.AlertmanagerAlert{Labels: map[string]string{"node": "vps1"}}},
Alert: models.UnseeAlert{Labels: map[string]string{"node": "vps1"}},
IsMatch: false,
},
filterTest{
Expression: "node!~abc",
IsValid: true,
Alert: models.UnseeAlert{AlertmanagerAlert: models.AlertmanagerAlert{Labels: map[string]string{"node": "vps1"}}},
Alert: models.UnseeAlert{Labels: map[string]string{"node": "vps1"}},
IsMatch: true,
},
filterTest{
Expression: "abc",
IsValid: true,
Alert: models.UnseeAlert{AlertmanagerAlert: models.AlertmanagerAlert{Labels: map[string]string{"key": "abc"}}},
Alert: models.UnseeAlert{Labels: map[string]string{"key": "abc"}},
IsMatch: true,
},
filterTest{
Expression: "abc",
IsValid: true,
Alert: models.UnseeAlert{AlertmanagerAlert: models.AlertmanagerAlert{Labels: map[string]string{"key": "XXXabcx"}}},
Alert: models.UnseeAlert{Labels: map[string]string{"key": "XXXabcx"}},
IsMatch: true,
},
filterTest{
Expression: "abc",
IsValid: true,
Alert: models.UnseeAlert{AlertmanagerAlert: models.AlertmanagerAlert{Labels: map[string]string{"abc": "xxxab"}}},
Alert: models.UnseeAlert{Labels: map[string]string{"abc": "xxxab"}},
IsMatch: false,
},
filterTest{
Expression: "abc",
IsValid: true,
Alert: models.UnseeAlert{AlertmanagerAlert: models.AlertmanagerAlert{Annotations: map[string]string{"key": "abc"}}},
Alert: models.UnseeAlert{Annotations: map[string]string{"key": "abc"}},
IsMatch: true,
},
filterTest{
Expression: "abc",
IsValid: true,
Alert: models.UnseeAlert{AlertmanagerAlert: models.AlertmanagerAlert{Annotations: map[string]string{"key": "ccc abc"}}},
Alert: models.UnseeAlert{Annotations: map[string]string{"key": "ccc abc"}},
IsMatch: true,
},
filterTest{
Expression: "abc",
IsValid: true,
Alert: models.UnseeAlert{AlertmanagerAlert: models.AlertmanagerAlert{Annotations: map[string]string{"abc": "zzz"}}},
Alert: models.UnseeAlert{Annotations: map[string]string{"abc": "zzz"}},
IsMatch: false,
},
filterTest{
Expression: "abc",
IsValid: true,
Alert: models.UnseeAlert{AlertmanagerAlert: models.AlertmanagerAlert{Silenced: "1"}},
Silence: models.UnseeSilence{AlertmanagerSilence: models.AlertmanagerSilence{ID: "1", Comment: "abc"}},
Alert: models.UnseeAlert{Silenced: "1"},
Silence: models.UnseeSilence{ID: "1", Comment: "abc"},
IsMatch: true,
},
filterTest{
Expression: "abc",
IsValid: true,
Alert: models.UnseeAlert{AlertmanagerAlert: models.AlertmanagerAlert{Silenced: "1"}},
Silence: models.UnseeSilence{AlertmanagerSilence: models.AlertmanagerSilence{ID: "1", Comment: "abcxxx"}},
Alert: models.UnseeAlert{Silenced: "1"},
Silence: models.UnseeSilence{ID: "1", Comment: "abcxxx"},
IsMatch: true,
},
filterTest{
Expression: "abc",
IsValid: true,
Alert: models.UnseeAlert{AlertmanagerAlert: models.AlertmanagerAlert{Silenced: "1"}},
Silence: models.UnseeSilence{AlertmanagerSilence: models.AlertmanagerSilence{ID: "1", Comment: "ABCD"}},
Alert: models.UnseeAlert{Silenced: "1"},
Silence: models.UnseeSilence{ID: "1", Comment: "ABCD"},
IsMatch: true,
},
filterTest{
Expression: "abc",
IsValid: true,
Alert: models.UnseeAlert{AlertmanagerAlert: models.AlertmanagerAlert{Silenced: "1"}},
Silence: models.UnseeSilence{AlertmanagerSilence: models.AlertmanagerSilence{ID: "1", Comment: "xzc"}},
Alert: models.UnseeAlert{Silenced: "1"},
Silence: models.UnseeSilence{ID: "1", Comment: "xzc"},
IsMatch: false,
},
filterTest{
Expression: "abc",
IsValid: true,
Alert: models.UnseeAlert{AlertmanagerAlert: models.AlertmanagerAlert{}},
Alert: models.UnseeAlert{},
IsMatch: false,
},
filterTest{
@@ -366,7 +366,7 @@ func TestLimitFilter(t *testing.T) {
t.Errorf("[%s] GetIsValid() returned %#v while %#v was expected", ft.Expression, f.GetIsValid(), ft.IsValid)
}
if f.GetIsValid() {
alert := models.UnseeAlert{AlertmanagerAlert: models.AlertmanagerAlert{}}
alert := models.UnseeAlert{}
var index int = 0
for _, isMatch := range ft.IsMatch {
m := f.Match(&alert, index)
+6 -8
View File
@@ -76,14 +76,12 @@ func (m AlertMapper) GetAlerts() ([]models.UnseeAlertGroup, error) {
for _, b := range g.Blocks {
for _, a := range b.Alerts {
us := models.UnseeAlert{
AlertmanagerAlert: models.AlertmanagerAlert{
Annotations: a.Annotations,
Labels: a.Labels,
StartsAt: a.StartsAt,
EndsAt: a.EndsAt,
GeneratorURL: a.GeneratorURL,
Inhibited: a.Inhibited,
},
Annotations: a.Annotations,
Labels: a.Labels,
StartsAt: a.StartsAt,
EndsAt: a.EndsAt,
GeneratorURL: a.GeneratorURL,
Inhibited: a.Inhibited,
}
if a.Silenced > 0 {
us.Silenced = string(a.Silenced)
+7 -9
View File
@@ -77,15 +77,13 @@ func (m SilenceMapper) GetSilences() ([]models.UnseeSilence, error) {
for _, s := range resp.Data.Silences {
us := models.UnseeSilence{
AlertmanagerSilence: models.AlertmanagerSilence{
ID: string(s.ID),
Matchers: s.Matchers,
StartsAt: s.StartsAt,
EndsAt: s.EndsAt,
CreatedAt: s.CreatedAt,
CreatedBy: s.CreatedBy,
Comment: s.Comment,
},
ID: string(s.ID),
Matchers: s.Matchers,
StartsAt: s.StartsAt,
EndsAt: s.EndsAt,
CreatedAt: s.CreatedAt,
CreatedBy: s.CreatedBy,
Comment: s.Comment,
}
silences = append(silences, us)
}
+7 -9
View File
@@ -74,15 +74,13 @@ func (m AlertMapper) GetAlerts() ([]models.UnseeAlertGroup, error) {
for _, b := range g.Blocks {
for _, a := range b.Alerts {
us := models.UnseeAlert{
AlertmanagerAlert: models.AlertmanagerAlert{
Annotations: a.Annotations,
Labels: a.Labels,
StartsAt: a.StartsAt,
EndsAt: a.EndsAt,
GeneratorURL: a.GeneratorURL,
Inhibited: a.Inhibited,
Silenced: a.Silenced,
},
Annotations: a.Annotations,
Labels: a.Labels,
StartsAt: a.StartsAt,
EndsAt: a.EndsAt,
GeneratorURL: a.GeneratorURL,
Inhibited: a.Inhibited,
Silenced: a.Silenced,
}
alertList = append(alertList, us)
}
+7 -9
View File
@@ -68,15 +68,13 @@ func (m SilenceMapper) GetSilences() ([]models.UnseeSilence, error) {
for _, s := range resp.Data {
us := models.UnseeSilence{
AlertmanagerSilence: models.AlertmanagerSilence{
ID: s.ID,
Matchers: s.Matchers,
StartsAt: s.StartsAt,
EndsAt: s.EndsAt,
CreatedAt: s.CreatedAt,
CreatedBy: s.CreatedBy,
Comment: s.Comment,
},
ID: s.ID,
Matchers: s.Matchers,
StartsAt: s.StartsAt,
EndsAt: s.EndsAt,
CreatedAt: s.CreatedAt,
CreatedBy: s.CreatedBy,
Comment: s.Comment,
}
silences = append(silences, us)
}
+14 -30
View File
@@ -2,27 +2,11 @@ package models
import "time"
// AlertmanagerAlert is vanilla alert object from Alertmanager
type AlertmanagerAlert struct {
Annotations map[string]string `json:"annotations"`
Labels map[string]string `json:"labels"`
StartsAt time.Time `json:"startsAt"`
EndsAt time.Time `json:"endsAt"`
GeneratorURL string `json:"generatorURL"`
Inhibited bool `json:"inhibited"`
Silenced string `json:"silenced"`
}
// AlertmanagerAlertGroup is vanilla group object from Alertmanager, exposed under api/v1/alerts/groups
type AlertmanagerAlertGroup struct {
Labels map[string]string `json:"labels"`
Blocks []struct {
Alerts []AlertmanagerAlert `json:"alerts"`
} `json:"blocks"`
}
// AlertmanagerSilence is vanilla silence object from Alertmanager, exposed under api/v1/silences
type AlertmanagerSilence struct {
// UnseeSilence is vanilla silence + some additional attributes
// Unsee adds JIRA support, it can extract JIRA IDs from comments
// extracted ID is used to generate link to JIRA issue
// this means Unsee needs to store additional fields for each silence
type UnseeSilence struct {
ID string `json:"id"`
Matchers []struct {
Name string `json:"name"`
@@ -34,14 +18,7 @@ type AlertmanagerSilence struct {
CreatedAt time.Time `json:"createdAt"`
CreatedBy string `json:"createdBy"`
Comment string `json:"comment"`
}
// UnseeSilence is vanilla silence + some additional attributes
// Unsee adds JIRA support, it can extract JIRA IDs from comments
// extracted ID is used to generate link to JIRA issue
// this means Unsee needs to store additional fields for each silence
type UnseeSilence struct {
AlertmanagerSilence
// unsee fields
JiraID string `json:"jiraID"`
JiraURL string `json:"jiraURL"`
}
@@ -53,7 +30,14 @@ type UnseeSilence struct {
// unsee UI used this to show links differently than other annotations
// * Fingerprint, which is a sha1 of the entire alert
type UnseeAlert struct {
AlertmanagerAlert
Annotations map[string]string `json:"annotations"`
Labels map[string]string `json:"labels"`
StartsAt time.Time `json:"startsAt"`
EndsAt time.Time `json:"endsAt"`
GeneratorURL string `json:"generatorURL"`
Inhibited bool `json:"inhibited"`
Silenced string `json:"silenced"`
// unsee fields
Links map[string]string `json:"links"`
Fingerprint string `json:"-"`
}
+9 -27
View File
@@ -21,71 +21,53 @@ var jiraRules = []string{
var jiraTests = []jiraTest{
jiraTest{
silence: models.UnseeSilence{
AlertmanagerSilence: models.AlertmanagerSilence{
Comment: "Lorem ipsum dolor sit amet",
},
Comment: "Lorem ipsum dolor sit amet",
},
},
jiraTest{
silence: models.UnseeSilence{
AlertmanagerSilence: models.AlertmanagerSilence{
Comment: "DVOPS-123",
},
Comment: "DVOPS-123",
},
},
jiraTest{
silence: models.UnseeSilence{
AlertmanagerSilence: models.AlertmanagerSilence{
Comment: "DEVOPS team",
},
Comment: "DEVOPS team",
},
},
jiraTest{
silence: models.UnseeSilence{
AlertmanagerSilence: models.AlertmanagerSilence{
Comment: "a project-1 b",
},
Comment: "a project-1 b",
},
},
jiraTest{
silence: models.UnseeSilence{
AlertmanagerSilence: models.AlertmanagerSilence{
Comment: "a PROJECT- b",
},
Comment: "a PROJECT- b",
},
},
jiraTest{
silence: models.UnseeSilence{
AlertmanagerSilence: models.AlertmanagerSilence{
Comment: "DEVOPS-1",
},
Comment: "DEVOPS-1",
},
jiraID: "DEVOPS-1",
jiraLink: "https://jira.example.com/browse/DEVOPS-1",
},
jiraTest{
silence: models.UnseeSilence{
AlertmanagerSilence: models.AlertmanagerSilence{
Comment: "DEVOPS-123",
},
Comment: "DEVOPS-123",
},
jiraID: "DEVOPS-123",
jiraLink: "https://jira.example.com/browse/DEVOPS-123",
},
jiraTest{
silence: models.UnseeSilence{
AlertmanagerSilence: models.AlertmanagerSilence{
Comment: "a DEVOPS-1 b",
},
Comment: "a DEVOPS-1 b",
},
jiraID: "DEVOPS-1",
jiraLink: "https://jira.example.com/browse/DEVOPS-1",
},
jiraTest{
silence: models.UnseeSilence{
AlertmanagerSilence: models.AlertmanagerSilence{
Comment: "PROJECT-9",
},
Comment: "PROJECT-9",
},
jiraID: "PROJECT-9",
jiraLink: "https://example.com/browse/PROJECT-9",