Scopes: Merge scopes filters with OR condition in case they overlap. (#97276)

Signed-off-by: bergquist <carl.bergquist@gmail.com>
This commit is contained in:
Carl Bergquist
2024-12-02 19:16:49 +01:00
committed by GitHub
parent feeb2c6ce0
commit acf67d5911
2 changed files with 45 additions and 2 deletions
+24 -1
View File
@@ -106,6 +106,29 @@ func TestApplyQueryFiltersAndGroupBy_Filters(t *testing.T) {
expected: `{__name__="http_requests_total",namespace="istio"}`,
expectErr: false,
},
{
name: "merge scopes filters into using OR if they share filter key",
query: `http_requests_total{}`,
scopeFilters: []ScopeFilter{
{Key: "namespace", Value: "default", Operator: FilterOperatorEquals},
{Key: "namespace", Value: "kube-system", Operator: FilterOperatorEquals},
},
expected: `http_requests_total{namespace=~"default|kube-system"}`,
expectErr: false,
},
{
name: "adhoc filters win over scope filters if they share filter key",
query: `http_requests_total{}`,
scopeFilters: []ScopeFilter{
{Key: "namespace", Value: "default", Operator: FilterOperatorEquals},
{Key: "namespace", Value: "kube-system", Operator: FilterOperatorEquals},
},
adhocFilters: []ScopeFilter{
{Key: "namespace", Value: "adhoc-wins", Operator: FilterOperatorEquals},
},
expected: `http_requests_total{namespace="adhoc-wins"}`,
expectErr: false,
},
}
for _, tt := range tests {
@@ -116,7 +139,7 @@ func TestApplyQueryFiltersAndGroupBy_Filters(t *testing.T) {
require.Error(t, err)
} else {
require.NoError(t, err)
require.Equal(t, tt.expected, expr)
require.Equal(t, tt.expected, expr, tt.name)
}
})
}