Fixes for 0.5.1

This commit is contained in:
Tristan Colgate
2017-03-29 08:18:31 +01:00
parent c633a2fafc
commit b7dd9d088e
12 changed files with 78 additions and 89 deletions

View File

@@ -12,17 +12,12 @@ import (
log "github.com/Sirupsen/logrus"
)
type silencesData struct {
Silences []models.AlertmanagerSilence `json:"silences"`
TotalSilences int `json:"totalSilences"`
}
// SilenceAPIResponse is what Alertmanager API returns
type SilenceAPIResponse struct {
Status string `json:"status"`
Data silencesData `json:"data"`
ErrorType string `json:"errorType"`
Error string `json:"error"`
Status string `json:"status"`
Data []models.AlertmanagerSilence `json:"data"`
ErrorType string `json:"errorType"`
Error string `json:"error"`
}
// Get will return fresh data from Alertmanager API
@@ -44,6 +39,6 @@ func (response *SilenceAPIResponse) Get() error {
return errors.New(response.Error)
}
log.Infof("Got %d silences(s) in %s", len(response.Data.Silences), time.Since(start))
log.Infof("Got %d silences(s) in %s", len(response.Data), time.Since(start))
return nil
}

View File

@@ -3,7 +3,7 @@ package filters
import (
"fmt"
"regexp"
"strconv"
"github.com/cloudflare/unsee/models"
"github.com/cloudflare/unsee/store"
)
@@ -41,8 +41,8 @@ func (filter *fuzzyFilter) Match(alert *models.UnseeAlert, matches int) bool {
}
}
if alert.Silenced > 0 {
if silence, found := store.SilenceStore.Store[strconv.Itoa(alert.Silenced)]; found {
if alert.Silenced != "" {
if silence, found := store.SilenceStore.Store[alert.Silenced]; found {
if filter.Matcher.Compare(silence.Comment, filter.Value) {
filter.Hits++
return true

View File

@@ -2,8 +2,8 @@ package filters
import (
"fmt"
"strconv"
"strings"
"github.com/cloudflare/unsee/models"
"github.com/cloudflare/unsee/store"
)
@@ -15,9 +15,9 @@ type silenceAuthorFilter struct {
func (filter *silenceAuthorFilter) Match(alert *models.UnseeAlert, matches int) bool {
if filter.IsValid {
var isMatch bool
if alert.Silenced > 0 {
if alert.Silenced != "" {
store.StoreLock.RLock()
if silence, found := store.SilenceStore.Store[strconv.Itoa(alert.Silenced)]; found {
if silence, found := store.SilenceStore.Store[alert.Silenced]; found {
isMatch = filter.Matcher.Compare(filter.Value, silence.CreatedBy)
}
store.StoreLock.RUnlock()
@@ -41,9 +41,9 @@ func newSilenceAuthorFilter() FilterT {
func sinceAuthorAutocomplete(name string, operators []string, alerts []models.UnseeAlert) []models.UnseeAutocomplete {
tokens := map[string]models.UnseeAutocomplete{}
for _, alert := range alerts {
if alert.Silenced > 0 {
if alert.Silenced != "" {
store.StoreLock.RLock()
if silence, found := store.SilenceStore.Store[strconv.Itoa(alert.Silenced)]; found && silence.CreatedBy != "" {
if silence, found := store.SilenceStore.Store[alert.Silenced]; found && silence.CreatedBy != "" {
for _, operator := range operators {
token := fmt.Sprintf("%s%s%s", name, operator, silence.CreatedBy)
tokens[token] = makeAC(token, []string{

View File

@@ -2,8 +2,8 @@ package filters
import (
"fmt"
"strconv"
"strings"
"github.com/cloudflare/unsee/models"
"github.com/cloudflare/unsee/store"
)
@@ -15,9 +15,9 @@ type silenceJiraFilter struct {
func (filter *silenceJiraFilter) Match(alert *models.UnseeAlert, matches int) bool {
if filter.IsValid {
var isMatch bool
if alert.Silenced > 0 {
if alert.Silenced != "" {
store.StoreLock.RLock()
if silence, found := store.SilenceStore.Store[strconv.Itoa(alert.Silenced)]; found {
if silence, found := store.SilenceStore.Store[alert.Silenced]; found {
isMatch = filter.Matcher.Compare(silence.JiraID, filter.Value)
}
store.StoreLock.RUnlock()
@@ -41,9 +41,9 @@ func newSilenceJiraFilter() FilterT {
func sinceJiraIDAutocomplete(name string, operators []string, alerts []models.UnseeAlert) []models.UnseeAutocomplete {
tokens := map[string]models.UnseeAutocomplete{}
for _, alert := range alerts {
if alert.Silenced > 0 {
if alert.Silenced != "" {
store.StoreLock.RLock()
if silence, found := store.SilenceStore.Store[strconv.Itoa(alert.Silenced)]; found && silence.JiraID != "" {
if silence, found := store.SilenceStore.Store[alert.Silenced]; found && silence.JiraID != "" {
for _, operator := range operators {
token := fmt.Sprintf("%s%s%s", name, operator, silence.JiraID)
tokens[token] = makeAC(token, []string{

View File

@@ -3,6 +3,7 @@ package filters
import (
"fmt"
"strings"
"github.com/cloudflare/unsee/models"
)
@@ -30,7 +31,7 @@ func (filter *silencedFilter) init(name string, matcher *matcherT, rawText strin
func (filter *silencedFilter) Match(alert *models.UnseeAlert, matches int) bool {
if filter.IsValid {
var isSilenced bool
isSilenced = (alert.Silenced > 0)
isSilenced = (alert.Silenced != "")
isMatch := filter.Matcher.Compare(isSilenced, filter.Value)
if isMatch {
filter.Hits++

View File

@@ -2,12 +2,12 @@ package filters_test
import (
"encoding/json"
"testing"
"time"
"github.com/cloudflare/unsee/filters"
"github.com/cloudflare/unsee/models"
"github.com/cloudflare/unsee/store"
"strconv"
"testing"
"time"
)
type filterTest struct {
@@ -34,13 +34,13 @@ var tests = []filterTest{
filterTest{
Expression: "@silenced=true",
IsValid: true,
Alert: models.UnseeAlert{AlertmanagerAlert: models.AlertmanagerAlert{Silenced: 1}},
Alert: models.UnseeAlert{AlertmanagerAlert: models.AlertmanagerAlert{Silenced: "1"}},
IsMatch: true,
},
filterTest{
Expression: "@silenced!=true",
IsValid: true,
Alert: models.UnseeAlert{AlertmanagerAlert: models.AlertmanagerAlert{Silenced: 1}},
Alert: models.UnseeAlert{AlertmanagerAlert: models.AlertmanagerAlert{Silenced: "1"}},
IsMatch: false,
},
filterTest{
@@ -51,86 +51,86 @@ 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{AlertmanagerAlert: models.AlertmanagerAlert{Silenced: "1"}},
Silence: models.UnseeSilence{AlertmanagerSilence: models.AlertmanagerSilence{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{AlertmanagerAlert: models.AlertmanagerAlert{Silenced: "1"}},
Silence: models.UnseeSilence{AlertmanagerSilence: models.AlertmanagerSilence{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{AlertmanagerAlert: models.AlertmanagerAlert{Silenced: "1"}},
Silence: models.UnseeSilence{AlertmanagerSilence: models.AlertmanagerSilence{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{AlertmanagerAlert: models.AlertmanagerAlert{Silenced: "1"}},
Silence: models.UnseeSilence{AlertmanagerSilence: models.AlertmanagerSilence{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{AlertmanagerAlert: models.AlertmanagerAlert{Silenced: "1"}},
Silence: models.UnseeSilence{AlertmanagerSilence: models.AlertmanagerSilence{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{AlertmanagerAlert: models.AlertmanagerAlert{Silenced: "1"}},
Silence: models.UnseeSilence{AlertmanagerSilence: models.AlertmanagerSilence{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{AlertmanagerAlert: models.AlertmanagerAlert{Silenced: "1"}},
Silence: models.UnseeSilence{AlertmanagerSilence: models.AlertmanagerSilence{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{AlertmanagerAlert: models.AlertmanagerAlert{Silenced: "1"}},
Silence: models.UnseeSilence{AlertmanagerSilence: models.AlertmanagerSilence{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{AlertmanagerAlert: models.AlertmanagerAlert{Silenced: "1"}},
Silence: models.UnseeSilence{AlertmanagerSilence: models.AlertmanagerSilence{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{AlertmanagerAlert: models.AlertmanagerAlert{Silenced: "1"}},
Silence: models.UnseeSilence{AlertmanagerSilence: models.AlertmanagerSilence{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{AlertmanagerAlert: models.AlertmanagerAlert{Silenced: "1"}},
Silence: models.UnseeSilence{AlertmanagerSilence: models.AlertmanagerSilence{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{AlertmanagerAlert: models.AlertmanagerAlert{Silenced: "1"}},
Silence: models.UnseeSilence{AlertmanagerSilence: models.AlertmanagerSilence{ID: "1"}},
IsMatch: true,
},
@@ -241,29 +241,29 @@ var tests = []filterTest{
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{AlertmanagerAlert: models.AlertmanagerAlert{Silenced: "1"}},
Silence: models.UnseeSilence{AlertmanagerSilence: models.AlertmanagerSilence{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{AlertmanagerAlert: models.AlertmanagerAlert{Silenced: "1"}},
Silence: models.UnseeSilence{AlertmanagerSilence: models.AlertmanagerSilence{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{AlertmanagerAlert: models.AlertmanagerAlert{Silenced: "1"}},
Silence: models.UnseeSilence{AlertmanagerSilence: models.AlertmanagerSilence{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{AlertmanagerAlert: models.AlertmanagerAlert{Silenced: "1"}},
Silence: models.UnseeSilence{AlertmanagerSilence: models.AlertmanagerSilence{ID: "1", Comment: "xzc"}},
IsMatch: false,
},
filterTest{
@@ -282,7 +282,7 @@ func TestFilters(t *testing.T) {
for _, ft := range tests {
if &ft.Silence != nil {
store.SilenceStore.Store = map[string]models.UnseeSilence{}
store.SilenceStore.Store[strconv.Itoa(ft.Silence.ID)] = ft.Silence
store.SilenceStore.Store[ft.Silence.ID] = ft.Silence
} else {
store.SilenceStore.Store = map[string]models.UnseeSilence{}
}

View File

@@ -35,7 +35,7 @@
"endsAt": "0001-01-01T00:00:00Z",
"generatorURL": "http://localhost/graph",
"inhibited": false,
"silenced": 1
"silenced": "1"
},
{
"labels": {
@@ -88,7 +88,7 @@
"endsAt": "0001-01-01T00:00:00Z",
"generatorURL": "http://localhost/graph",
"inhibited": false,
"silenced": 1
"silenced": "1"
},
{
"labels": {
@@ -164,7 +164,7 @@
"endsAt": "0001-01-01T00:00:00Z",
"generatorURL": "http://localhost/graph",
"inhibited": false,
"silenced": 2
"silenced": "2"
},
{
"labels": {
@@ -180,7 +180,7 @@
"endsAt": "0001-01-01T00:00:00Z",
"generatorURL": "http://localhost/graph",
"inhibited": false,
"silenced": 2
"silenced": "2"
},
{
"labels": {
@@ -196,7 +196,7 @@
"endsAt": "0001-01-01T00:00:00Z",
"generatorURL": "http://localhost/graph",
"inhibited": false,
"silenced": 2
"silenced": "2"
}
]
}

View File

@@ -1,9 +1,8 @@
{
"status": "success",
"data": {
"silences": [
"data": [
{
"id": 1,
"id": "1",
"matchers": [
{
"name": "instance",
@@ -18,7 +17,7 @@
"comment": "Silenced instance"
},
{
"id": 2,
"id": "2",
"matchers": [
{
"name": "alertname",
@@ -38,6 +37,5 @@
"comment": "Silenced Host_Down alerts in the dev cluster"
}
],
"totalSilences": 2
}
}

View File

@@ -10,7 +10,7 @@ type AlertmanagerAlert struct {
EndsAt time.Time `json:"endsAt"`
GeneratorURL string `json:"generatorURL"`
Inhibited bool `json:"inhibited"`
Silenced int `json:"silenced"`
Silenced string `json:"silenced"`
}
// AlertmanagerAlertGroup is vanilla group object from Alertmanager, exposed under api/v1/alerts/groups
@@ -23,7 +23,7 @@ type AlertmanagerAlertGroup struct {
// AlertmanagerSilence is vanilla silence object from Alertmanager, exposed under api/v1/silences
type AlertmanagerSilence struct {
ID int `json:"id"`
ID string `json:"id"`
Matchers []struct {
Name string `json:"name"`
Value string `json:"value"`

View File

@@ -6,7 +6,6 @@ import (
"io"
"runtime"
"sort"
"strconv"
"time"
"github.com/cloudflare/unsee/alertmanager"
@@ -48,9 +47,9 @@ func PullFromAlertmanager() {
}
silenceStore := make(map[string]models.UnseeSilence)
for _, silence := range silenceResponse.Data.Silences {
for _, silence := range silenceResponse.Data {
jiraID, jiraLink := transform.DetectJIRAs(&silence)
silenceStore[strconv.Itoa(silence.ID)] = models.UnseeSilence{
silenceStore[silence.ID] = models.UnseeSilence{
AlertmanagerSilence: silence,
JiraID: jiraID,
JiraURL: jiraLink,
@@ -116,7 +115,7 @@ func PullFromAlertmanager() {
for _, alert := range alerts {
ag.Alerts = append(ag.Alerts, alert)
if alert.Silenced > 0 {
if alert.Silenced != "" {
counterAlertsSilenced++
} else {
counterAlertsUnsilenced++

View File

@@ -7,7 +7,6 @@ import (
"io"
"net/http"
"sort"
"strconv"
"strings"
"time"
@@ -153,9 +152,9 @@ func alerts(c *gin.Context) {
}
io.WriteString(h, string(aj))
if alert.Silenced > 0 {
if silence, found := store.SilenceStore.Store[strconv.Itoa(alert.Silenced)]; found {
silences[strconv.Itoa(alert.Silenced)] = silence
if alert.Silenced != "" {
if silence, found := store.SilenceStore.Store[alert.Silenced]; found {
silences[alert.Silenced] = silence
}
agCopy.SilencedCount++
countLabel(counters, "@silenced", "true")

View File

@@ -64,10 +64,9 @@ func mockAlerts() {
silences := `{
"status": "success",
"data": {
"silences": [
"data": [
{
"id": 1,
"id": "1",
"matchers": [
{
"name": "alertname",
@@ -81,9 +80,7 @@ func mockAlerts() {
"createdBy": "john@localhost",
"comment": "JIRA-3273"
}
],
"totalSilences": 1100
}
]
}`
httpmock.RegisterResponder("GET", "http://localhost/api/v1/silences?limit=4294967295", httpmock.NewStringResponder(200, silences))
@@ -119,7 +116,7 @@ func mockAlerts() {
"endsAt": "0001-01-01T00:00:00Z",
"generatorURL": "https://localhost/prometheus",
"inhibited": false,
"silenced": 1
"silenced": "1"
}
]
}