From 8b060054d7115e6029e92cb48d24194c50095f9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Mierzwa?= Date: Sun, 1 Jul 2018 19:53:47 +0200 Subject: [PATCH] refactor(api): expect filter query args as an array instead of a single string Using a single string separated by ',' means that we cannot use ',' in labels. Use arrays instead to fix that --- alerts.go | 7 ++----- views.go | 2 +- views_test.go | 6 +++--- 3 files changed, 6 insertions(+), 9 deletions(-) diff --git a/alerts.go b/alerts.go index cb74bdda9..565d4e980 100644 --- a/alerts.go +++ b/alerts.go @@ -1,18 +1,15 @@ package main import ( - "strings" - "github.com/prymitive/unsee/internal/alertmanager" "github.com/prymitive/unsee/internal/filters" "github.com/prymitive/unsee/internal/models" ) -func getFiltersFromQuery(filterString string) ([]filters.FilterT, bool) { +func getFiltersFromQuery(filterStrings []string) ([]filters.FilterT, bool) { validFilters := false matchFilters := []filters.FilterT{} - qList := strings.Split(filterString, ",") - for _, filterExpression := range qList { + for _, filterExpression := range filterStrings { f := filters.NewFilter(filterExpression) if f.GetIsValid() { validFilters = true diff --git a/views.go b/views.go index c7a8fa286..864b1f84c 100644 --- a/views.go +++ b/views.go @@ -63,7 +63,7 @@ func alerts(c *gin.Context) { // get filters apiFilters := []models.Filter{} - matchFilters, validFilters := getFiltersFromQuery(c.Query("q")) + matchFilters, validFilters := getFiltersFromQuery(c.QueryArray("q")) // set pointers for data store objects, need a lock until end of view is reached alerts := map[string]models.AlertGroup{} diff --git a/views_test.go b/views_test.go index f43978e5f..224063ff0 100644 --- a/views_test.go +++ b/views_test.go @@ -45,7 +45,7 @@ func ginTestEngine() *gin.Engine { func TestIndex(t *testing.T) { mockConfig() r := ginTestEngine() - req, _ := http.NewRequest("GET", "/?q=", nil) + req, _ := http.NewRequest("GET", "/", nil) resp := httptest.NewRecorder() r.ServeHTTP(resp, req) if resp.Code != http.StatusOK { @@ -115,7 +115,7 @@ func TestAlerts(t *testing.T) { t.Logf("Testing alerts using mock files from Alertmanager %s", version) mockAlerts(version) r := ginTestEngine() - req, _ := http.NewRequest("GET", "/alerts.json?q=@receiver=by-cluster-service,alertname=HTTP_Probe_Failed,instance=web1", nil) + req, _ := http.NewRequest("GET", "/alerts.json?q=@receiver=by-cluster-service&q=alertname=HTTP_Probe_Failed&q=instance=web1", nil) resp := httptest.NewRecorder() r.ServeHTTP(resp, req) if resp.Code != http.StatusOK { @@ -182,7 +182,7 @@ func TestValidateAllAlerts(t *testing.T) { t.Logf("Validating alerts.json response using mock files from Alertmanager %s", version) mockAlerts(version) r := ginTestEngine() - req, _ := http.NewRequest("GET", "/alerts.json?q=alertname=HTTP_Probe_Failed,instance=web1", nil) + req, _ := http.NewRequest("GET", "/alerts.json?q=alertname=HTTP_Probe_Failed&q=instance=web1", nil) resp := httptest.NewRecorder() r.ServeHTTP(resp, req) if resp.Code != http.StatusOK {