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
This commit is contained in:
Łukasz Mierzwa
2018-07-01 19:53:47 +02:00
parent 4fe19c3d73
commit 8b060054d7
3 changed files with 6 additions and 9 deletions

View File

@@ -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

View File

@@ -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{}

View File

@@ -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 {