@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
105 lines (82 loc) • 3.14 kB
JavaScript
define(function (require) {
require('ui/modules')
.get('kibana')
.service('timefilter', function (Private, globalState, $rootScope, config) {
var _ = require('lodash');
var angular = require('angular');
var moment = require('moment');
var dateMath = require('ui/utils/dateMath');
var Events = Private(require('ui/events'));
var diff = Private(require('ui/utils/diff_time_picker_vals'));
require('ui/state_management/global_state');
function convertISO8601(stringTime) {
var obj = moment(stringTime, 'YYYY-MM-DDTHH:mm:ss.SSSZ', true);
return obj.isValid() ? obj : stringTime;
}
_.class(Timefilter).inherits(Events);
function Timefilter() {
Timefilter.Super.call(this);
var self = this;
var diffTime = Private(require('ui/timefilter/lib/diff_time'))(self);
var diffInterval = Private(require('ui/timefilter/lib/diff_interval'))(self);
self.enabled = false;
var timeDefaults = config.get('timepicker:timeDefaults');
var refreshIntervalDefaults = {
display: 'Off',
pause: false,
section: 0,
value: 0
};
// These can be date math strings or moments.
self.time = _.defaults(globalState.time || {}, timeDefaults);
self.refreshInterval = _.defaults(globalState.refreshInterval || {}, refreshIntervalDefaults);
globalState.on('fetch_with_changes', function () {
// clone and default to {} in one
var newTime = _.defaults({}, globalState.time, timeDefaults);
var newRefreshInterval = _.defaults({}, globalState.refreshInterval, refreshIntervalDefaults);
if (newTime) {
if (newTime.to) newTime.to = convertISO8601(newTime.to);
if (newTime.from) newTime.from = convertISO8601(newTime.from);
}
self.time = newTime;
self.refreshInterval = newRefreshInterval;
});
$rootScope.$$timefilter = self;
$rootScope.$watchMulti([
'$$timefilter.time',
'$$timefilter.time.from',
'$$timefilter.time.to',
'$$timefilter.time.mode'
], diffTime);
$rootScope.$watchMulti([
'$$timefilter.refreshInterval',
'$$timefilter.refreshInterval.pause',
'$$timefilter.refreshInterval.value'
], diffInterval);
}
Timefilter.prototype.get = function (indexPattern) {
var filter;
var timefield = indexPattern.timeFieldName && _.find(indexPattern.fields, {name: indexPattern.timeFieldName});
if (timefield) {
var bounds = this.getBounds();
filter = {range : {}};
filter.range[timefield.name] = {
gte: bounds.min.valueOf(),
lte: bounds.max.valueOf(),
format: 'epoch_millis'
};
}
return filter;
};
Timefilter.prototype.getBounds = function (timefield) {
return {
min: dateMath.parse(this.time.from),
max: dateMath.parse(this.time.to, true)
};
};
Timefilter.prototype.getActiveBounds = function () {
if (this.enabled) return this.getBounds();
};
return new Timefilter();
});
});