chore: populate default zero queries for metrics (#9103)

This commit is contained in:
Srikanth Chekuri 2025-09-17 12:35:38 +05:30 committed by GitHub
parent ff8ac96d37
commit 1c257f3e14
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 99 additions and 6 deletions

View File

@ -6,6 +6,7 @@ import (
"github.com/SigNoz/govaluate"
"github.com/SigNoz/signoz/pkg/errors"
"github.com/SigNoz/signoz/pkg/types/metrictypes"
"github.com/SigNoz/signoz/pkg/types/telemetrytypes"
"github.com/SigNoz/signoz/pkg/valuer"
)
@ -423,13 +424,25 @@ func (r *QueryRangeRequest) GetQueriesSupportingZeroDefault() map[string]bool {
canDefaultZero := make(map[string]bool)
for _, q := range r.CompositeQuery.Queries {
if q.Type == QueryTypeBuilder {
if query, ok := q.Spec.(QueryBuilderQuery[TraceAggregation]); ok {
if len(query.Aggregations) == 1 && canDefaultZeroAgg(query.Aggregations[0].Expression) {
canDefaultZero[query.Name] = true
switch spec := q.Spec.(type) {
case QueryBuilderQuery[TraceAggregation]:
if len(spec.Aggregations) == 1 && canDefaultZeroAgg(spec.Aggregations[0].Expression) {
canDefaultZero[spec.Name] = true
}
} else if query, ok := q.Spec.(QueryBuilderQuery[LogAggregation]); ok {
if len(query.Aggregations) == 1 && canDefaultZeroAgg(query.Aggregations[0].Expression) {
canDefaultZero[query.Name] = true
case QueryBuilderQuery[LogAggregation]:
if len(spec.Aggregations) == 1 && canDefaultZeroAgg(spec.Aggregations[0].Expression) {
canDefaultZero[spec.Name] = true
}
case QueryBuilderQuery[MetricAggregation]:
if len(spec.Aggregations) == 1 {
timeAgg := spec.Aggregations[0].TimeAggregation
if timeAgg == metrictypes.TimeAggregationCount ||
timeAgg == metrictypes.TimeAggregationCountDistinct ||
timeAgg == metrictypes.TimeAggregationRate ||
timeAgg == metrictypes.TimeAggregationIncrease {
canDefaultZero[spec.Name] = true
}
}
}
}

View File

@ -1683,6 +1683,86 @@ func TestQueryRangeRequest_GetQueriesSupportingZeroDefault(t *testing.T) {
"A": true,
},
},
{
name: "test metrics",
CompositeQuery: CompositeQuery{
Queries: []QueryEnvelope{
{
Type: QueryTypeBuilder,
Spec: QueryBuilderQuery[MetricAggregation]{
Name: "A",
Signal: telemetrytypes.SignalTraces,
Filter: &Filter{
Expression: "service.name = demo",
},
Aggregations: []MetricAggregation{
{
MetricName: "calls",
TimeAggregation: metrictypes.TimeAggregationRate,
SpaceAggregation: metrictypes.SpaceAggregationSum,
},
},
},
},
{
Type: QueryTypeBuilder,
Spec: QueryBuilderQuery[MetricAggregation]{
Name: "B",
Signal: telemetrytypes.SignalTraces,
Filter: &Filter{
Expression: "service.name = demo",
},
Aggregations: []MetricAggregation{
{
MetricName: "memory.usage",
TimeAggregation: metrictypes.TimeAggregationAvg,
SpaceAggregation: metrictypes.SpaceAggregationSum,
},
},
},
},
{
Type: QueryTypeBuilder,
Spec: QueryBuilderQuery[MetricAggregation]{
Name: "C",
Signal: telemetrytypes.SignalTraces,
Filter: &Filter{
Expression: "service.name = demo",
},
Aggregations: []MetricAggregation{
{
MetricName: "calls",
TimeAggregation: metrictypes.TimeAggregationIncrease,
SpaceAggregation: metrictypes.SpaceAggregationSum,
},
},
},
},
{
Type: QueryTypeBuilder,
Spec: QueryBuilderQuery[MetricAggregation]{
Name: "D",
Signal: telemetrytypes.SignalTraces,
Filter: &Filter{
Expression: "service.name = demo",
},
Aggregations: []MetricAggregation{
{
MetricName: "calls",
TimeAggregation: metrictypes.TimeAggregationCount,
SpaceAggregation: metrictypes.SpaceAggregationSum,
},
},
},
},
},
},
want: map[string]bool{
"A": true,
"C": true,
"D": true,
},
},
{
name: "test min on logs - doesn't support zeroDefault",
CompositeQuery: CompositeQuery{