diff --git a/packages/grafana-data/src/datetime/moment_wrapper.ts b/packages/grafana-data/src/datetime/moment_wrapper.ts index efd99cf614a..03910a31128 100644 --- a/packages/grafana-data/src/datetime/moment_wrapper.ts +++ b/packages/grafana-data/src/datetime/moment_wrapper.ts @@ -1,6 +1,6 @@ import { TimeZone } from '../types/time'; /* eslint-disable id-blacklist, no-restricted-imports, @typescript-eslint/ban-types */ -import moment, { Moment, MomentInput, DurationInputArg1 } from 'moment'; +import moment, { Moment, MomentInput, DurationInputArg1, DurationInputArg2 } from 'moment'; export interface DateTimeBuiltinFormat { __momentBuiltinFormatBrand: any; } @@ -17,6 +17,7 @@ export type DurationUnit = | 'M' | 'week' | 'weeks' + | 'isoWeek' | 'w' | 'day' | 'days' @@ -96,7 +97,8 @@ export const toUtc = (input?: DateTimeInput, formatInput?: FormatInput): DateTim }; export const toDuration = (input?: DurationInput, unit?: DurationUnit): DateTimeDuration => { - return moment.duration(input as DurationInputArg1, unit) as DateTimeDuration; + // moment built-in types are a bit flaky, for example `isoWeek` is not in the type definition but it's present in the js source. + return moment.duration(input as DurationInputArg1, unit as DurationInputArg2) as DateTimeDuration; }; export const dateTime = (input?: DateTimeInput, formatInput?: FormatInput): DateTime => { diff --git a/public/app/plugins/datasource/elasticsearch/index_pattern.ts b/public/app/plugins/datasource/elasticsearch/index_pattern.ts index c69bc7e5eb5..386ebd92396 100644 --- a/public/app/plugins/datasource/elasticsearch/index_pattern.ts +++ b/public/app/plugins/datasource/elasticsearch/index_pattern.ts @@ -12,7 +12,7 @@ type IntervalMap = Record< const intervalMap: IntervalMap = { Hourly: { startOf: 'hour', amount: 'hours' }, Daily: { startOf: 'day', amount: 'days' }, - Weekly: { startOf: 'week', amount: 'weeks' }, + Weekly: { startOf: 'isoWeek', amount: 'weeks' }, Monthly: { startOf: 'month', amount: 'months' }, Yearly: { startOf: 'year', amount: 'years' }, }; diff --git a/public/app/plugins/datasource/elasticsearch/specs/index_pattern.test.ts b/public/app/plugins/datasource/elasticsearch/specs/index_pattern.test.ts index dbf4218ee14..76a96794dd3 100644 --- a/public/app/plugins/datasource/elasticsearch/specs/index_pattern.test.ts +++ b/public/app/plugins/datasource/elasticsearch/specs/index_pattern.test.ts @@ -55,6 +55,20 @@ describe('IndexPattern', () => { expect(pattern.getIndexList(from, to)).toEqual(expected); }); }); + + describe('weekly', () => { + it('should return correct index list', () => { + const pattern = new IndexPattern('[asd-]YYYY.WW', 'Weekly'); + // Sunday, February 21, 2021 1:00:00 AM + const from = dateTime(new Date(1613869200000)); + // Friday, March 5, 2021 1:00:00 AM + const to = dateTime(new Date(1614906000000)); + + const expected = ['asd-2021.07', 'asd-2021.08', 'asd-2021.09']; + + expect(pattern.getIndexList(from, to)).toEqual(expected); + }); + }); }); describe('when getting index list from single date', () => {