Skip to content

Commit fca8cef

Browse files
committed
- rename apm-telemetry save object mapping -> apm-services-telemetry
- move saved object types and document IDs to constants file - Updated APM Indices endpoints to use the SavedObjectsClient from the legacy request context, and set the apm-indices schema object to be namspace-agnostic.
1 parent cf435b8 commit fca8cef

File tree

19 files changed

+190
-147
lines changed

19 files changed

+190
-147
lines changed
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
/*
2+
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
3+
* or more contributor license agreements. Licensed under the Elastic License;
4+
* you may not use this file except in compliance with the Elastic License.
5+
*/
6+
7+
// APM Services telemetry
8+
export const APM_SERVICES_TELEMETRY_SAVED_OBJECT_TYPE =
9+
'apm-services-telemetry';
10+
export const APM_SERVICES_TELEMETRY_SAVED_OBJECT_ID = 'apm-services-telemetry';
11+
12+
// APM indices
13+
export const APM_INDICES_SAVED_OBJECT_TYPE = 'apm-indices';
14+
export const APM_INDICES_SAVED_OBJECT_ID = 'apm-indices';

x-pack/legacy/plugins/apm/index.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,10 @@ export const apm: LegacyPluginInitializer = kibana => {
4545
},
4646
hacks: ['plugins/apm/hacks/toggle_app_link_in_nav'],
4747
savedObjectSchemas: {
48-
'apm-telemetry': {
48+
'apm-services-telemetry': {
49+
isNamespaceAgnostic: true
50+
},
51+
'apm-indices': {
4952
isNamespaceAgnostic: true
5053
}
5154
},

x-pack/legacy/plugins/apm/mappings.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"apm-telemetry": {
2+
"apm-services-telemetry": {
33
"properties": {
44
"has_any_services": {
55
"type": "boolean"
Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@
55
*/
66

77
import { SavedObjectAttributes } from 'src/core/server';
8+
import { createApmTelementry, storeApmServicesTelemetry } from '../index';
89
import {
9-
APM_TELEMETRY_DOC_ID,
10-
createApmTelementry,
11-
storeApmTelemetry
12-
} from '../apm_telemetry';
10+
APM_SERVICES_TELEMETRY_SAVED_OBJECT_TYPE,
11+
APM_SERVICES_TELEMETRY_SAVED_OBJECT_ID
12+
} from '../../../../common/apm_saved_object_constants';
1313

1414
describe('apm_telemetry', () => {
1515
describe('createApmTelementry', () => {
@@ -44,7 +44,7 @@ describe('apm_telemetry', () => {
4444
});
4545
});
4646

47-
describe('storeApmTelemetry', () => {
47+
describe('storeApmServicesTelemetry', () => {
4848
let server: any;
4949
let apmTelemetry: SavedObjectAttributes;
5050
let savedObjectsClientInstance: any;
@@ -75,24 +75,24 @@ describe('apm_telemetry', () => {
7575
});
7676

7777
it('should call savedObjectsClient create with the given ApmTelemetry object', () => {
78-
storeApmTelemetry(server, apmTelemetry);
78+
storeApmServicesTelemetry(server, apmTelemetry);
7979
expect(savedObjectsClientInstance.create.mock.calls[0][1]).toBe(
8080
apmTelemetry
8181
);
8282
});
8383

8484
it('should call savedObjectsClient create with the apm-telemetry document type and ID', () => {
85-
storeApmTelemetry(server, apmTelemetry);
85+
storeApmServicesTelemetry(server, apmTelemetry);
8686
expect(savedObjectsClientInstance.create.mock.calls[0][0]).toBe(
87-
'apm-telemetry'
87+
APM_SERVICES_TELEMETRY_SAVED_OBJECT_TYPE
8888
);
8989
expect(savedObjectsClientInstance.create.mock.calls[0][2].id).toBe(
90-
APM_TELEMETRY_DOC_ID
90+
APM_SERVICES_TELEMETRY_SAVED_OBJECT_ID
9191
);
9292
});
9393

9494
it('should call savedObjectsClient create with overwrite: true', () => {
95-
storeApmTelemetry(server, apmTelemetry);
95+
storeApmServicesTelemetry(server, apmTelemetry);
9696
expect(savedObjectsClientInstance.create.mock.calls[0][2].overwrite).toBe(
9797
true
9898
);

x-pack/legacy/plugins/apm/server/lib/apm_telemetry/apm_telemetry.ts

Lines changed: 0 additions & 39 deletions
This file was deleted.

x-pack/legacy/plugins/apm/server/lib/apm_telemetry/index.ts

Lines changed: 74 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,77 @@
44
* you may not use this file except in compliance with the Elastic License.
55
*/
66

7-
export {
8-
storeApmTelemetry,
9-
createApmTelementry,
10-
APM_TELEMETRY_DOC_ID
11-
} from './apm_telemetry';
12-
export { makeApmUsageCollector } from './make_apm_usage_collector';
7+
import { Server } from 'hapi';
8+
import { countBy } from 'lodash';
9+
import { SavedObjectAttributes } from 'src/core/server';
10+
import { CoreSetup } from 'src/core/server';
11+
import { isAgentName } from '../../../common/agent_name';
12+
import { getInternalSavedObjectsClient } from '../helpers/saved_objects_client';
13+
import {
14+
APM_SERVICES_TELEMETRY_SAVED_OBJECT_TYPE,
15+
APM_SERVICES_TELEMETRY_SAVED_OBJECT_ID
16+
} from '../../../common/apm_saved_object_constants';
17+
import { LegacySetup } from '../../new-platform/plugin';
18+
19+
export function createApmTelementry(
20+
agentNames: string[] = []
21+
): SavedObjectAttributes {
22+
const validAgentNames = agentNames.filter(isAgentName);
23+
return {
24+
has_any_services: validAgentNames.length > 0,
25+
services_per_agent: countBy(validAgentNames)
26+
};
27+
}
28+
29+
export async function storeApmServicesTelemetry(
30+
server: Server,
31+
apmTelemetry: SavedObjectAttributes
32+
) {
33+
try {
34+
const internalSavedObjectsClient = getInternalSavedObjectsClient(server);
35+
await internalSavedObjectsClient.create(
36+
APM_SERVICES_TELEMETRY_SAVED_OBJECT_TYPE,
37+
apmTelemetry,
38+
{
39+
id: APM_SERVICES_TELEMETRY_SAVED_OBJECT_ID,
40+
overwrite: true
41+
}
42+
);
43+
} catch (e) {
44+
server.log(['error'], `Unable to save APM telemetry data: ${e.message}`);
45+
}
46+
}
47+
48+
interface LegacySetupWithUsageCollector extends LegacySetup {
49+
server: LegacySetup['server'] & {
50+
usage: {
51+
collectorSet: {
52+
makeUsageCollector: (options: unknown) => unknown;
53+
register: (options: unknown) => unknown;
54+
};
55+
};
56+
};
57+
}
58+
59+
export function makeApmUsageCollector(
60+
core: CoreSetup,
61+
{ server }: LegacySetupWithUsageCollector
62+
) {
63+
const apmUsageCollector = server.usage.collectorSet.makeUsageCollector({
64+
type: 'apm',
65+
fetch: async () => {
66+
const internalSavedObjectsClient = getInternalSavedObjectsClient(server);
67+
try {
68+
const apmTelemetrySavedObject = await internalSavedObjectsClient.get(
69+
APM_SERVICES_TELEMETRY_SAVED_OBJECT_TYPE,
70+
APM_SERVICES_TELEMETRY_SAVED_OBJECT_ID
71+
);
72+
return apmTelemetrySavedObject.attributes;
73+
} catch (err) {
74+
return createApmTelementry();
75+
}
76+
},
77+
isReady: () => true
78+
});
79+
server.usage.collectorSet.register(apmUsageCollector);
80+
}

x-pack/legacy/plugins/apm/server/lib/apm_telemetry/make_apm_usage_collector.ts

Lines changed: 0 additions & 44 deletions
This file was deleted.

x-pack/legacy/plugins/apm/server/lib/helpers/es_client.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,12 @@ async function getParamsForSearchRequest(
6666
apmOptions?: APMOptions
6767
) {
6868
const uiSettings = req.getUiSettingsService();
69+
const { server } = req;
6970
const [indices, includeFrozen] = await Promise.all([
70-
getApmIndices(req.server),
71+
getApmIndices({
72+
config: server.config(),
73+
savedObjectsClient: server.savedObjects.getScopedSavedObjectsClient(req)
74+
}),
7175
uiSettings.get('search:includeFrozen')
7276
]);
7377

x-pack/legacy/plugins/apm/server/lib/helpers/saved_objects_client.test.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* you may not use this file except in compliance with the Elastic License.
55
*/
66

7-
import { getSavedObjectsClient } from './saved_objects_client';
7+
import { getInternalSavedObjectsClient } from './saved_objects_client';
88

99
describe('saved_objects/client', () => {
1010
describe('getSavedObjectsClient', () => {
@@ -31,25 +31,25 @@ describe('saved_objects/client', () => {
3131
});
3232

3333
it('should use internal user "admin"', () => {
34-
getSavedObjectsClient(server);
34+
getInternalSavedObjectsClient(server);
3535

3636
expect(server.plugins.elasticsearch.getCluster).toHaveBeenCalledWith(
3737
'admin'
3838
);
3939
});
4040

4141
it('should call getSavedObjectsRepository with a cluster using the internal user context', () => {
42-
getSavedObjectsClient(server);
42+
getInternalSavedObjectsClient(server);
4343

4444
expect(
4545
server.savedObjects.getSavedObjectsRepository
4646
).toHaveBeenCalledWith(callWithInternalUser);
4747
});
4848

4949
it('should return a SavedObjectsClient initialized with the saved objects internal repository', () => {
50-
const result = getSavedObjectsClient(server);
50+
const internalSavedObjectsClient = getInternalSavedObjectsClient(server);
5151

52-
expect(result).toBe(savedObjectsClientInstance);
52+
expect(internalSavedObjectsClient).toBe(savedObjectsClientInstance);
5353
expect(server.savedObjects.SavedObjectsClient).toHaveBeenCalledWith(
5454
internalRepository
5555
);

x-pack/legacy/plugins/apm/server/lib/helpers/saved_objects_client.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,10 @@
66

77
import { Server } from 'hapi';
88

9-
export function getSavedObjectsClient(server: Server, clusterName = 'admin') {
9+
export function getInternalSavedObjectsClient(
10+
server: Server,
11+
clusterName = 'admin'
12+
) {
1013
const { SavedObjectsClient, getSavedObjectsRepository } = server.savedObjects;
1114
const { callWithInternalUser } = server.plugins.elasticsearch.getCluster(
1215
clusterName

0 commit comments

Comments
 (0)