From 681d3d1a5b8a2a8a24b7974a39343a0504a5c431 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Mierzwa?= Date: Wed, 5 Apr 2017 23:30:32 -0700 Subject: [PATCH] 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 --- filters/filter_test.go | 106 ++++++++++++++++++++--------------------- mapper/v04/alerts.go | 14 +++--- mapper/v04/silences.go | 16 +++---- mapper/v05/alerts.go | 16 +++---- mapper/v05/silences.go | 16 +++---- models/models.go | 44 ++++++----------- transform/jira_test.go | 36 ++++---------- 7 files changed, 103 insertions(+), 145 deletions(-) diff --git a/filters/filter_test.go b/filters/filter_test.go index cf7cb5bea..ce58eb8d3 100644 --- a/filters/filter_test.go +++ b/filters/filter_test.go @@ -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) diff --git a/mapper/v04/alerts.go b/mapper/v04/alerts.go index 39f0d8402..b33ee1fb3 100644 --- a/mapper/v04/alerts.go +++ b/mapper/v04/alerts.go @@ -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) diff --git a/mapper/v04/silences.go b/mapper/v04/silences.go index cebd13571..7397d9435 100644 --- a/mapper/v04/silences.go +++ b/mapper/v04/silences.go @@ -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) } diff --git a/mapper/v05/alerts.go b/mapper/v05/alerts.go index 1865fb540..5059c56f1 100644 --- a/mapper/v05/alerts.go +++ b/mapper/v05/alerts.go @@ -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) } diff --git a/mapper/v05/silences.go b/mapper/v05/silences.go index 572e5f186..d42018cc7 100644 --- a/mapper/v05/silences.go +++ b/mapper/v05/silences.go @@ -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) } diff --git a/models/models.go b/models/models.go index a6e8519fe..949d179ad 100644 --- a/models/models.go +++ b/models/models.go @@ -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:"-"` } diff --git a/transform/jira_test.go b/transform/jira_test.go index c74a54afb..3d0b28519 100644 --- a/transform/jira_test.go +++ b/transform/jira_test.go @@ -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",