From 712fa3e041da6a7ea736c933e3dd23a3ebfe48c2 Mon Sep 17 00:00:00 2001 From: vikrantgupta25 Date: Thu, 31 Jul 2025 19:02:21 +0530 Subject: [PATCH] feat(telemetrymeter): step interval improvements --- pkg/querier/querier.go | 2 +- pkg/querier/signozquerier/provider.go | 6 ++---- pkg/querybuilder/time.go | 17 +++++++++++++++++ 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/pkg/querier/querier.go b/pkg/querier/querier.go index 3f330a07ea83..ead1ac37653d 100644 --- a/pkg/querier/querier.go +++ b/pkg/querier/querier.go @@ -173,7 +173,7 @@ func (q *querier) QueryRange(ctx context.Context, orgID valuer.UUID, req *qbtype event.GroupByApplied = len(spec.GroupBy) > 0 if spec.Signal == telemetrytypes.SignalMeter { - spec.StepInterval = qbtypes.Step{Duration: time.Hour * 24} + spec.StepInterval = qbtypes.Step{Duration: time.Second * time.Duration(querybuilder.RecommendedStepIntervalForMeter(req.Start, req.End))} } else { if spec.StepInterval.Seconds() == 0 { spec.StepInterval = qbtypes.Step{ diff --git a/pkg/querier/signozquerier/provider.go b/pkg/querier/signozquerier/provider.go index 7b528699c4bf..84e2293a3cf7 100644 --- a/pkg/querier/signozquerier/provider.go +++ b/pkg/querier/signozquerier/provider.go @@ -126,13 +126,11 @@ func newProvider( ) // Create meter statement builder - meterFieldMapper := telemetrymetrics.NewFieldMapper() - meterConditionBuilder := telemetrymetrics.NewConditionBuilder(metricFieldMapper) meterStmtBuilder := telemetrymeter.NewMeterQueryStatementBuilder( settings, telemetryMetadataStore, - meterFieldMapper, - meterConditionBuilder, + metricFieldMapper, + metricConditionBuilder, ) // Create bucket cache diff --git a/pkg/querybuilder/time.go b/pkg/querybuilder/time.go index d18d2ac0d91c..5fceeb2c8893 100644 --- a/pkg/querybuilder/time.go +++ b/pkg/querybuilder/time.go @@ -61,6 +61,23 @@ func MinAllowedStepInterval(start, end uint64) uint64 { return step - step%5 } +func RecommendedStepIntervalForMeter(start, end uint64) uint64 { + start = ToNanoSecs(start) + end = ToNanoSecs(end) + + step := (end - start) / RecommendedNumberOfPoints / 1e9 + + // for meter queries the minimum step interval allowed is 1 day as this is our granularity + if step < 86400 { + return 86400 + } + + // return the nearest lower multiple of 86400 ( 1 day ) + recommended := step - step%86400 + + return recommended +} + func RecommendedStepIntervalForMetric(start, end uint64) uint64 { start = ToNanoSecs(start) end = ToNanoSecs(end)