The open and composable observability and data visualization platform. Visualize metrics, logs, and traces from multiple sources like Prometheus, Loki, Elasticsearch, InfluxDB, Postgres and many more.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
grafana/public/app/plugins/datasource/elasticsearch/IndexPattern.ts

65 lines
1.8 KiB

import { toUtc, dateTime, DateTime, DurationUnit } from '@grafana/data';
import { Interval } from './types';
type IntervalMap = Record<
Interval,
{
startOf: DurationUnit;
amount: DurationUnit;
}
>;
export const intervalMap: IntervalMap = {
Hourly: { startOf: 'hour', amount: 'hours' },
Daily: { startOf: 'day', amount: 'days' },
Weekly: { startOf: 'isoWeek', amount: 'weeks' },
Monthly: { startOf: 'month', amount: 'months' },
Yearly: { startOf: 'year', amount: 'years' },
};
export class IndexPattern {
private dateLocale = 'en';
constructor(
private pattern: string,
private interval?: keyof typeof intervalMap
) {}
getIndexForToday() {
if (this.interval) {
return toUtc().locale(this.dateLocale).format(this.pattern);
} else {
return this.pattern;
}
}
getIndexList(from?: DateTime, to?: DateTime) {
// When no `from` or `to` is provided, we request data from 7 subsequent/previous indices
// for the provided index pattern.
// This is useful when requesting log context where the only time data we have is the log
// timestamp.
// TODO: Remove when enableBackendMigration toggle is removed
const indexOffset = 7;
if (!this.interval) {
return this.pattern;
}
const intervalInfo = intervalMap[this.interval];
const start = dateTime(from || dateTime(to).add(-indexOffset, intervalInfo.amount))
.utc()
.startOf(intervalInfo.startOf);
const endEpoch = dateTime(to || dateTime(from).add(indexOffset, intervalInfo.amount))
.utc()
.startOf(intervalInfo.startOf)
.valueOf();
const indexList = [];
while (start.valueOf() <= endEpoch) {
indexList.push(start.locale(this.dateLocale).format(this.pattern));
start.add(1, intervalInfo.amount);
}
return indexList;
}
}