Skip to content

Commit 3937a1d

Browse files
committed
also move usage collector over
1 parent 63737e1 commit 3937a1d

12 files changed

Lines changed: 95 additions & 46 deletions

File tree

src/legacy/core_plugins/kibana/index.js

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@ import { registerTutorials } from './server/tutorials/register';
3333
import * as systemApi from './server/lib/system_api';
3434
import mappings from './mappings.json';
3535
import { getUiSettingDefaults } from './ui_setting_defaults';
36-
import { makeKQLUsageCollector } from './server/lib/kql_usage_collector';
3736
import { registerCspCollector } from './server/lib/csp_usage_collector';
3837
import { injectVars } from './inject_vars';
3938
import { i18n } from '@kbn/i18n';
@@ -332,7 +331,6 @@ export default function (kibana) {
332331
registerSuggestionsApi(server);
333332
registerFieldFormats(server);
334333
registerTutorials(server);
335-
makeKQLUsageCollector(usageCollection, server);
336334
registerCspCollector(usageCollection, server);
337335
server.expose('systemApi', systemApi);
338336
server.injectUiAppVars('kibana', () => injectVars(server));

src/legacy/core_plugins/kibana/ui_setting_defaults.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import moment from 'moment-timezone';
2121
import numeralLanguages from '@elastic/numeral/languages';
2222
import { i18n } from '@kbn/i18n';
23+
import { DEFAULT_QUERY_LANGUAGE } from '../../../plugins/data/common';
2324

2425
export function getUiSettingDefaults() {
2526
const weekdays = moment.weekdays().slice();
@@ -114,7 +115,7 @@ export function getUiSettingDefaults() {
114115
},
115116
'search:queryLanguage': {
116117
name: queryLanguageSettingName,
117-
value: 'kuery',
118+
value: DEFAULT_QUERY_LANGUAGE,
118119
description: i18n.translate('kbn.advancedSettings.searchQueryLanguageText', {
119120
defaultMessage:
120121
'Query language used by the query bar. KQL is a new language built specifically for Kibana.',
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
/*
2+
* Licensed to Elasticsearch B.V. under one or more contributor
3+
* license agreements. See the NOTICE file distributed with
4+
* this work for additional information regarding copyright
5+
* ownership. Elasticsearch B.V. licenses this file to you under
6+
* the Apache License, Version 2.0 (the "License"); you may
7+
* not use this file except in compliance with the License.
8+
* You may obtain a copy of the License at
9+
*
10+
* http://www.apache.org/licenses/LICENSE-2.0
11+
*
12+
* Unless required by applicable law or agreed to in writing,
13+
* software distributed under the License is distributed on an
14+
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15+
* KIND, either express or implied. See the License for the
16+
* specific language governing permissions and limitations
17+
* under the License.
18+
*/
19+
20+
export const DEFAULT_QUERY_LANGUAGE = 'kuery';

src/plugins/data/common/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,3 +24,4 @@ export * from './index_patterns';
2424
export * from './es_query';
2525
export * from './utils';
2626
export * from './types';
27+
export * from './constants';

src/plugins/data/kibana.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,6 @@
33
"version": "kibana",
44
"server": true,
55
"ui": true,
6-
"requiredPlugins": ["uiActions"]
6+
"requiredPlugins": ["uiActions"],
7+
"optionalPlugins": ["usageCollection"]
78
}

src/plugins/data/server/kql_telemetry/kql_telemetry_service.ts

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,18 +17,31 @@
1717
* under the License.
1818
*/
1919

20+
import { first } from 'rxjs/operators';
2021
import { CoreSetup, Plugin, PluginInitializerContext } from 'kibana/server';
2122
import { registerKqlTelemetryRoute } from './route';
23+
import { UsageCollectionSetup } from '../../../usage_collection/server';
24+
import { makeKQLUsageCollector } from './usage_collector';
2225

2326
export class KqlTelemetryService implements Plugin<void> {
2427
constructor(private initializerContext: PluginInitializerContext) {}
2528

26-
public setup({ http, savedObjects }: CoreSetup) {
29+
public async setup(
30+
{ http, savedObjects }: CoreSetup,
31+
{ usageCollection }: { usageCollection?: UsageCollectionSetup }
32+
) {
2733
registerKqlTelemetryRoute(
2834
http.createRouter(),
2935
savedObjects,
3036
this.initializerContext.logger.get('data', 'kql-telemetry')
3137
);
38+
39+
if (usageCollection) {
40+
const config = await this.initializerContext.config.legacy.globalConfig$
41+
.pipe(first())
42+
.toPromise();
43+
makeKQLUsageCollector(usageCollection, config.kibana.index);
44+
}
3245
}
3346

3447
public start() {}

src/legacy/core_plugins/kibana/server/lib/kql_usage_collector/fetch.test.js renamed to src/plugins/data/server/kql_telemetry/usage_collector/fetch.test.ts

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -17,18 +17,22 @@
1717
* under the License.
1818
*/
1919

20-
jest.mock('../../../ui_setting_defaults', () => ({
21-
getUiSettingDefaults: () => ({ 'search:queryLanguage': { value: 'lucene' } }),
22-
}));
23-
2420
import { fetchProvider } from './fetch';
21+
import { APICaller } from 'kibana/server';
22+
23+
jest.mock('../../../common', () => ({
24+
DEFAULT_QUERY_LANGUAGE: 'lucene',
25+
}));
2526

26-
let fetch;
27-
let callCluster;
27+
let fetch: ReturnType<typeof fetchProvider>;
28+
let callCluster: APICaller;
2829

29-
function setupMockCallCluster(optCount, language) {
30-
callCluster = jest.fn((method, params) => {
31-
if ('id' in params && params.id === 'kql-telemetry:kql-telemetry') {
30+
function setupMockCallCluster(
31+
optCount: { optInCount?: number; optOutCount?: number } | null,
32+
language: string | undefined | null
33+
) {
34+
callCluster = (jest.fn((method, params) => {
35+
if (params && 'id' in params && params.id === 'kql-telemetry:kql-telemetry') {
3236
if (optCount === null) {
3337
return Promise.resolve({
3438
_index: '.kibana_1',
@@ -46,9 +50,9 @@ function setupMockCallCluster(optCount, language) {
4650
},
4751
});
4852
}
49-
} else if ('body' in params && params.body.query.term.type === 'config') {
53+
} else if (params && 'body' in params && params.body.query.term.type === 'config') {
5054
if (language === 'missingConfigDoc') {
51-
Promise.resolve({
55+
return Promise.resolve({
5256
hits: {
5357
hits: [],
5458
},
@@ -69,7 +73,9 @@ function setupMockCallCluster(optCount, language) {
6973
});
7074
}
7175
}
72-
});
76+
77+
throw new Error('invalid call');
78+
}) as unknown) as APICaller;
7379
}
7480

7581
describe('makeKQLUsageCollector', () => {

src/legacy/core_plugins/kibana/server/lib/kql_usage_collector/fetch.js renamed to src/plugins/data/server/kql_telemetry/usage_collector/fetch.ts

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,14 @@
1717
* under the License.
1818
*/
1919

20-
import { getUiSettingDefaults } from '../../../ui_setting_defaults';
2120
import { get } from 'lodash';
21+
import { APICaller } from 'kibana/server';
22+
import { DEFAULT_QUERY_LANGUAGE } from '../../../common';
2223

23-
const uiSettingDefaults = getUiSettingDefaults();
24-
const defaultSearchQueryLanguageSetting = uiSettingDefaults['search:queryLanguage'].value;
24+
const defaultSearchQueryLanguageSetting = DEFAULT_QUERY_LANGUAGE;
2525

26-
export function fetchProvider(index) {
27-
return async callCluster => {
26+
export function fetchProvider(index: string) {
27+
return async (callCluster: APICaller) => {
2828
const [response, config] = await Promise.all([
2929
callCluster('get', {
3030
index,
@@ -38,7 +38,10 @@ export function fetchProvider(index) {
3838
}),
3939
]);
4040

41-
const queryLanguageConfigValue = get(config, 'hits.hits[0]._source.config.search:queryLanguage');
41+
const queryLanguageConfigValue = get(
42+
config,
43+
'hits.hits[0]._source.config.search:queryLanguage'
44+
);
4245

4346
// search:queryLanguage can potentially be in four states in the .kibana index:
4447
// 1. undefined: this means the user has never touched this setting

src/legacy/core_plugins/kibana/server/lib/kql_usage_collector/index.js renamed to src/plugins/data/server/kql_telemetry/usage_collector/index.ts

File renamed without changes.

src/legacy/core_plugins/kibana/server/lib/kql_usage_collector/make_kql_usage_collector.test.js renamed to src/plugins/data/server/kql_telemetry/usage_collector/make_kql_usage_collector.test.ts

Lines changed: 11 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -18,33 +18,26 @@
1818
*/
1919

2020
import { makeKQLUsageCollector } from './make_kql_usage_collector';
21+
import { UsageCollectionSetup } from '../../../../usage_collection/server';
2122

2223
describe('makeKQLUsageCollector', () => {
23-
let server;
24-
let makeUsageCollectorStub;
25-
let registerStub;
26-
let usageCollection;
24+
let usageCollectionMock: jest.Mocked<UsageCollectionSetup>;
2725

2826
beforeEach(() => {
29-
makeUsageCollectorStub = jest.fn();
30-
registerStub = jest.fn();
31-
usageCollection = {
32-
makeUsageCollector: makeUsageCollectorStub,
33-
registerCollector: registerStub,
34-
};
35-
server = {
36-
config: () => ({ get: () => '.kibana' })
37-
};
27+
usageCollectionMock = ({
28+
makeUsageCollector: jest.fn(),
29+
registerCollector: jest.fn(),
30+
} as unknown) as jest.Mocked<UsageCollectionSetup>;
3831
});
3932

4033
it('should call registerCollector', () => {
41-
makeKQLUsageCollector(usageCollection, server);
42-
expect(registerStub).toHaveBeenCalledTimes(1);
34+
makeKQLUsageCollector(usageCollectionMock, '.kibana');
35+
expect(usageCollectionMock.registerCollector).toHaveBeenCalledTimes(1);
4336
});
4437

4538
it('should call makeUsageCollector with type = kql', () => {
46-
makeKQLUsageCollector(usageCollection, server);
47-
expect(makeUsageCollectorStub).toHaveBeenCalledTimes(1);
48-
expect(makeUsageCollectorStub.mock.calls[0][0].type).toBe('kql');
39+
makeKQLUsageCollector(usageCollectionMock, '.kibana');
40+
expect(usageCollectionMock.makeUsageCollector).toHaveBeenCalledTimes(1);
41+
expect(usageCollectionMock.makeUsageCollector.mock.calls[0][0].type).toBe('kql');
4942
});
5043
});

0 commit comments

Comments
 (0)