diff --git a/pkg/services/ngalert/api/api_prometheus.go b/pkg/services/ngalert/api/api_prometheus.go index 22d09a91668..364a7027253 100644 --- a/pkg/services/ngalert/api/api_prometheus.go +++ b/pkg/services/ngalert/api/api_prometheus.go @@ -334,6 +334,11 @@ func PrepareRuleGroupStatuses(log log.Logger, manager state.AlertInstanceManager maxGroups := getInt64WithDefault(opts.Query, "group_limit", -1) nextToken := opts.Query.Get("group_next_token") + if nextToken != "" { + if _, err := base64.URLEncoding.DecodeString(nextToken); err != nil { + nextToken = "" + } + } groupedRules := getGroupedRules(log, ruleList, ruleNamesSet, opts.Namespaces) rulesTotals := make(map[string]int64, len(groupedRules)) diff --git a/pkg/services/ngalert/api/api_prometheus_test.go b/pkg/services/ngalert/api/api_prometheus_test.go index 120755d2252..8ac41c3606e 100644 --- a/pkg/services/ngalert/api/api_prometheus_test.go +++ b/pkg/services/ngalert/api/api_prometheus_test.go @@ -790,8 +790,8 @@ func TestRouteGetRuleStatuses(t *testing.T) { } }) - t.Run("bad token should return no results", func(t *testing.T) { - r, err := http.NewRequest("GET", "/api/v1/rules?group_limit=10&group_next_token=foobar", nil) + t.Run("bad token should return first group_limit results", func(t *testing.T) { + r, err := http.NewRequest("GET", "/api/v1/rules?group_limit=1&group_next_token=foobar", nil) require.NoError(t, err) c.Context = &web.Context{Req: r} @@ -801,7 +801,14 @@ func TestRouteGetRuleStatuses(t *testing.T) { result := &apimodels.RuleResponse{} require.NoError(t, json.Unmarshal(resp.Body(), result)) - require.Len(t, result.Data.RuleGroups, 0) + require.Len(t, result.Data.RuleGroups, 1) + require.Len(t, result.Data.Totals, 0) + require.NotEmpty(t, result.Data.NextToken) + + folder, err := api.store.GetNamespaceByUID(context.Background(), "namespace_0", orgID, user) + require.NoError(t, err) + require.Equal(t, folder.Fullpath, result.Data.RuleGroups[0].File) + require.Equal(t, "rule_group_0", result.Data.RuleGroups[0].Name) }) t.Run("should return nothing when using group_limit=0", func(t *testing.T) {