Skip to content

Commit

Permalink
fix: check alert rule queries are all disabled if at least one query …
Browse files Browse the repository at this point in the history
…is set (#5966)
  • Loading branch information
kobecal authored Sep 24, 2024
1 parent b49ed91 commit 0feab5a
Show file tree
Hide file tree
Showing 2 changed files with 131 additions and 1 deletion.
46 changes: 45 additions & 1 deletion pkg/query-service/rules/api_params.go
Original file line number Diff line number Diff line change
Expand Up @@ -170,18 +170,62 @@ func isValidLabelValue(v string) bool {
return utf8.ValidString(v)
}

func isAllQueriesDisabled(compositeQuery *v3.CompositeQuery) bool {
if compositeQuery == nil {
return false
}
if compositeQuery.BuilderQueries == nil && compositeQuery.PromQueries == nil && compositeQuery.ClickHouseQueries == nil {
return false
}
switch compositeQuery.QueryType {
case v3.QueryTypeBuilder:
if len(compositeQuery.BuilderQueries) == 0 {
return false
}
for _, query := range compositeQuery.BuilderQueries {
if !query.Disabled {
return false
}
}
case v3.QueryTypePromQL:
if len(compositeQuery.PromQueries) == 0 {
return false
}
for _, query := range compositeQuery.PromQueries {
if !query.Disabled {
return false
}
}
case v3.QueryTypeClickHouseSQL:
if len(compositeQuery.ClickHouseQueries) == 0 {
return false
}
for _, query := range compositeQuery.ClickHouseQueries {
if !query.Disabled {
return false
}
}
}
return true
}

func (r *PostableRule) Validate() error {

var errs []error

if r.RuleCondition == nil {
errs = append(errs, errors.Errorf("rule condition is required"))
// will get panic if we try to access CompositeQuery, so return here
return errors.Errorf("rule condition is required")
} else {
if r.RuleCondition.CompositeQuery == nil {
errs = append(errs, errors.Errorf("composite metric query is required"))
}
}

if isAllQueriesDisabled(r.RuleCondition.CompositeQuery) {
errs = append(errs, errors.Errorf("all queries are disabled in rule condition"))
}

if r.RuleType == RuleTypeThreshold {
if r.RuleCondition.Target == nil {
errs = append(errs, errors.Errorf("rule condition missing the threshold"))
Expand Down
86 changes: 86 additions & 0 deletions pkg/query-service/rules/api_params_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
package rules

import (
"testing"

v3 "go.signoz.io/signoz/pkg/query-service/model/v3"
)

func TestIsAllQueriesDisabled(t *testing.T) {
testCases := []*v3.CompositeQuery{
&v3.CompositeQuery{
BuilderQueries: map[string]*v3.BuilderQuery{
"query1": {
Disabled: true,
},
"query2": {
Disabled: true,
},
},
QueryType: v3.QueryTypeBuilder,
},
nil,
&v3.CompositeQuery{
QueryType: v3.QueryTypeBuilder,
},
&v3.CompositeQuery{
QueryType: v3.QueryTypeBuilder,
BuilderQueries: map[string]*v3.BuilderQuery{
"query1": {
Disabled: true,
},
"query2": {
Disabled: false,
},
},
},
&v3.CompositeQuery{
QueryType: v3.QueryTypePromQL,
},
&v3.CompositeQuery{
QueryType: v3.QueryTypePromQL,
PromQueries: map[string]*v3.PromQuery{
"query3": {
Disabled: false,
},
},
},
&v3.CompositeQuery{
QueryType: v3.QueryTypePromQL,
PromQueries: map[string]*v3.PromQuery{
"query3": {
Disabled: true,
},
},
},
&v3.CompositeQuery{
QueryType: v3.QueryTypeClickHouseSQL,
},
&v3.CompositeQuery{
QueryType: v3.QueryTypeClickHouseSQL,
ClickHouseQueries: map[string]*v3.ClickHouseQuery{
"query4": {
Disabled: false,
},
},
},
&v3.CompositeQuery{
QueryType: v3.QueryTypeClickHouseSQL,
ClickHouseQueries: map[string]*v3.ClickHouseQuery{
"query4": {
Disabled: true,
},
},
},
}

expectedResult := []bool{true, false, false, false, false, false, true, false, false, true}

for index, compositeQuery := range testCases {
expected := expectedResult[index]
actual := isAllQueriesDisabled(compositeQuery)
if actual != expected {
t.Errorf("Expected %v, but got %v", expected, actual)
}
}
}

0 comments on commit 0feab5a

Please sign in to comment.