[Canvas] Migrate usage collector to NP plugin (#53303)

* Move canvas usage collector to NP plugin

* Removing old usage collector fom legacy Canvas plugin

* Adding types placeholder

Co-authored-by: Elastic Machine <elasticmachine@users.noreply.github.com>
This commit is contained in:
Poff Poffenberger 2019-12-30 09:16:36 -06:00 committed by GitHub
parent fdd87e024f
commit 6765def84d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
11 changed files with 41 additions and 17 deletions

View file

@ -7,7 +7,6 @@
import { CoreSetup, PluginsSetup } from './shim'; import { CoreSetup, PluginsSetup } from './shim';
import { routes } from './routes'; import { routes } from './routes';
import { functions } from '../canvas_plugin_src/functions/server'; import { functions } from '../canvas_plugin_src/functions/server';
import { registerCanvasUsageCollector } from './usage';
import { loadSampleData } from './sample_data'; import { loadSampleData } from './sample_data';
export class Plugin { export class Plugin {
@ -61,7 +60,6 @@ export class Plugin {
}, },
}); });
registerCanvasUsageCollector(plugins.usageCollection, core);
loadSampleData( loadSampleData(
plugins.home.sampleData.addSavedObjectsToSampleDataset, plugins.home.sampleData.addSavedObjectsToSampleDataset,
plugins.home.sampleData.addAppLinksToSampleDataset plugins.home.sampleData.addAppLinksToSampleDataset

View file

@ -5,6 +5,6 @@
"configPath": ["xpack", "canvas"], "configPath": ["xpack", "canvas"],
"server": true, "server": true,
"ui": false, "ui": false,
"requiredPlugins": [] "requiredPlugins": [],
"optionalPlugins": ["usageCollection"]
} }

View file

@ -6,12 +6,11 @@
import { CallCluster } from 'src/legacy/core_plugins/elasticsearch'; import { CallCluster } from 'src/legacy/core_plugins/elasticsearch';
import { UsageCollectionSetup } from 'src/plugins/usage_collection/server'; import { UsageCollectionSetup } from 'src/plugins/usage_collection/server';
import { CoreSetup } from '../shim'; import { CANVAS_USAGE_TYPE } from '../../../../legacy/plugins/canvas/common/lib/constants';
// @ts-ignore missing local declaration import { TelemetryCollector } from '../../types';
import { CANVAS_USAGE_TYPE } from '../../common/lib/constants';
import { workpadCollector } from './workpad_collector'; import { workpadCollector } from './workpad_collector';
import { customElementCollector } from './custom_element_collector'; import { customElementCollector } from './custom_element_collector';
import { TelemetryCollector } from '../../types';
const collectors: TelemetryCollector[] = [workpadCollector, customElementCollector]; const collectors: TelemetryCollector[] = [workpadCollector, customElementCollector];
@ -24,10 +23,13 @@ const collectors: TelemetryCollector[] = [workpadCollector, customElementCollect
A usage collector function returns an object derived from current data in the ES Cluster. A usage collector function returns an object derived from current data in the ES Cluster.
*/ */
export function registerCanvasUsageCollector( export function registerCanvasUsageCollector(
usageCollection: UsageCollectionSetup, usageCollection: UsageCollectionSetup | undefined,
core: CoreSetup kibanaIndex: string
) { ) {
const kibanaIndex = core.getServerConfig().get<string>('kibana.index'); if (!usageCollection) {
return;
}
const canvasCollector = usageCollection.makeUsageCollector({ const canvasCollector = usageCollection.makeUsageCollector({
type: CANVAS_USAGE_TYPE, type: CANVAS_USAGE_TYPE,
isReady: () => true, isReady: () => true,

View file

@ -8,8 +8,12 @@ import { SearchParams } from 'elasticsearch';
import { get } from 'lodash'; import { get } from 'lodash';
import { fromExpression } from '@kbn/interpreter/common'; import { fromExpression } from '@kbn/interpreter/common';
import { collectFns } from './collector_helpers'; import { collectFns } from './collector_helpers';
import { TelemetryCollector } from '../../types'; import {
import { ExpressionAST, TelemetryCustomElement, TelemetryCustomElementDocument } from '../../types'; ExpressionAST,
TelemetryCollector,
TelemetryCustomElement,
TelemetryCustomElementDocument,
} from '../../types';
const CUSTOM_ELEMENT_TYPE = 'canvas-element'; const CUSTOM_ELEMENT_TYPE = 'canvas-element';
interface CustomElementSearch { interface CustomElementSearch {

View file

@ -6,7 +6,7 @@
import clonedeep from 'lodash.clonedeep'; import clonedeep from 'lodash.clonedeep';
import { summarizeWorkpads } from './workpad_collector'; import { summarizeWorkpads } from './workpad_collector';
import { workpads } from '../../__tests__/fixtures/workpads'; import { workpads } from '../../../../legacy/plugins/canvas/__tests__/fixtures/workpads';
describe('usage collector handle es response data', () => { describe('usage collector handle es response data', () => {
it('should summarize workpads, pages, and elements', () => { it('should summarize workpads, pages, and elements', () => {

View file

@ -7,7 +7,7 @@
import { SearchParams } from 'elasticsearch'; import { SearchParams } from 'elasticsearch';
import { sum as arraySum, min as arrayMin, max as arrayMax, get } from 'lodash'; import { sum as arraySum, min as arrayMin, max as arrayMax, get } from 'lodash';
import { fromExpression } from '@kbn/interpreter/common'; import { fromExpression } from '@kbn/interpreter/common';
import { CANVAS_TYPE } from '../../common/lib/constants'; import { CANVAS_TYPE } from '../../../../legacy/plugins/canvas/common/lib/constants';
import { collectFns } from './collector_helpers'; import { collectFns } from './collector_helpers';
import { ExpressionAST, TelemetryCollector, CanvasWorkpad } from '../../types'; import { ExpressionAST, TelemetryCollector, CanvasWorkpad } from '../../types';

View file

@ -4,19 +4,32 @@
* you may not use this file except in compliance with the Elastic License. * you may not use this file except in compliance with the Elastic License.
*/ */
import { first } from 'rxjs/operators';
import { CoreSetup, PluginInitializerContext, Plugin, Logger } from 'src/core/server'; import { CoreSetup, PluginInitializerContext, Plugin, Logger } from 'src/core/server';
import { UsageCollectionSetup } from 'src/plugins/usage_collection/server';
import { initRoutes } from './routes'; import { initRoutes } from './routes';
import { registerCanvasUsageCollector } from './collectors';
interface PluginsSetup {
usageCollection?: UsageCollectionSetup;
}
export class CanvasPlugin implements Plugin { export class CanvasPlugin implements Plugin {
private readonly logger: Logger; private readonly logger: Logger;
constructor(initializerContext: PluginInitializerContext) { constructor(public readonly initializerContext: PluginInitializerContext) {
this.logger = initializerContext.logger.get(); this.logger = initializerContext.logger.get();
} }
public setup(coreSetup: CoreSetup): void { public async setup(coreSetup: CoreSetup, plugins: PluginsSetup) {
const canvasRouter = coreSetup.http.createRouter(); const canvasRouter = coreSetup.http.createRouter();
initRoutes({ router: canvasRouter, logger: this.logger }); initRoutes({ router: canvasRouter, logger: this.logger });
// we need the kibana index provided by global config for the Canvas usage collector
const globalConfig = await this.initializerContext.config.legacy.globalConfig$
.pipe(first())
.toPromise();
registerCanvasUsageCollector(plugins.usageCollection, globalConfig.kibana.index);
} }
public start() {} public start() {}

View file

@ -0,0 +1,7 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License;
* you may not use this file except in compliance with the Elastic License.
*/
export * from '../../../legacy/plugins/canvas/types';