Do not initialize event stream until we log events (#155357)

## Summary

This PR pauses event stream initalization until we set up events that we
want to log.


### Checklist

Delete any items that are not applicable to this PR.

- [x] [Unit or functional
tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html)
were updated or added to match the most common scenarios

### For maintainers

- [x] This was checked for breaking API changes and was [labeled
appropriately](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process)
This commit is contained in:
Vadim Kibana 2023-04-20 14:51:16 +02:00 committed by GitHub
parent 4b6dbdcd2c
commit fd26017162
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 40 additions and 26 deletions

View file

@ -28,7 +28,7 @@ export interface CoreApi {
export interface CoreInitializerContext {
logger: Logger;
eventStream: EventStreamService;
eventStream?: EventStreamService;
}
export interface CoreSetup {
@ -63,14 +63,20 @@ export class Core {
}
private setupEventStream() {
const eventStream = this.ctx.eventStream;
// TODO: This should be cleaned up and support added for all CRUD events.
this.eventBus.on('deleteItemSuccess', (event) => {
this.ctx.eventStream.addEvent({
// TODO: add "subject" field to event
predicate: ['delete'],
// TODO: the `.contentId` should be easily available on most events.
object: [event.contentTypeId, (event as any).contentId],
// The work is tracked here: https://github.com/elastic/kibana/issues/153258
// and here: https://github.com/elastic/kibana/issues/153260
if (eventStream) {
this.eventBus.on('deleteItemSuccess', (event) => {
eventStream.addEvent({
// TODO: add "subject" field to event
predicate: ['delete'],
// TODO: the `.contentId` should be easily available on most events.
object: [event.contentTypeId, (event as any).contentId],
});
});
});
}
}
}

View file

@ -21,7 +21,7 @@ import {
ContentManagementServerStart,
SetupDependencies,
} from './types';
import { EventStreamService, EsEventStreamClientFactory } from './event_stream';
import { EventStreamService } from './event_stream';
import { procedureNames } from '../common/rpc';
export class ContentManagementPlugin
@ -29,20 +29,22 @@ export class ContentManagementPlugin
{
private readonly logger: Logger;
private readonly core: Core;
readonly #eventStream: EventStreamService;
readonly #eventStream?: EventStreamService;
constructor(initializerContext: PluginInitializerContext) {
const kibanaVersion = initializerContext.env.packageInfo.version;
this.logger = initializerContext.logger.get();
this.#eventStream = new EventStreamService({
logger: this.logger,
clientFactory: new EsEventStreamClientFactory({
baseName: '.kibana',
kibanaVersion,
logger: this.logger,
}),
});
// TODO: Enable Event Stream once we ready to log events.
// const kibanaVersion = initializerContext.env.packageInfo.version;
// this.#eventStream = new EventStreamService({
// logger: this.logger,
// clientFactory: new EsEventStreamClientFactory({
// baseName: '.kibana',
// kibanaVersion,
// logger: this.logger,
// }),
// });
this.core = new Core({
logger: this.logger,
eventStream: this.#eventStream,
@ -50,7 +52,9 @@ export class ContentManagementPlugin
}
public setup(core: CoreSetup) {
this.#eventStream.setup({ core });
if (this.#eventStream) {
this.#eventStream.setup({ core });
}
const { api: coreApi, contentRegistry } = this.core.setup();
@ -69,16 +73,20 @@ export class ContentManagementPlugin
}
public start(core: CoreStart) {
this.#eventStream.start();
if (this.#eventStream) {
this.#eventStream.start();
}
return {};
}
public async stop(): Promise<void> {
try {
await this.#eventStream.stop();
} catch (e) {
this.logger.error(`Error during event stream stop: ${e}`);
if (this.#eventStream) {
try {
await this.#eventStream.stop();
} catch (e) {
this.logger.error(`Error during event stream stop: ${e}`);
}
}
}
}