Skip to content

Commit

Permalink
Move timefilter and timehistory instantiation ⇒ data plugin (#44783) (#…
Browse files Browse the repository at this point in the history
…46467)

* Create timefilter service

* Pass timehistory as a dependency to query bar

* Updated timefilter tests and mocks

* Fix jest test

* Fixed bad import path

* updated xpack test

* make history optional on query bar

* Fixed chart_utils test

* Fixed page.test by mocking timefilter

* Fixed explorer_charts_container_service test by mocking timefilter

* Fixed explorer_chart_distribution test by mocking timefilter

* Fixed explorer_chart_single_metric test by mocking timefilter

* Fixed explorer_charts_container test by mocking timefilter and removing some unneeded initialization

* Fixed explorer_swimlane tesy by mocking timefilter

* Added missing functions to uiTimefilterMock to fix top_nav test

* Fixed timeseries_chart test by mocking timefilter

* remove bad merge

* mock field formats

* mock field formats

* rename timefilter boolean getters

* fix ml mocks

* ml mocks
  • Loading branch information
Liza Katz committed Sep 24, 2019
1 parent eb925e4 commit 086e886
Show file tree
Hide file tree
Showing 45 changed files with 490 additions and 383 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -35,18 +35,13 @@ import { getFiltersArray } from './test_helpers/get_filters_array';
import { coreMock } from '../../../../../../core/public/mocks';
const setupMock = coreMock.createSetup();

import { timefilterServiceMock } from '../../timefilter/timefilter_service.mock';
const timefilterSetupMock = timefilterServiceMock.createSetupContract();

setupMock.uiSettings.get.mockImplementation((key: string) => {
return true;
});

jest.mock('ui/timefilter', () => {
return {
timefilter: {
setTime: jest.fn(),
},
};
});

describe('filter_manager', () => {
let appStateStub: StubState;
let globalStateStub: StubState;
Expand All @@ -66,7 +61,8 @@ describe('filter_manager', () => {
indexPatterns = new StubIndexPatterns();
filterManager = new FilterManager(
(indexPatterns as unknown) as IndexPatterns,
setupMock.uiSettings
setupMock.uiSettings,
timefilterSetupMock.timefilter
);
readyFilters = getFiltersArray();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,27 +29,30 @@ import { compareFilters } from './lib/compare_filters';
import { mapAndFlattenFilters } from './lib/map_and_flatten_filters';
// @ts-ignore
import { uniqFilters } from './lib/uniq_filters';
// @ts-ignore

import { extractTimeFilter } from './lib/extract_time_filter';
// @ts-ignore
import { changeTimeFilter } from './lib/change_time_filter';

import { onlyDisabledFiltersChanged } from './lib/only_disabled';

import { PartitionedFilters } from './partitioned_filters';

import { IndexPatterns } from '../../index_patterns';
import { TimefilterContract } from '../../timefilter';

export class FilterManager {
private indexPatterns: IndexPatterns;
private filters: Filter[] = [];
private updated$: Subject<void> = new Subject();
private fetch$: Subject<void> = new Subject();
private uiSettings: UiSettingsClientContract;
private timefilter: TimefilterContract;

constructor(indexPatterns: IndexPatterns, uiSettings: UiSettingsClientContract) {
constructor(
indexPatterns: IndexPatterns,
uiSettings: UiSettingsClientContract,
timefilter: TimefilterContract
) {
this.indexPatterns = indexPatterns;
this.uiSettings = uiSettings;
this.timefilter = timefilter;
}

private mergeIncomingFilters(partitionedFilters: PartitionedFilters): Filter[] {
Expand Down Expand Up @@ -191,7 +194,7 @@ export class FilterManager {

public async addFiltersAndChangeTimeFilter(filters: Filter[]) {
const timeFilter = await extractTimeFilter(this.indexPatterns, filters);
if (timeFilter) changeTimeFilter(timeFilter);
if (timeFilter) changeTimeFilter(this.timefilter, timeFilter);
return this.addFilters(filters.filter(filter => filter !== timeFilter));
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,18 +31,13 @@ import { StubIndexPatterns } from './test_helpers/stub_index_pattern';
import { coreMock } from '../../../../../../core/public/mocks';
const setupMock = coreMock.createSetup();

import { timefilterServiceMock } from '../../timefilter/timefilter_service.mock';
const timefilterSetupMock = timefilterServiceMock.createSetupContract();

setupMock.uiSettings.get.mockImplementation((key: string) => {
return true;
});

jest.mock('ui/timefilter', () => {
return {
timefilter: {
setTime: jest.fn(),
},
};
});

describe('filter_state_manager', () => {
let appStateStub: StubState;
let globalStateStub: StubState;
Expand All @@ -55,7 +50,8 @@ describe('filter_state_manager', () => {
const indexPatterns = new StubIndexPatterns();
filterManager = new FilterManager(
(indexPatterns as unknown) as IndexPatterns,
setupMock.uiSettings
setupMock.uiSettings,
timefilterSetupMock.timefilter
);
});

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,50 +16,42 @@
* specific language governing permissions and limitations
* under the License.
*/

import './change_time_filter.test.mocks';

jest.mock('ui/chrome',
() => ({
getBasePath: () => `/some/base/path`,
getUiSettingsClient: () => {
return {
get: (key) => {
switch(key) {
case 'timepicker:timeDefaults':
return { from: 'now-15m', to: 'now' };
case 'timepicker:refreshIntervalDefaults':
return { pause: false, value: 0 };
default:
throw new Error(`Unexpected config key: ${key}`);
}
}
};
},
}), { virtual: true });

import expect from '@kbn/expect';
import { changeTimeFilter } from '../change_time_filter';
import { timefilter } from 'ui/timefilter';
import { TimeRange } from 'src/plugins/data/public';

import { timefilterServiceMock } from '../../../../timefilter/timefilter_service.mock';
const timefilterMock = timefilterServiceMock.createSetupContract();
const timefilter = timefilterMock.timefilter;

describe('changeTimeFilter()', function () {
let _time: TimeRange | undefined;
timefilter.setTime.mockImplementation((time: any) => {
_time = {
from: time.from.toISOString(),
to: time.to.toISOString(),
};
});
timefilter.getTime.mockImplementation(() => {
return _time!;
});

describe('changeTimeFilter()', function() {
const gt = 1388559600000;
const lt = 1388646000000;

test('should change the timefilter to match the range gt/lt', function () {
test('should change the timefilter to match the range gt/lt', function() {
const filter = { range: { '@timestamp': { gt, lt } } };
changeTimeFilter(filter);
changeTimeFilter(timefilter, filter);
const { to, from } = timefilter.getTime();
expect(to).to.be(new Date(lt).toISOString());
expect(from).to.be(new Date(gt).toISOString());
});

test('should change the timefilter to match the range gte/lte', function () {
test('should change the timefilter to match the range gte/lte', function() {
const filter = { range: { '@timestamp': { gte: gt, lte: lt } } };
changeTimeFilter(filter);
changeTimeFilter(timefilter, filter);
const { to, from } = timefilter.getTime();
expect(to).to.be(new Date(lt).toISOString());
expect(from).to.be(new Date(gt).toISOString());
});

});
Original file line number Diff line number Diff line change
Expand Up @@ -19,14 +19,13 @@

import moment from 'moment';
import _ from 'lodash';
import { timefilter } from 'ui/timefilter';
import { TimefilterContract } from '../../../timefilter';

export function changeTimeFilter(filter) {
export function changeTimeFilter(timefilter: TimefilterContract, filter: any) {
const key = _.keys(filter.range)[0];
const values = filter.range[key];
timefilter.setTime({
from: moment(values.gt || values.gte),
to: moment(values.lt || values.lte),
mode: 'absolute',
});
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,16 +18,17 @@
*/

import _ from 'lodash';
import { IndexPatterns } from '../../../index_patterns';

export async function extractTimeFilter(indexPatterns, filters) {
export async function extractTimeFilter(indexPatterns: IndexPatterns, filters: any) {
// Assume all the index patterns are the same since they will be added
// from the same visualization.
const id = _.get(filters, '[0].meta.index');
const id: string = _.get(filters, '[0].meta.index');
if (id == null) return;

const indexPattern = await indexPatterns.get(id);

const filter = _.find(filters, function (obj) {
const filter = _.find(filters, function(obj: any) {
const key = _.keys(obj.range)[0];
return key === indexPattern.timeFieldName;
});
Expand Down
6 changes: 4 additions & 2 deletions src/legacy/core_plugins/data/public/filter/filter_service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
import { UiSettingsClientContract } from 'src/core/public';
import { IndexPatterns } from '../index_patterns';
import { FilterManager } from './filter_manager';
import { TimefilterContract } from '../timefilter';

/**
* Filter Service
Expand All @@ -29,12 +30,13 @@ import { FilterManager } from './filter_manager';
export interface FilterServiceDependencies {
indexPatterns: IndexPatterns;
uiSettings: UiSettingsClientContract;
timefilter: TimefilterContract;
}

export class FilterService {
public setup({ indexPatterns, uiSettings }: FilterServiceDependencies) {
public setup({ indexPatterns, uiSettings, timefilter }: FilterServiceDependencies) {
return {
filterManager: new FilterManager(indexPatterns, uiSettings),
filterManager: new FilterManager(indexPatterns, uiSettings, timefilter),
};
}

Expand Down
2 changes: 2 additions & 0 deletions src/legacy/core_plugins/data/public/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -65,3 +65,5 @@ export {
mockFields,
mockIndexPattern,
} from './index_patterns';

export { TimeHistoryContract, TimefilterContract, getTime, InputTimeRange } from './timefilter';
7 changes: 3 additions & 4 deletions src/legacy/core_plugins/data/public/mocks.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,19 +17,18 @@
* under the License.
*/

import { DataSetup } from '.';
import { filterServiceMock } from './filter/filter_service.mock';
import { indexPatternsServiceMock } from './index_patterns/index_patterns_service.mock';
import { queryServiceMock } from './query/query_service.mock';
import { timefilterServiceMock } from './timefilter/timefilter_service.mock';

function createDataSetupMock() {
const mock: MockedKeys<Partial<DataSetup>> = {
return {
filter: filterServiceMock.createSetupContract(),
indexPatterns: indexPatternsServiceMock.createSetupContract(),
query: queryServiceMock.createSetupContract(),
timefilter: timefilterServiceMock.createSetupContract(),
};

return mock;
}

function createDataStartMock() {
Expand Down
9 changes: 9 additions & 0 deletions src/legacy/core_plugins/data/public/plugin.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import { CoreSetup, CoreStart, Plugin } from '../../../../core/public';
import { SearchService, SearchSetup } from './search';
import { QueryService, QuerySetup } from './query';
import { FilterService, FilterSetup } from './filter';
import { TimefilterService, TimefilterSetup } from './timefilter';
import { IndexPatternsService, IndexPatternsSetup } from './index_patterns';
import { LegacyDependenciesPluginSetup } from './shim/legacy_dependencies_plugin';

Expand All @@ -43,6 +44,7 @@ export interface DataSetup {
filter: FilterSetup;
query: QuerySetup;
search: SearchSetup;
timefilter: TimefilterSetup;
}

/**
Expand All @@ -62,6 +64,7 @@ export class DataPlugin implements Plugin<DataSetup, {}, DataPluginSetupDependen
private readonly indexPatterns: IndexPatternsService = new IndexPatternsService();
private readonly query: QueryService = new QueryService();
private readonly search: SearchService = new SearchService();
private readonly timefilter: TimefilterService = new TimefilterService();

private setupApi!: DataSetup;

Expand All @@ -75,14 +78,19 @@ export class DataPlugin implements Plugin<DataSetup, {}, DataPluginSetupDependen
http,
});

const timefilterService = this.timefilter.setup({
uiSettings,
});
this.setupApi = {
indexPatterns: indexPatternsService,
filter: this.filter.setup({
uiSettings,
indexPatterns: indexPatternsService.indexPatterns,
timefilter: timefilterService.timefilter,
}),
query: this.query.setup(),
search: this.search.setup(savedObjectsClient),
timefilter: timefilterService,
};

return this.setupApi;
Expand All @@ -99,5 +107,6 @@ export class DataPlugin implements Plugin<DataSetup, {}, DataPluginSetupDependen
this.filter.stop();
this.query.stop();
this.search.stop();
this.timefilter.stop();
}
}
Loading

0 comments on commit 086e886

Please sign in to comment.