UNPKG

kibana-123

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

109 lines (88 loc) 3.36 kB
import _ from 'lodash'; import angular from 'angular'; import moment from 'moment'; import dateMath from '@elastic/datemath'; import 'ui/state_management/global_state'; import 'ui/config'; import EventsProvider from 'ui/events'; import UtilsDiffTimePickerValsProvider from 'ui/utils/diff_time_picker_vals'; import TimefilterLibDiffTimeProvider from 'ui/timefilter/lib/diff_time'; import TimefilterLibDiffIntervalProvider from 'ui/timefilter/lib/diff_interval'; import uiRoutes from 'ui/routes'; import uiModules from 'ui/modules'; uiRoutes .addSetupWork(function (timefilter) { return timefilter.init(); }); uiModules .get('kibana') .service('timefilter', function (Private, globalState, $rootScope, config) { let Events = Private(EventsProvider); let diff = Private(UtilsDiffTimePickerValsProvider); function convertISO8601(stringTime) { let 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); let self = this; let diffTime = Private(TimefilterLibDiffTimeProvider)(self); let diffInterval = Private(TimefilterLibDiffIntervalProvider)(self); self.enabled = false; self.init = _.once(function () { let timeDefaults = config.get('timepicker:timeDefaults'); let refreshIntervalDefaults = config.get('timepicker:refreshIntervalDefaults'); // 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 let newTime = _.defaults({}, globalState.time, timeDefaults); let 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) { let filter; let timefield = indexPattern.timeFieldName && _.find(indexPattern.fields, {name: indexPattern.timeFieldName}); if (timefield) { let 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(); });