Skip to content

Commit fd459de

Browse files
authored
Migrate CSP usage collector to kibana_usage_collection plugin (#75536)
* move csp usage collector from legacy kibana plugin to kibana_usage_collection * make scripts/telemetry_check happy. * remove assertion on legacy kibana plugin * remove test on legacy kibana plugin * update README
1 parent 7376e4c commit fd459de

File tree

10 files changed

+29
-55
lines changed

10 files changed

+29
-55
lines changed

src/legacy/core_plugins/kibana/index.js

-6
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ import Fs from 'fs';
2121
import { promisify } from 'util';
2222

2323
import { getUiSettingDefaults } from './server/ui_setting_defaults';
24-
import { registerCspCollector } from './server/lib/csp_usage_collector';
2524

2625
const mkdirAsync = promisify(Fs.mkdir);
2726

@@ -53,10 +52,5 @@ export default function (kibana) {
5352
throw err;
5453
}
5554
},
56-
57-
init: async function (server) {
58-
const { usageCollection } = server.newPlatform.setup.plugins;
59-
registerCspCollector(usageCollection, server);
60-
},
6155
});
6256
}

src/plugins/kibana_usage_collection/README.md

+1
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,4 @@ This plugin registers the basic usage collectors from Kibana:
77
- Ops stats
88
- Number of Saved Objects per type
99
- Non-default UI Settings
10+
- CSP configuration

src/plugins/kibana_usage_collection/server/__snapshots__/index.test.ts.snap

+2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/legacy/core_plugins/kibana/server/lib/csp_usage_collector/csp_collector.test.ts src/plugins/kibana_usage_collection/server/collectors/csp/csp_collector.test.ts

+9-20
Original file line numberDiff line numberDiff line change
@@ -17,35 +17,24 @@
1717
* under the License.
1818
*/
1919

20-
import { CspConfig, ICspConfig } from '../../../../../../core/server';
20+
import { CspConfig, ICspConfig } from '../../../../../core/server';
2121
import { createCspCollector } from './csp_collector';
22-
23-
const createMockKbnServer = () => ({
24-
newPlatform: {
25-
setup: {
26-
core: {
27-
http: {
28-
csp: new CspConfig(),
29-
},
30-
},
31-
},
32-
},
33-
});
22+
import { httpServiceMock } from '../../../../../core/server/mocks';
3423

3524
describe('csp collector', () => {
36-
let kbnServer: ReturnType<typeof createMockKbnServer>;
25+
let httpMock: ReturnType<typeof httpServiceMock.createSetupContract>;
3726
const mockCallCluster = null as any;
3827

3928
function updateCsp(config: Partial<ICspConfig>) {
40-
kbnServer.newPlatform.setup.core.http.csp = new CspConfig(config);
29+
httpMock.csp = new CspConfig(config);
4130
}
4231

4332
beforeEach(() => {
44-
kbnServer = createMockKbnServer();
33+
httpMock = httpServiceMock.createSetupContract();
4534
});
4635

4736
test('fetches whether strict mode is enabled', async () => {
48-
const collector = createCspCollector(kbnServer as any);
37+
const collector = createCspCollector(httpMock);
4938

5039
expect((await collector.fetch(mockCallCluster)).strict).toEqual(true);
5140

@@ -54,7 +43,7 @@ describe('csp collector', () => {
5443
});
5544

5645
test('fetches whether the legacy browser warning is enabled', async () => {
57-
const collector = createCspCollector(kbnServer as any);
46+
const collector = createCspCollector(httpMock);
5847

5948
expect((await collector.fetch(mockCallCluster)).warnLegacyBrowsers).toEqual(true);
6049

@@ -63,7 +52,7 @@ describe('csp collector', () => {
6352
});
6453

6554
test('fetches whether the csp rules have been changed or not', async () => {
66-
const collector = createCspCollector(kbnServer as any);
55+
const collector = createCspCollector(httpMock);
6756

6857
expect((await collector.fetch(mockCallCluster)).rulesChangedFromDefault).toEqual(false);
6958

@@ -72,7 +61,7 @@ describe('csp collector', () => {
7261
});
7362

7463
test('does not include raw csp rules under any property names', async () => {
75-
const collector = createCspCollector(kbnServer as any);
64+
const collector = createCspCollector(httpMock);
7665

7766
// It's important that we do not send the value of csp.rules here as it
7867
// can be customized with values that can be identifiable to given

src/legacy/core_plugins/kibana/server/lib/csp_usage_collector/csp_collector.ts src/plugins/kibana_usage_collection/server/collectors/csp/csp_collector.ts

+10-11
Original file line numberDiff line numberDiff line change
@@ -17,25 +17,21 @@
1717
* under the License.
1818
*/
1919

20-
import { Server } from 'hapi';
21-
import { CspConfig } from '../../../../../../core/server';
22-
import {
23-
UsageCollectionSetup,
24-
CollectorOptions,
25-
} from '../../../../../../plugins/usage_collection/server';
20+
import { UsageCollectionSetup, CollectorOptions } from 'src/plugins/usage_collection/server';
21+
import { HttpServiceSetup, CspConfig } from '../../../../../core/server';
2622

2723
interface Usage {
2824
strict: boolean;
2925
warnLegacyBrowsers: boolean;
3026
rulesChangedFromDefault: boolean;
3127
}
3228

33-
export function createCspCollector(server: Server): CollectorOptions<Usage> {
29+
export function createCspCollector(http: HttpServiceSetup): CollectorOptions<Usage> {
3430
return {
3531
type: 'csp',
3632
isReady: () => true,
3733
async fetch() {
38-
const { strict, warnLegacyBrowsers, header } = server.newPlatform.setup.core.http.csp;
34+
const { strict, warnLegacyBrowsers, header } = http.csp;
3935

4036
return {
4137
strict,
@@ -60,8 +56,11 @@ export function createCspCollector(server: Server): CollectorOptions<Usage> {
6056
};
6157
}
6258

63-
export function registerCspCollector(usageCollection: UsageCollectionSetup, server: Server): void {
64-
const collectorConfig = createCspCollector(server);
65-
const collector = usageCollection.makeUsageCollector<Usage>(collectorConfig);
59+
export function registerCspCollector(
60+
usageCollection: UsageCollectionSetup,
61+
http: HttpServiceSetup
62+
): void {
63+
const collectorOptions = createCspCollector(http);
64+
const collector = usageCollection.makeUsageCollector<Usage>(collectorOptions);
6665
usageCollection.registerCollector(collector);
6766
}

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

+1
Original file line numberDiff line numberDiff line change
@@ -22,3 +22,4 @@ export { registerManagementUsageCollector } from './management';
2222
export { registerApplicationUsageCollector } from './application_usage';
2323
export { registerKibanaUsageCollector } from './kibana';
2424
export { registerOpsStatsCollector } from './ops_stats';
25+
export { registerCspCollector } from './csp';

src/plugins/kibana_usage_collection/server/plugin.ts

+6-6
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ import {
3737
registerManagementUsageCollector,
3838
registerOpsStatsCollector,
3939
registerUiMetricUsageCollector,
40+
registerCspCollector,
4041
} from './collectors';
4142

4243
interface KibanaUsageCollectionPluginsDepsSetup {
@@ -56,12 +57,9 @@ export class KibanaUsageCollectionPlugin implements Plugin {
5657
this.metric$ = new Subject<OpsMetrics>();
5758
}
5859

59-
public setup(
60-
{ savedObjects }: CoreSetup,
61-
{ usageCollection }: KibanaUsageCollectionPluginsDepsSetup
62-
) {
63-
this.registerUsageCollectors(usageCollection, this.metric$, (opts) =>
64-
savedObjects.registerType(opts)
60+
public setup(coreSetup: CoreSetup, { usageCollection }: KibanaUsageCollectionPluginsDepsSetup) {
61+
this.registerUsageCollectors(usageCollection, coreSetup, this.metric$, (opts) =>
62+
coreSetup.savedObjects.registerType(opts)
6563
);
6664
}
6765

@@ -79,6 +77,7 @@ export class KibanaUsageCollectionPlugin implements Plugin {
7977

8078
private registerUsageCollectors(
8179
usageCollection: UsageCollectionSetup,
80+
coreSetup: CoreSetup,
8281
metric$: Subject<OpsMetrics>,
8382
registerType: SavedObjectsRegisterType
8483
) {
@@ -90,5 +89,6 @@ export class KibanaUsageCollectionPlugin implements Plugin {
9089
registerManagementUsageCollector(usageCollection, getUiSettingsClient);
9190
registerUiMetricUsageCollector(usageCollection, registerType, getSavedObjectsClient);
9291
registerApplicationUsageCollector(usageCollection, registerType, getSavedObjectsClient);
92+
registerCspCollector(usageCollection, coreSetup.http);
9393
}
9494
}

test/api_integration/apis/status/status.js

-4
Original file line numberDiff line numberDiff line change
@@ -39,10 +39,6 @@ export default function ({ getService }) {
3939
expect(body.status.overall.state).to.be('green');
4040

4141
expect(body.status.statuses).to.be.an('array');
42-
const kibanaPlugin = body.status.statuses.find((s) => {
43-
return s.id.indexOf('plugin:kibana') === 0;
44-
});
45-
expect(kibanaPlugin.state).to.be('green');
4642

4743
expect(body.metrics.collection_interval_in_millis).to.be.a('number');
4844

test/functional/apps/status_page/index.ts

-8
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ import expect from '@kbn/expect';
2121
import { FtrProviderContext } from '../../ftr_provider_context';
2222

2323
export default function ({ getService, getPageObjects }: FtrProviderContext) {
24-
const retry = getService('retry');
2524
const testSubjects = getService('testSubjects');
2625
const PageObjects = getPageObjects(['common']);
2726

@@ -32,13 +31,6 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
3231
await PageObjects.common.navigateToApp('status_page');
3332
});
3433

35-
it('should show the kibana plugin as ready', async () => {
36-
await retry.tryForTime(6000, async () => {
37-
const text = await testSubjects.getVisibleText('statusBreakdown');
38-
expect(text.indexOf('plugin:kibana')).to.be.above(-1);
39-
});
40-
});
41-
4234
it('should show the build hash and number', async () => {
4335
const buildNumberText = await testSubjects.getVisibleText('statusBuildNumber');
4436
expect(buildNumberText).to.contain('BUILD ');

0 commit comments

Comments
 (0)