mirror of
https://github.com/elastic/kibana.git
synced 2025-04-24 09:48:58 -04:00
[Reporting/Migration] ReportingSetup, LegacySetup (#54198)
* ReportingSetup, LegacySetup * fix ts
This commit is contained in:
parent
dfb3578793
commit
2598d15ea1
3 changed files with 123 additions and 68 deletions
|
@ -7,47 +7,20 @@
|
|||
import { resolve } from 'path';
|
||||
import { i18n } from '@kbn/i18n';
|
||||
import { Legacy } from 'kibana';
|
||||
import { IUiSettingsClient } from 'src/core/server';
|
||||
import { XPackMainPlugin } from '../xpack_main/server/xpack_main';
|
||||
import { PLUGIN_ID, UI_SETTINGS_CUSTOM_PDF_LOGO } from './common/constants';
|
||||
// @ts-ignore untyped module defintition
|
||||
import { mirrorPluginStatus } from '../../server/lib/mirror_plugin_status';
|
||||
import { registerRoutes } from './server/routes';
|
||||
import {
|
||||
LevelLogger,
|
||||
checkLicenseFactory,
|
||||
getExportTypesRegistry,
|
||||
runValidations,
|
||||
} from './server/lib';
|
||||
import { createBrowserDriverFactory } from './server/browsers';
|
||||
import { registerReportingUsageCollector } from './server/usage';
|
||||
import { ReportingConfigOptions, ReportingPluginSpecOptions } from './types.d';
|
||||
import { config as reportingConfig } from './config';
|
||||
import { logConfiguration } from './log_configuration';
|
||||
import {
|
||||
LegacySetup,
|
||||
ReportingPlugin,
|
||||
ReportingSetupDeps,
|
||||
reportingPluginFactory,
|
||||
} from './server/plugin';
|
||||
|
||||
const kbToBase64Length = (kb: number) => {
|
||||
return Math.floor((kb * 1024 * 8) / 6);
|
||||
};
|
||||
|
||||
type LegacyPlugins = Legacy.Server['plugins'];
|
||||
|
||||
export interface ServerFacade {
|
||||
config: Legacy.Server['config'];
|
||||
info: Legacy.Server['info'];
|
||||
log: Legacy.Server['log'];
|
||||
plugins: {
|
||||
elasticsearch: LegacyPlugins['elasticsearch'];
|
||||
security: LegacyPlugins['security'];
|
||||
xpack_main: XPackMainPlugin & {
|
||||
status?: any;
|
||||
};
|
||||
};
|
||||
route: Legacy.Server['route'];
|
||||
savedObjects: Legacy.Server['savedObjects'];
|
||||
uiSettingsServiceFactory: Legacy.Server['uiSettingsServiceFactory'];
|
||||
fieldFormatServiceFactory: (uiConfig: IUiSettingsClient) => unknown;
|
||||
}
|
||||
|
||||
export const reporting = (kibana: any) => {
|
||||
return new kibana.Plugin({
|
||||
id: PLUGIN_ID,
|
||||
|
@ -93,7 +66,11 @@ export const reporting = (kibana: any) => {
|
|||
},
|
||||
|
||||
async init(server: Legacy.Server) {
|
||||
const serverFacade: ServerFacade = {
|
||||
const coreSetup = server.newPlatform.setup.core;
|
||||
const pluginsSetup: ReportingSetupDeps = {
|
||||
usageCollection: server.newPlatform.setup.plugins.usageCollection,
|
||||
};
|
||||
const __LEGACY: LegacySetup = {
|
||||
config: server.config,
|
||||
info: server.info,
|
||||
route: server.route.bind(server),
|
||||
|
@ -108,38 +85,9 @@ export const reporting = (kibana: any) => {
|
|||
fieldFormatServiceFactory: server.fieldFormatServiceFactory,
|
||||
log: server.log.bind(server),
|
||||
};
|
||||
const exportTypesRegistry = getExportTypesRegistry();
|
||||
|
||||
let isCollectorReady = false;
|
||||
// Register a function with server to manage the collection of usage stats
|
||||
const { usageCollection } = server.newPlatform.setup.plugins;
|
||||
registerReportingUsageCollector(
|
||||
usageCollection,
|
||||
serverFacade,
|
||||
() => isCollectorReady,
|
||||
exportTypesRegistry
|
||||
);
|
||||
|
||||
const logger = LevelLogger.createForServer(serverFacade, [PLUGIN_ID]);
|
||||
const browserDriverFactory = await createBrowserDriverFactory(serverFacade);
|
||||
|
||||
logConfiguration(serverFacade, logger);
|
||||
runValidations(serverFacade, logger, browserDriverFactory);
|
||||
|
||||
const { xpack_main: xpackMainPlugin } = serverFacade.plugins;
|
||||
mirrorPluginStatus(xpackMainPlugin, this);
|
||||
const checkLicense = checkLicenseFactory(exportTypesRegistry);
|
||||
(xpackMainPlugin as any).status.once('green', () => {
|
||||
// Register a function that is called whenever the xpack info changes,
|
||||
// to re-compute the license check results for this plugin
|
||||
xpackMainPlugin.info.feature(this.id).registerLicenseCheckResultsGenerator(checkLicense);
|
||||
});
|
||||
|
||||
// Post initialization of the above code, the collector is now ready to fetch its data
|
||||
isCollectorReady = true;
|
||||
|
||||
// Reporting routes
|
||||
registerRoutes(serverFacade, exportTypesRegistry, browserDriverFactory, logger);
|
||||
const plugin: ReportingPlugin = reportingPluginFactory(__LEGACY, this);
|
||||
await plugin.setup(coreSetup, pluginsSetup);
|
||||
},
|
||||
|
||||
deprecations({ unused }: any) {
|
||||
|
|
107
x-pack/legacy/plugins/reporting/server/plugin.ts
Normal file
107
x-pack/legacy/plugins/reporting/server/plugin.ts
Normal file
|
@ -0,0 +1,107 @@
|
|||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
import { Legacy } from 'kibana';
|
||||
import { CoreSetup, CoreStart, Plugin } from 'src/core/server';
|
||||
import { IUiSettingsClient } from 'src/core/server';
|
||||
import { UsageCollectionSetup } from 'src/plugins/usage_collection/server';
|
||||
import { XPackMainPlugin } from '../../xpack_main/server/xpack_main';
|
||||
// @ts-ignore
|
||||
import { mirrorPluginStatus } from '../../../server/lib/mirror_plugin_status';
|
||||
import { PLUGIN_ID } from '../common/constants';
|
||||
import { ReportingPluginSpecOptions } from '../types.d';
|
||||
import { registerRoutes } from './routes';
|
||||
import { LevelLogger, checkLicenseFactory, getExportTypesRegistry, runValidations } from './lib';
|
||||
import { createBrowserDriverFactory } from './browsers';
|
||||
import { registerReportingUsageCollector } from './usage';
|
||||
import { logConfiguration } from '../log_configuration';
|
||||
|
||||
// For now there is no exposed functionality to other plugins
|
||||
export type ReportingSetup = object;
|
||||
export type ReportingStart = object;
|
||||
|
||||
export interface ReportingSetupDeps {
|
||||
usageCollection: UsageCollectionSetup;
|
||||
}
|
||||
export type ReportingStartDeps = object;
|
||||
|
||||
type LegacyPlugins = Legacy.Server['plugins'];
|
||||
|
||||
export interface LegacySetup {
|
||||
config: Legacy.Server['config'];
|
||||
info: Legacy.Server['info'];
|
||||
log: Legacy.Server['log'];
|
||||
plugins: {
|
||||
elasticsearch: LegacyPlugins['elasticsearch'];
|
||||
security: LegacyPlugins['security'];
|
||||
xpack_main: XPackMainPlugin & {
|
||||
status?: any;
|
||||
};
|
||||
};
|
||||
route: Legacy.Server['route'];
|
||||
savedObjects: Legacy.Server['savedObjects'];
|
||||
uiSettingsServiceFactory: Legacy.Server['uiSettingsServiceFactory'];
|
||||
fieldFormatServiceFactory: (uiConfig: IUiSettingsClient) => unknown;
|
||||
}
|
||||
|
||||
export type ReportingPlugin = Plugin<
|
||||
ReportingSetup,
|
||||
ReportingStart,
|
||||
ReportingSetupDeps,
|
||||
ReportingStartDeps
|
||||
>;
|
||||
|
||||
/* We need a factory that returns an instance of the class because the class
|
||||
* implementation itself restricts against having Legacy dependencies passed
|
||||
* into `setup`. The factory parameters take the legacy dependencies, and the
|
||||
* `setup` method gets it from enclosure */
|
||||
export function reportingPluginFactory(
|
||||
__LEGACY: LegacySetup,
|
||||
legacyPlugin: ReportingPluginSpecOptions
|
||||
) {
|
||||
return new (class ReportingPlugin implements ReportingPlugin {
|
||||
public async setup(core: CoreSetup, plugins: ReportingSetupDeps): Promise<ReportingSetup> {
|
||||
const exportTypesRegistry = getExportTypesRegistry();
|
||||
|
||||
let isCollectorReady = false;
|
||||
// Register a function with server to manage the collection of usage stats
|
||||
const { usageCollection } = plugins;
|
||||
registerReportingUsageCollector(
|
||||
usageCollection,
|
||||
__LEGACY,
|
||||
() => isCollectorReady,
|
||||
exportTypesRegistry
|
||||
);
|
||||
|
||||
const logger = LevelLogger.createForServer(__LEGACY, [PLUGIN_ID]);
|
||||
const browserDriverFactory = await createBrowserDriverFactory(__LEGACY);
|
||||
|
||||
logConfiguration(__LEGACY, logger);
|
||||
runValidations(__LEGACY, logger, browserDriverFactory);
|
||||
|
||||
const { xpack_main: xpackMainPlugin } = __LEGACY.plugins;
|
||||
mirrorPluginStatus(xpackMainPlugin, legacyPlugin);
|
||||
const checkLicense = checkLicenseFactory(exportTypesRegistry);
|
||||
(xpackMainPlugin as any).status.once('green', () => {
|
||||
// Register a function that is called whenever the xpack info changes,
|
||||
// to re-compute the license check results for this plugin
|
||||
xpackMainPlugin.info.feature(PLUGIN_ID).registerLicenseCheckResultsGenerator(checkLicense);
|
||||
});
|
||||
|
||||
// Post initialization of the above code, the collector is now ready to fetch its data
|
||||
isCollectorReady = true;
|
||||
|
||||
// Reporting routes
|
||||
registerRoutes(__LEGACY, exportTypesRegistry, browserDriverFactory, logger);
|
||||
|
||||
return {};
|
||||
}
|
||||
|
||||
public start(core: CoreStart, plugins: ReportingStartDeps): ReportingStart {
|
||||
return {};
|
||||
}
|
||||
})();
|
||||
}
|
6
x-pack/legacy/plugins/reporting/types.d.ts
vendored
6
x-pack/legacy/plugins/reporting/types.d.ts
vendored
|
@ -15,7 +15,7 @@ import { CancellationToken } from './common/cancellation_token';
|
|||
import { LevelLogger } from './server/lib/level_logger';
|
||||
import { HeadlessChromiumDriverFactory } from './server/browsers/chromium/driver_factory';
|
||||
import { BrowserType } from './server/browsers/types';
|
||||
import { ServerFacade } from './index';
|
||||
import { LegacySetup } from './server/plugin';
|
||||
|
||||
export type ReportingPlugin = object; // For Plugin contract
|
||||
|
||||
|
@ -69,6 +69,8 @@ interface GenerateExportTypePayload {
|
|||
* Legacy System
|
||||
*/
|
||||
|
||||
export type ServerFacade = LegacySetup;
|
||||
|
||||
export type ReportingPluginSpecOptions = Legacy.PluginSpecOptions;
|
||||
|
||||
export type EnqueueJobFn = <JobParamsType>(
|
||||
|
@ -353,5 +355,3 @@ export interface InterceptedRequest {
|
|||
frameId: string;
|
||||
resourceType: string;
|
||||
}
|
||||
|
||||
export { ServerFacade };
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue