[Alerting] Remove unnecessary call on every kibana load (#116572)

This commit is contained in:
Shahzad 2021-10-29 19:48:25 +02:00 committed by GitHub
parent 05cfe434f0
commit 4492a107bd
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 19 additions and 27 deletions

View file

@ -42,7 +42,7 @@ describe('AlertNavigationRegistry', () => {
test('returns true for registered consumer & alert types handlers', () => {
const registry = new AlertNavigationRegistry();
const alertType = mockAlertType('index_threshold');
registry.register('siem', alertType, handler);
registry.register('siem', alertType.id, handler);
expect(registry.has('siem', alertType)).toEqual(true);
});
@ -72,7 +72,7 @@ describe('AlertNavigationRegistry', () => {
test('registers a handler by consumer & Alert Type', () => {
const registry = new AlertNavigationRegistry();
const alertType = mockAlertType('index_threshold');
registry.register('siem', alertType, handler);
registry.register('siem', alertType.id, handler);
expect(registry.has('siem', alertType)).toEqual(true);
});
@ -80,11 +80,11 @@ describe('AlertNavigationRegistry', () => {
const registry = new AlertNavigationRegistry();
const indexThresholdAlertType = mockAlertType('index_threshold');
registry.register('siem', indexThresholdAlertType, handler);
registry.register('siem', indexThresholdAlertType.id, handler);
expect(registry.has('siem', indexThresholdAlertType)).toEqual(true);
const geoAlertType = mockAlertType('geogrid');
registry.register('siem', geoAlertType, handler);
registry.register('siem', geoAlertType.id, handler);
expect(registry.has('siem', geoAlertType)).toEqual(true);
});
@ -92,19 +92,19 @@ describe('AlertNavigationRegistry', () => {
const registry = new AlertNavigationRegistry();
const indexThresholdAlertType = mockAlertType('geogrid');
registry.register('siem', indexThresholdAlertType, handler);
registry.register('siem', indexThresholdAlertType.id, handler);
expect(registry.has('siem', indexThresholdAlertType)).toEqual(true);
registry.register('apm', indexThresholdAlertType, handler);
registry.register('apm', indexThresholdAlertType.id, handler);
expect(registry.has('apm', indexThresholdAlertType)).toEqual(true);
});
test('throws if an existing handler is registered', () => {
const registry = new AlertNavigationRegistry();
const alertType = mockAlertType('index_threshold');
registry.register('siem', alertType, handler);
registry.register('siem', alertType.id, handler);
expect(() => {
registry.register('siem', alertType, handler);
registry.register('siem', alertType.id, handler);
}).toThrowErrorMatchingInlineSnapshot(
`"Navigation for Alert type \\"index_threshold\\" within \\"siem\\" is already registered."`
);
@ -125,7 +125,7 @@ describe('AlertNavigationRegistry', () => {
expect(registry.hasDefaultHandler('siem')).toEqual(true);
const geoAlertType = mockAlertType('geogrid');
registry.register('siem', geoAlertType, handler);
registry.register('siem', geoAlertType.id, handler);
expect(registry.has('siem', geoAlertType)).toEqual(true);
});
@ -149,7 +149,7 @@ describe('AlertNavigationRegistry', () => {
}
const indexThresholdAlertType = mockAlertType('indexThreshold');
registry.register('siem', indexThresholdAlertType, indexThresholdHandler);
registry.register('siem', indexThresholdAlertType.id, indexThresholdHandler);
expect(registry.get('siem', indexThresholdAlertType)).toEqual(indexThresholdHandler);
});
@ -167,7 +167,7 @@ describe('AlertNavigationRegistry', () => {
test('returns default handlers by consumer when there are other alert type handler', () => {
const registry = new AlertNavigationRegistry();
registry.register('siem', mockAlertType('indexThreshold'), () => ({}));
registry.register('siem', mockAlertType('indexThreshold').id, () => ({}));
function defaultHandler(alert: SanitizedAlert) {
return {};

View file

@ -15,11 +15,11 @@ export class AlertNavigationRegistry {
new Map();
public has(consumer: string, alertType: AlertType) {
return this.hasTypedHandler(consumer, alertType) || this.hasDefaultHandler(consumer);
return this.hasTypedHandler(consumer, alertType.id) || this.hasDefaultHandler(consumer);
}
public hasTypedHandler(consumer: string, alertType: AlertType) {
return this.alertNavigations.get(consumer)?.has(alertType.id) ?? false;
public hasTypedHandler(consumer: string, ruleTypeId: string) {
return this.alertNavigations.get(consumer)?.has(ruleTypeId) ?? false;
}
public hasDefaultHandler(consumer: string) {
@ -50,14 +50,14 @@ export class AlertNavigationRegistry {
consumerNavigations.set(DEFAULT_HANDLER, handler);
}
public register(consumer: string, alertType: AlertType, handler: AlertNavigationHandler) {
if (this.hasTypedHandler(consumer, alertType)) {
public register(consumer: string, ruleTypeId: string, handler: AlertNavigationHandler) {
if (this.hasTypedHandler(consumer, ruleTypeId)) {
throw new Error(
i18n.translate('xpack.alerting.alertNavigationRegistry.register.duplicateNavigationError', {
defaultMessage:
'Navigation for Alert type "{alertType}" within "{consumer}" is already registered.',
values: {
alertType: alertType.id,
alertType: ruleTypeId,
consumer,
},
})
@ -67,7 +67,7 @@ export class AlertNavigationRegistry {
const consumerNavigations =
this.alertNavigations.get(consumer) ?? this.createConsumerNavigation(consumer);
consumerNavigations.set(alertType.id, handler);
consumerNavigations.set(ruleTypeId, handler);
}
public get(consumer: string, alertType: AlertType): AlertNavigationHandler {

View file

@ -59,15 +59,7 @@ export class AlertingPublicPlugin implements Plugin<PluginSetupContract, PluginS
ruleTypeId: string,
handler: AlertNavigationHandler
) => {
const alertType = await loadAlertType({ http: core.http, id: ruleTypeId });
if (!alertType) {
// eslint-disable-next-line no-console
console.log(
`Unable to register navigation for rule type "${ruleTypeId}" because it is not registered on the server side.`
);
return;
}
this.alertNavigationRegistry!.register(applicationId, alertType, handler);
this.alertNavigationRegistry!.register(applicationId, ruleTypeId, handler);
};
const registerDefaultNavigation = async (