diff --git a/packages/services/api/src/modules/operations/providers/operations-reader.ts b/packages/services/api/src/modules/operations/providers/operations-reader.ts index 9d348f1a0..90946e07a 100644 --- a/packages/services/api/src/modules/operations/providers/operations-reader.ts +++ b/packages/services/api/src/modules/operations/providers/operations-reader.ts @@ -133,13 +133,22 @@ export class OperationsReader { minutely: subMinutes(startOfMinute(subHours(now, tableTTLInHours.minutely)), 2), }; - const daysDifference = (period.to.getTime() - period.from.getTime()) / msDay; - if ( - daysDifference > thresholdDataPointPerDay || - /** if we are outside this range, we always need to get daily data */ period.to.getTime() <= tableOldestDateTimePoint.daily.getTime() || period.from.getTime() <= tableOldestDateTimePoint.daily.getTime() + ) { + this.logger.error( + `Requested date range ${formatDate(period.from)} - ${formatDate(period.to)} is too old.`, + ); + throw new Error(`The requested date range is too old for the selected query type.`); + } + + const daysDifference = Math.floor((period.to.getTime() - period.from.getTime()) / msDay); + + if ( + daysDifference >= thresholdDataPointPerDay || + period.to.getTime() <= tableOldestDateTimePoint.hourly.getTime() || + period.from.getTime() <= tableOldestDateTimePoint.hourly.getTime() ) { return { ...queryMap['daily'], @@ -150,10 +159,9 @@ export class OperationsReader { const hoursDifference = (period.to.getTime() - period.from.getTime()) / msHour; if ( - hoursDifference > thresholdDataPointPerHour || - /** if we are outside this range, we always need to get hourly data */ - period.to.getTime() <= tableOldestDateTimePoint.hourly.getTime() || - period.from.getTime() <= tableOldestDateTimePoint.hourly.getTime() + hoursDifference >= thresholdDataPointPerHour && + period.to.getTime() <= tableOldestDateTimePoint.minutely.getTime() && + period.from.getTime() <= tableOldestDateTimePoint.minutely.getTime() ) { return { ...queryMap['hourly'], @@ -161,16 +169,6 @@ export class OperationsReader { }; } - if ( - period.to.getTime() <= tableOldestDateTimePoint.minutely.getTime() || - period.from.getTime() <= tableOldestDateTimePoint.minutely.getTime() - ) { - this.logger.error( - `Requested date range ${formatDate(period.from)} - ${formatDate(period.to)} is too old.`, - ); - throw new Error(`The requested date range is too old for the selected query type.`); - } - return { ...queryMap['minutely'], queryType: 'minutely', diff --git a/packages/web/app/src/lib/hooks/use-date-range-controller.ts b/packages/web/app/src/lib/hooks/use-date-range-controller.ts index eb389d61c..6d6298885 100644 --- a/packages/web/app/src/lib/hooks/use-date-range-controller.ts +++ b/packages/web/app/src/lib/hooks/use-date-range-controller.ts @@ -123,13 +123,20 @@ function resolveRangeAndResolution(range: { from: Date; to: Date }) { minutely: startOfMinute(subHours(now, tableTTLInHours.minutely)), }; + if ( + range.to.getTime() <= tableOldestDateTimePoint.daily.getTime() || + range.from.getTime() <= tableOldestDateTimePoint.daily.getTime() + ) { + throw new Error('This range can never be resolved.'); + } + const daysDifference = (range.to.getTime() - range.from.getTime()) / msDay; if ( daysDifference > thresholdDataPointPerDay || /** if we are outside this range, we always need to get daily data */ - range.to.getTime() <= tableOldestDateTimePoint.daily.getTime() || - range.from.getTime() <= tableOldestDateTimePoint.daily.getTime() + range.to.getTime() <= tableOldestDateTimePoint.hourly.getTime() || + range.from.getTime() <= tableOldestDateTimePoint.hourly.getTime() ) { const resolvedRange = { from: getUTCStartOfDay(range.from), @@ -151,8 +158,8 @@ function resolveRangeAndResolution(range: { from: Date; to: Date }) { if ( hoursDifference > thresholdDataPointPerHour || /** if we are outside this range, we always need to get hourly data */ - range.to.getTime() <= tableOldestDateTimePoint.hourly.getTime() || - range.from.getTime() <= tableOldestDateTimePoint.hourly.getTime() + range.to.getTime() <= tableOldestDateTimePoint.minutely.getTime() || + range.from.getTime() <= tableOldestDateTimePoint.minutely.getTime() ) { const resolvedRange = { from: startOfHour(range.from), @@ -169,13 +176,6 @@ function resolveRangeAndResolution(range: { from: Date; to: Date }) { }; } - if ( - range.to.getTime() <= tableOldestDateTimePoint.minutely.getTime() || - range.from.getTime() <= tableOldestDateTimePoint.minutely.getTime() - ) { - throw new Error('This range can never be resolved.'); - } - const resolvedRange = { from: startOfMinute(range.from), to: subSeconds(startOfMinute(range.to), 1),