From c28ce471576710401b22e8b09d14e52e9a094491 Mon Sep 17 00:00:00 2001 From: ismail simsek Date: Fri, 21 Feb 2025 16:26:56 +0100 Subject: [PATCH] Prometheus: Fix setting utcOffset when absolute time range is used (#101065) set utcOffset as 0 when absolute time range is used --- packages/grafana-prometheus/src/datasource.ts | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/packages/grafana-prometheus/src/datasource.ts b/packages/grafana-prometheus/src/datasource.ts index 6c8b1d3ec55..fe1607693b7 100644 --- a/packages/grafana-prometheus/src/datasource.ts +++ b/packages/grafana-prometheus/src/datasource.ts @@ -391,9 +391,16 @@ export class PrometheusDatasource // - Issue that led to the introduction of utcOffsetSec: https://github.com/grafana/grafana/issues/17278 // - Implementation PR: https://github.com/grafana/grafana/pull/17477 let utcOffset = request.range.to.utcOffset(); - if (request.timezone !== 'browser') { + if (request.timezone === 'browser') { + // we need to check if the request is a relative or absolute range. + // if it is absolute time range then utcOffset must be 0. we don't care the offset + // because we are already sending the from and to values in utc. we don't need to adjust them again + // for relative ranges we need utcOffset to adjust query range. + utcOffset = this.isUsingRelativeTimeRange(request.range) ? utcOffset : 0; + } else { utcOffset = tz(request.timezone).utcOffset(); } + const processedTargets: PromQuery[] = []; const processedTarget = { ...target, @@ -995,6 +1002,14 @@ export class PrometheusDatasource }; } + isUsingRelativeTimeRange(range: TimeRange): boolean { + if (typeof range.raw.from !== 'string' || typeof range.raw.to !== 'string') { + return false; + } + + return range.raw.from.includes('now') || range.raw.to.includes('now'); + } + getDebounceTimeInMilliseconds(): number { switch (this.cacheLevel) { case PrometheusCacheLevel.Medium: