Commit 9acb9990 by Domas Committed by GitHub

Elasticsearch: Fixes localized dates in index pattern (#27351)

Fixes #8403
parent 5402157c
...@@ -79,6 +79,10 @@ export const setLocale = (language: string) => { ...@@ -79,6 +79,10 @@ export const setLocale = (language: string) => {
moment.locale(language); moment.locale(language);
}; };
export const getLocale = () => {
return moment.locale();
};
export const getLocaleData = (): DateTimeLocale => { export const getLocaleData = (): DateTimeLocale => {
return moment.localeData(); return moment.localeData();
}; };
......
...@@ -9,11 +9,15 @@ const intervalMap: any = { ...@@ -9,11 +9,15 @@ const intervalMap: any = {
}; };
export class IndexPattern { export class IndexPattern {
private dateLocale = 'en';
constructor(private pattern: any, private interval?: string) {} constructor(private pattern: any, private interval?: string) {}
getIndexForToday() { getIndexForToday() {
if (this.interval) { if (this.interval) {
return toUtc().format(this.pattern); return toUtc()
.locale(this.dateLocale)
.format(this.pattern);
} else { } else {
return this.pattern; return this.pattern;
} }
...@@ -35,7 +39,7 @@ export class IndexPattern { ...@@ -35,7 +39,7 @@ export class IndexPattern {
const indexList = []; const indexList = [];
while (start.valueOf() <= endEpoch) { while (start.valueOf() <= endEpoch) {
indexList.push(start.format(this.pattern)); indexList.push(start.locale(this.dateLocale).format(this.pattern));
start.add(1, intervalInfo.amount); start.add(1, intervalInfo.amount);
} }
......
///<amd-dependency path="test/specs/helpers" name="helpers" /> ///<amd-dependency path="test/specs/helpers" name="helpers" />
import { IndexPattern } from '../index_pattern'; import { IndexPattern } from '../index_pattern';
import { toUtc } from '@grafana/data'; import { toUtc, getLocale, setLocale } from '@grafana/data';
describe('IndexPattern', () => { describe('IndexPattern', () => {
const originalLocale = getLocale();
afterEach(() => setLocale(originalLocale));
describe('when getting index for today', () => { describe('when getting index for today', () => {
test('should return correct index name', () => { test('should return correct index name', () => {
const pattern = new IndexPattern('[asd-]YYYY.MM.DD', 'Daily'); const pattern = new IndexPattern('[asd-]YYYY.MM.DD', 'Daily');
...@@ -11,6 +14,17 @@ describe('IndexPattern', () => { ...@@ -11,6 +14,17 @@ describe('IndexPattern', () => {
expect(pattern.getIndexForToday()).toBe(expected); expect(pattern.getIndexForToday()).toBe(expected);
}); });
test('should format date using western arabic numerals regardless of locale', () => {
setLocale('ar_SA'); // saudi-arabic, formatting for YYYY.MM.DD looks like "٢٠٢٠.٠٩.٠٣"
const pattern = new IndexPattern('[asd-]YYYY.MM.DD', 'Daily');
const expected =
'asd-' +
toUtc()
.locale('en')
.format('YYYY.MM.DD');
expect(pattern.getIndexForToday()).toBe(expected);
});
}); });
describe('when getting index list for time range', () => { describe('when getting index list for time range', () => {
...@@ -33,6 +47,17 @@ describe('IndexPattern', () => { ...@@ -33,6 +47,17 @@ describe('IndexPattern', () => {
expect(pattern.getIndexList(from, to)).toEqual(expected); expect(pattern.getIndexList(from, to)).toEqual(expected);
}); });
test('should format date using western arabic numerals regardless of locale', () => {
setLocale('ar_SA'); // saudi-arabic, formatting for YYYY.MM.DD looks like "٢٠٢٠.٠٩.٠٣"
const pattern = new IndexPattern('[asd-]YYYY.MM.DD', 'Daily');
const from = new Date(1432940523000);
const to = new Date(1433153106000);
const expected = ['asd-2015.05.29', 'asd-2015.05.30', 'asd-2015.05.31', 'asd-2015.06.01'];
expect(pattern.getIndexList(from, to)).toEqual(expected);
});
}); });
}); });
}); });
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment