Skip to content

Commit 4040d4e

Browse files
authored
Merge branch 'master' into indicator-match
2 parents a93d599 + cb55898 commit 4040d4e

49 files changed

Lines changed: 7793 additions & 374 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

docs/developer/plugin/migrating-legacy-plugins-examples.asciidoc

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1143,6 +1143,77 @@ router.get(
11431143
);
11441144
----
11451145

1146+
==== Accessing the client from a collector's `fetch` method
1147+
1148+
At the moment, the `fetch` method's context receives preconfigured
1149+
<<scoped-services, scoped clients>> for Elasticsearch and SavedObjects.
1150+
To help in the transition, both, the legacy (`callCluster`) and new clients are provided,
1151+
but we strongly discourage using the deprecated legacy ones for any new implementation.
1152+
1153+
[source,typescript]
1154+
----
1155+
usageCollection.makeUsageCollector<MyUsage>({
1156+
type: 'my-collector',
1157+
isReady: async () => true, // Logic to confirm the `fetch` method is ready to be called
1158+
schema: {...},
1159+
async fetch(context) {
1160+
const { callCluster, esClient, soClient } = context;
1161+
1162+
// Before:
1163+
const result = callCluster('search', options)
1164+
1165+
// After:
1166+
const { body: result } = esClient.search(options);
1167+
1168+
return result;
1169+
}
1170+
});
1171+
----
1172+
1173+
Regarding the `soClient`, it is encouraged to use it instead of the plugin's owned SavedObject's repository
1174+
as we used to do in the past.
1175+
1176+
Before:
1177+
1178+
[source,typescript]
1179+
----
1180+
function getUsageCollector(
1181+
usageCollection: UsageCollectionSetup,
1182+
getSavedObjectsRepository: () => ISavedObjectsRepository | undefined
1183+
) {
1184+
usageCollection.makeUsageCollector<MyUsage>({
1185+
type: 'my-collector',
1186+
isReady: () => typeof getSavedObjectsRepository() !== 'undefined',
1187+
schema: {...},
1188+
async fetch() {
1189+
const savedObjectsRepository = getSavedObjectsRepository();
1190+
1191+
const { attributes: result } = await savedObjectsRepository.get('my-so-type', 'my-so-id');
1192+
1193+
return result;
1194+
}
1195+
});
1196+
}
1197+
----
1198+
1199+
After:
1200+
1201+
[source,typescript]
1202+
----
1203+
function getUsageCollector(usageCollection: UsageCollectionSetup) {
1204+
usageCollection.makeUsageCollector<MyUsage>({
1205+
type: 'my-collector',
1206+
isReady: () => true,
1207+
schema: {...},
1208+
async fetch({ soClient }) {
1209+
const { attributes: result } = await soClient.get('my-so-type', 'my-so-id');
1210+
1211+
return result;
1212+
}
1213+
});
1214+
}
1215+
----
1216+
11461217
==== Creating a custom client
11471218

11481219
Note that the `plugins` option is no longer available on the new

src/plugins/kibana_usage_collection/server/collectors/application_usage/telemetry_application_usage_collector.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ describe('telemetry_application_usage', () => {
4040

4141
const logger = loggingSystemMock.createLogger();
4242

43-
let collector: Collector<unknown, unknown>;
43+
let collector: Collector<unknown>;
4444

4545
const usageCollectionMock = createUsageCollectionSetupMock();
4646
usageCollectionMock.makeUsageCollector.mockImplementation((config) => {

src/plugins/kibana_usage_collection/server/collectors/core/core_usage_collector.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ export function getCoreUsageCollector(
2424
usageCollection: UsageCollectionSetup,
2525
getCoreUsageDataService: () => CoreUsageDataStart
2626
) {
27-
return usageCollection.makeUsageCollector<CoreUsageData, { core: CoreUsageData }>({
27+
return usageCollection.makeUsageCollector<CoreUsageData>({
2828
type: 'core',
2929
isReady: () => typeof getCoreUsageDataService() !== 'undefined',
3030
schema: {

src/plugins/kibana_usage_collection/server/collectors/core/index.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ import { CoreUsageData } from 'src/core/server/';
2929
const logger = loggingSystemMock.createLogger();
3030

3131
describe('telemetry_core', () => {
32-
let collector: Collector<unknown, unknown>;
32+
let collector: Collector<unknown>;
3333

3434
const usageCollectionMock = createUsageCollectionSetupMock();
3535
usageCollectionMock.makeUsageCollector.mockImplementation((config) => {

src/plugins/kibana_usage_collection/server/collectors/kibana/index.test.ts

Lines changed: 1 addition & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ import { registerKibanaUsageCollector } from './';
3131
const logger = loggingSystemMock.createLogger();
3232

3333
describe('telemetry_kibana', () => {
34-
let collector: Collector<unknown, unknown>;
34+
let collector: Collector<unknown>;
3535

3636
const usageCollectionMock = createUsageCollectionSetupMock();
3737
usageCollectionMock.makeUsageCollector.mockImplementation((config) => {
@@ -66,23 +66,4 @@ describe('telemetry_kibana', () => {
6666
timelion_sheet: { total: 0 },
6767
});
6868
});
69-
70-
test('formatForBulkUpload', async () => {
71-
const resultFromFetch = {
72-
index: '.kibana-tests',
73-
dashboard: { total: 0 },
74-
visualization: { total: 0 },
75-
search: { total: 0 },
76-
index_pattern: { total: 0 },
77-
graph_workspace: { total: 0 },
78-
timelion_sheet: { total: 0 },
79-
};
80-
81-
expect(collector.formatForBulkUpload!(resultFromFetch)).toStrictEqual({
82-
type: 'kibana_stats',
83-
payload: {
84-
usage: resultFromFetch,
85-
},
86-
});
87-
});
8869
});

src/plugins/kibana_usage_collection/server/collectors/kibana/kibana_usage_collector.ts

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ import { Observable } from 'rxjs';
2121
import { take } from 'rxjs/operators';
2222
import { SharedGlobalConfig } from 'kibana/server';
2323
import { UsageCollectionSetup } from 'src/plugins/usage_collection/server';
24-
import { KIBANA_STATS_TYPE } from '../../../common/constants';
2524
import { getSavedObjectsCounts, KibanaSavedObjectCounts } from './get_saved_object_counts';
2625

2726
interface KibanaUsage extends KibanaSavedObjectCounts {
@@ -32,7 +31,7 @@ export function getKibanaUsageCollector(
3231
usageCollection: UsageCollectionSetup,
3332
legacyConfig$: Observable<SharedGlobalConfig>
3433
) {
35-
return usageCollection.makeUsageCollector<KibanaUsage, { usage: KibanaUsage }>({
34+
return usageCollection.makeUsageCollector<KibanaUsage>({
3635
type: 'kibana',
3736
isReady: () => true,
3837
schema: {
@@ -53,20 +52,6 @@ export function getKibanaUsageCollector(
5352
...(await getSavedObjectsCounts(callCluster, index)),
5453
};
5554
},
56-
57-
/*
58-
* Format the response data into a model for internal upload
59-
* 1. Make this data part of the "kibana_stats" type
60-
* 2. Organize the payload in the usage namespace of the data payload (usage.index, etc)
61-
*/
62-
formatForBulkUpload: (result) => {
63-
return {
64-
type: KIBANA_STATS_TYPE,
65-
payload: {
66-
usage: result,
67-
},
68-
};
69-
},
7055
});
7156
}
7257

src/plugins/kibana_usage_collection/server/collectors/management/index.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ import { registerManagementUsageCollector } from './';
2929
const logger = loggingSystemMock.createLogger();
3030

3131
describe('telemetry_application_usage_collector', () => {
32-
let collector: Collector<unknown, unknown>;
32+
let collector: Collector<unknown>;
3333

3434
const usageCollectionMock = createUsageCollectionSetupMock();
3535
usageCollectionMock.makeUsageCollector.mockImplementation((config) => {

src/plugins/kibana_usage_collection/server/collectors/ops_stats/index.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ import { loggingSystemMock } from '../../../../../core/server/mocks';
3131
const logger = loggingSystemMock.createLogger();
3232

3333
describe('telemetry_ops_stats', () => {
34-
let collector: Collector<unknown, unknown>;
34+
let collector: Collector<unknown>;
3535

3636
const usageCollectionMock = createUsageCollectionSetupMock();
3737
usageCollectionMock.makeStatsCollector.mockImplementation((config) => {

src/plugins/kibana_usage_collection/server/collectors/ui_metric/index.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ import { registerUiMetricUsageCollector } from './';
2929
const logger = loggingSystemMock.createLogger();
3030

3131
describe('telemetry_ui_metric', () => {
32-
let collector: Collector<unknown, unknown>;
32+
let collector: Collector<unknown>;
3333

3434
const usageCollectionMock = createUsageCollectionSetupMock();
3535
usageCollectionMock.makeUsageCollector.mockImplementation((config) => {

src/plugins/usage_collection/server/collector/collector.test.ts

Lines changed: 0 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919

2020
import { loggingSystemMock } from '../../../../core/server/mocks';
2121
import { Collector } from './collector';
22-
import { UsageCollector } from './usage_collector';
2322

2423
const logger = loggingSystemMock.createLogger();
2524

@@ -88,49 +87,6 @@ describe('collector', () => {
8887
});
8988
});
9089

91-
describe('formatForBulkUpload', () => {
92-
it('should use the default formatter', () => {
93-
const fetchOutput = { testPass: 100 };
94-
const collector = new Collector(logger, {
95-
type: 'my_test_collector',
96-
isReady: () => false,
97-
fetch: () => fetchOutput,
98-
});
99-
expect(collector.formatForBulkUpload(fetchOutput)).toStrictEqual({
100-
type: 'my_test_collector',
101-
payload: fetchOutput,
102-
});
103-
});
104-
105-
it('should use a custom formatter', () => {
106-
const fetchOutput = { testPass: 100 };
107-
const collector = new Collector(logger, {
108-
type: 'my_test_collector',
109-
isReady: () => false,
110-
fetch: () => fetchOutput,
111-
formatForBulkUpload: (a) => ({ type: 'other_value', payload: { nested: a } }),
112-
});
113-
expect(collector.formatForBulkUpload(fetchOutput)).toStrictEqual({
114-
type: 'other_value',
115-
payload: { nested: fetchOutput },
116-
});
117-
});
118-
119-
it("should use UsageCollector's default formatter", () => {
120-
const fetchOutput = { testPass: 100 };
121-
const collector = new UsageCollector(logger, {
122-
type: 'my_test_collector',
123-
isReady: () => false,
124-
fetch: () => fetchOutput,
125-
schema: { testPass: { type: 'long' } },
126-
});
127-
expect(collector.formatForBulkUpload(fetchOutput)).toStrictEqual({
128-
type: 'kibana_stats',
129-
payload: { usage: { my_test_collector: fetchOutput } },
130-
});
131-
});
132-
});
133-
13490
describe('schema TS validations', () => {
13591
// These tests below are used to ensure types inference is working as expected.
13692
// We don't intend to test any logic as such, just the relation between the types in `fetch` and `schema`.

0 commit comments

Comments
 (0)