@spalger/kibana
Version:
Kibana is an open source (Apache Licensed), browser based analytics and search dashboard for Elasticsearch. Kibana is a snap to setup and start using. Kibana strives to be easy to get started with, while also being flexible and powerful, just like Elastic
83 lines (72 loc) • 2.31 kB
JavaScript
define(function (require) {
return function IndexNameIntervalsService(timefilter) {
var _ = require('lodash');
var moment = require('moment');
var IndexedArray = require('ui/IndexedArray');
var intervals = new IndexedArray({
index: ['name'],
initialSet: [
{
name: 'hours',
startOf: 'hour',
display: 'Hourly'
},
{
name: 'days',
startOf: 'day',
display: 'Daily'
},
{
name: 'weeks',
startOf: 'isoWeek',
display: 'Weekly'
},
{
name: 'months',
startOf: 'month',
display: 'Monthly'
},
{
name: 'years',
startOf: 'year',
display: 'Yearly'
}
]
});
intervals.toIndexList = function (format, interval, a, b) {
var bounds;
// setup the range that the list will span, return two moment objects that
// are in proper order. a and b can be numbers to specify to go before or after now (respectively)
// a certain number of times, based on the interval
var range = [[a, 'min', 'startOf'], [b, 'max', 'startOf']].map(function (v) {
var val = v[0];
var bound = v[1];
var extend = v[2];
// grab a bound from the time filter
if (val == null) {
bounds = bounds || timefilter.getBounds();
val = bounds[bound];
}
if (_.isNumeric(val)) val = moment().add(val, interval.name);
else if (!moment.isMoment(val)) val = moment(val);
return val.clone().utc()[extend](interval.startOf);
}).sort(function (a, b) {
return a - b;
});
if (typeof interval === 'string') {
interval = _.find(intervals, { name: interval });
if (!interval) throw new Error('Interval must be one of ' + _.pluck(intervals, 'name'));
}
var indexList = [];
var start = range.shift();
// turn stop into milliseconds to that it's not constantly converted by the while condition
var stop = range.shift().valueOf();
while (start <= stop) {
indexList.push(start.format(format));
start.add(1, interval.name);
}
return indexList;
};
return intervals;
};
});