Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Uptime] migrate to observability rules registry #100699

Merged
Show file tree
Hide file tree
Changes from 18 commits
Commits
Show all changes
67 commits
Select commit Hold shift + click to select a range
52564d2
uptime - migrate to observability rules registry
dominiqueclarke Apr 30, 2021
18683b5
Modify Uptime alert types to work with server rule registry.
justinkambic May 3, 2021
73a2dd7
Export `RuleType` type for consumption by client plugins.
justinkambic May 6, 2021
995cb88
Add platinum as an option for `minimumLicenseRequired` field of `Rule…
justinkambic May 6, 2021
881a1cc
Simplify alert bootstrapping, inherit `RuleType` for alert factories.
justinkambic May 6, 2021
1753bbc
update rule field map
dominiqueclarke May 10, 2021
d5a597b
adjust rule registery to be created within setup instead of mount
dominiqueclarke May 10, 2021
8e247b5
merge master
dominiqueclarke May 24, 2021
31ac049
adjust plugin setup to account for rule registry changes
dominiqueclarke May 24, 2021
7f8f6ef
export types from rule registry
dominiqueclarke May 26, 2021
493b55e
move alert action message translations to common
dominiqueclarke May 26, 2021
fbb530e
update rule field map
dominiqueclarke May 26, 2021
d9b3294
update monitor status public alert model
dominiqueclarke May 26, 2021
804ad55
update tls public alert model
dominiqueclarke May 26, 2021
17aa286
update monitor status alert server model
dominiqueclarke May 26, 2021
53a05bc
update tls alert sever model
dominiqueclarke May 26, 2021
cbc95a6
update server plugin file to scope alerts indices to synthetics
dominiqueclarke May 26, 2021
24036d5
Merge branch 'master' of github.com:elastic/kibana into feature/98382…
dominiqueclarke May 26, 2021
96e1ddb
add initContext to server Plugin class
dominiqueclarke May 26, 2021
c303eea
adjust public plugin to register alerts when core start is availabile
dominiqueclarke May 26, 2021
6d1e628
update mappings
dominiqueclarke May 26, 2021
95ea9f7
update asset names
dominiqueclarke May 26, 2021
b9a7c78
adjust dependencies for alert initialization
dominiqueclarke May 27, 2021
e5c0304
adjust duration anomaly server alert model
dominiqueclarke May 27, 2021
764f9d0
adjust duration anomaly and monitor status public alert model to acco…
dominiqueclarke May 27, 2021
4d71a8c
add duration_anomaly tests
dominiqueclarke May 27, 2021
5811306
add anomaly severity
dominiqueclarke May 28, 2021
2e04e0b
adjust types
dominiqueclarke May 28, 2021
411dbdf
Merge branch 'master' of github.com:elastic/kibana into feature/98382…
dominiqueclarke May 28, 2021
555c237
update uptime server plugin
dominiqueclarke May 28, 2021
5964ac0
remove test_helpers
dominiqueclarke May 28, 2021
de27cbc
add getMonitorRouteFromMonitorId helper
dominiqueclarke May 28, 2021
bded189
export AlertTypeWithExecutor from rule_registry
dominiqueclarke May 28, 2021
93e68c4
adjust types
dominiqueclarke May 28, 2021
4a7e70d
merge master
dominiqueclarke Jun 1, 2021
38c5842
mock time zone
dominiqueclarke Jun 1, 2021
e9a2a17
merge master
dominiqueclarke Jun 23, 2021
994c42d
update types
dominiqueclarke Jun 24, 2021
26c5516
update types for legacy tls alert
dominiqueclarke Jun 24, 2021
1bac613
update mappings
dominiqueclarke Jun 24, 2021
416e50c
update monitor status check tls types
dominiqueclarke Jun 24, 2021
bd98bd4
update tls types and indexed fields
dominiqueclarke Jun 24, 2021
16c27c9
update duration anomaly types and indexed fields
dominiqueclarke Jun 24, 2021
5149ba4
update mappings
dominiqueclarke Jun 24, 2021
835caab
merge master
dominiqueclarke Jun 30, 2021
36248a1
delete unnecessary file
dominiqueclarke Jun 30, 2021
ddd18bd
Merge branch 'master' of github.com:elastic/kibana into feature/98382…
dominiqueclarke Jul 1, 2021
cf40852
adjust types
dominiqueclarke Jul 1, 2021
bedd91b
adjust ruleDataClient initialization
dominiqueclarke Jul 1, 2021
2ca90e2
index anomaly bucket span
dominiqueclarke Jul 1, 2021
cef6cb4
update types
dominiqueclarke Jul 1, 2021
8302df4
adjust registration of legacy tls alert type
dominiqueclarke Jul 1, 2021
664f122
adjust types
dominiqueclarke Jul 2, 2021
992c04f
merge master
dominiqueclarke Jul 5, 2021
36c8a4c
update index alias name
dominiqueclarke Jul 6, 2021
64c2091
update anomaly detection rule mappings
dominiqueclarke Jul 6, 2021
d541c85
Merge branch 'master' into feature/98382-uptime-migrate-to-observabil…
kibanamachine Jul 6, 2021
294137a
adjust import for certificate alert
dominiqueclarke Jul 6, 2021
1f4f4d7
Merge branch 'feature/98382-uptime-migrate-to-observability-rules-reg…
dominiqueclarke Jul 6, 2021
4ce1026
Merge branch 'master' into feature/98382-uptime-migrate-to-observabil…
kibanamachine Jul 9, 2021
7d41f4f
Merge branch 'master' of github.com:elastic/kibana into feature/98382…
dominiqueclarke Jul 12, 2021
dcdc486
adjust rbac settings
dominiqueclarke Jul 12, 2021
d350d81
Merge branch 'feature/98382-uptime-migrate-to-observability-rules-reg…
dominiqueclarke Jul 12, 2021
ed532b6
adjust content
dominiqueclarke Jul 12, 2021
1cf9f33
merge master
dominiqueclarke Jul 14, 2021
ee2468b
adjust uptime server plugin
dominiqueclarke Jul 14, 2021
e5b5d0f
Merge branch 'master' into feature/98382-uptime-migrate-to-observabil…
dominiqueclarke Jul 15, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion x-pack/plugins/observability/public/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -62,5 +62,8 @@ export { getApmTraceUrl } from './utils/get_apm_trace_url';
export { createExploratoryViewUrl } from './components/shared/exploratory_view/configurations/utils';
export type { SeriesUrl } from './components/shared/exploratory_view/types';

export type { ObservabilityRuleTypeRegistry } from './rules/create_observability_rule_type_registry';
export type {
ObservabilityRuleTypeRegistry,
FormattableAlertTypeModel,
} from './rules/create_observability_rule_type_registry';
export { createObservabilityRuleTypeRegistryMock } from './rules/observability_rule_type_registry_mock';
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,12 @@ type Formatter = (options: {
formatters: { asDuration: AsDuration; asPercent: AsPercent };
}) => { reason: string; link: string };

export type FormattableAlertTypeModel = AlertTypeModel<any> & { format: Formatter };
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can we replace this any?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Don't want to change too much of the types in observability. I only pulled it out. @jasonrhodes any insight into how we can make this more strongly typed. I know Dario was likely the one who worked on this.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does it work with unknown for now?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Interestingly enough, this is actually the same type used trigger actions ui, so I think it's best to leave this to be determined by the alerting team or Dario.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey, makes sense. For the time being, we kind of are the alerting team (that manages this rule registry) and I'm working on liaising between everyone who is currently touching it.

If any is being used already with this code, I'll log something to replace it. I just didn't want to introduce it.


export function createObservabilityRuleTypeRegistry(alertTypeRegistry: AlertTypeRegistryContract) {
const formatters: Array<{ typeId: string; fn: Formatter }> = [];
return {
register: (type: AlertTypeModel<any> & { format: Formatter }) => {
register: (type: FormattableAlertTypeModel) => {
const { format, ...rest } = type;
formatters.push({ typeId: type.id, fn: format });
alertTypeRegistry.register(rest);
Expand Down
6 changes: 5 additions & 1 deletion x-pack/plugins/rule_registry/server/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,11 @@ export type { RuleRegistryPluginSetupContract, RuleRegistryPluginStartContract }
export { RuleDataClient } from './rule_data_client';
export { IRuleDataClient } from './rule_data_client/types';
export { getRuleExecutorData, RuleExecutorData } from './utils/get_rule_executor_data';
export { createLifecycleRuleTypeFactory } from './utils/create_lifecycle_rule_type_factory';
export {
createLifecycleRuleTypeFactory,
LifecycleAlertService,
} from './utils/create_lifecycle_rule_type_factory';
export { AlertTypeWithExecutor } from './types';
shahzad31 marked this conversation as resolved.
Show resolved Hide resolved

export const config = {
schema: schema.object({
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ import { AlertTypeWithExecutor } from '../types';
import { ParsedTechnicalFields, parseTechnicalFields } from '../../common/parse_technical_fields';
import { getRuleExecutorData } from './get_rule_executor_data';

type LifecycleAlertService<TAlertInstanceContext extends Record<string, unknown>> = (alert: {
export type LifecycleAlertService<TAlertInstanceContext extends Record<string, unknown>> = (alert: {
id: string;
fields: Record<string, unknown>;
}) => AlertInstance<AlertInstanceState, TAlertInstanceContext, string>;
Expand Down
78 changes: 78 additions & 0 deletions x-pack/plugins/uptime/common/rules/uptime_rule_field_map.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
* 2.0; you may not use this file except in compliance with the Elastic License
* 2.0.
*/

export const uptimeRuleFieldMap = {
// common fields
'monitor.id': {
type: 'keyword',
},
'url.full': {
type: 'keyword',
},
reason: {
type: 'text',
},
// monitor status alert fields
'error.message': {
type: 'text',
},
'agent.name': {
type: 'keyword',
},
'monitor.name': {
type: 'keyword',
},
'monitor.type': {
type: 'keyword',
},
'observer.geo.name': {
type: 'keyword',
},
// tls alert fields
'cert.count': {
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@shahzad31 We can't use the ecs fields here, since the fields represent a single instance of a cert, but these are meant to represent all the found expiring/aging certs to the entire alert. (Also this is supposed to be cert_status.count, like the rest of the items below).

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

++ that makes senese

type: 'number',
},
'cert_status.aging_count': {
type: 'number',
},
'cert_status.aging_common_name_and_date': {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i am bit confused here, cert_status is plural or singular here. if it's a status of multiple certs , that means aging_common_name_and_date is probably an array?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i personally think may be this confusion is coming out of because our cert status alert still acts as a bulk alert message, where it sends a curated message for all expiring certificates, i think we should refactor that to work as alert instance per expiring certificate just like what we have for monitor status. any thoughts @justinkambic ?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, you are right about the batched/bulk alert message. The intention here was to story the message string in this field. My strategy in this first go around for indexing alert documents was to index all the same things we are keeping in alert state. We store the bulk alert message as a concatenated string of all the relevant information in alert state and this is meant to match here.

type: 'text',
},
'cert_status.expiring_count': {
type: 'number',
},
'cert_status.expiring_common_name_and_date': {
type: 'text',
},
'cert_status.has_aging': {
type: 'boolean',
},
'cert_status.has_expired': {
type: 'boolean',
},
// anomaly alert fields
'anomaly.severity': {
type: 'keyword',
},
'anomaly.severity_score': {
type: 'number',
},
'anomaly.start': {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

do we need more fields for anomaly?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

the majority of the anomaly fields have been transitioned to use RAC technical fields, as well as ecs fields listed in the common section. You can see the change in the anomaly_duration.ts server file.

type: 'date',
},
'anomaly.slowest_response': {
type: 'number',
},
'anomaly.expected_response': {
type: 'number',
},
'anomaly.observer_location': {
type: 'keyword',
},
} as const;

export type UptimeRuleFieldMap = typeof uptimeRuleFieldMap;
57 changes: 57 additions & 0 deletions x-pack/plugins/uptime/common/translations.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,3 +37,60 @@ export const MonitorStatusTranslations = {
defaultMessage: 'Alert when a monitor is down or an availability threshold is breached.',
}),
};

export const TlsTranslations = {
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Moved alert translations to common, in order to use them within server to derive reason message.

defaultActionMessage: i18n.translate('xpack.uptime.alerts.tls.defaultActionMessage', {
defaultMessage: `Detected {count} TLS certificates expiring or becoming too old.

{expiringConditionalOpen}
Expiring cert count: {expiringCount}
Expiring Certificates: {expiringCommonNameAndDate}
{expiringConditionalClose}

{agingConditionalOpen}
Aging cert count: {agingCount}
Aging Certificates: {agingCommonNameAndDate}
{agingConditionalClose}
`,
values: {
count: '{{state.count}}',
expiringCount: '{{state.expiringCount}}',
expiringCommonNameAndDate: '{{state.expiringCommonNameAndDate}}',
expiringConditionalOpen: '{{#state.hasExpired}}',
expiringConditionalClose: '{{/state.hasExpired}}',
agingCount: '{{state.agingCount}}',
agingCommonNameAndDate: '{{state.agingCommonNameAndDate}}',
agingConditionalOpen: '{{#state.hasAging}}',
agingConditionalClose: '{{/state.hasAging}}',
},
}),
name: i18n.translate('xpack.uptime.alerts.tls.clientName', {
defaultMessage: 'Uptime TLS',
}),
description: i18n.translate('xpack.uptime.alerts.tls.description', {
defaultMessage: 'Alert when the TLS certificate of an Uptime monitor is about to expire.',
}),
};

export const DurationAnomalyTranslations = {
defaultActionMessage: i18n.translate('xpack.uptime.alerts.durationAnomaly.defaultActionMessage', {
defaultMessage: `Abnormal ({severity} level) response time detected on {monitor} with url {monitorUrl} at {anomalyStartTimestamp}. Anomaly severity score is {severityScore}.
Response times as high as {slowestAnomalyResponse} have been detected from location {observerLocation}. Expected response time is {expectedResponseTime}.`,
values: {
severity: '{{state.severity}}',
anomalyStartTimestamp: '{{state.anomalyStartTimestamp}}',
monitor: '{{state.monitor}}',
monitorUrl: '{{{state.monitorUrl}}}',
slowestAnomalyResponse: '{{state.slowestAnomalyResponse}}',
expectedResponseTime: '{{state.expectedResponseTime}}',
severityScore: '{{state.severityScore}}',
observerLocation: '{{state.observerLocation}}',
},
}),
name: i18n.translate('xpack.uptime.alerts.durationAnomaly.clientName', {
defaultMessage: 'Uptime Duration Anomaly',
}),
description: i18n.translate('xpack.uptime.alerts.durationAnomaly.description', {
defaultMessage: 'Alert when the Uptime monitor duration is anaomalous.',
}),
};
3 changes: 2 additions & 1 deletion x-pack/plugins/uptime/kibana.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,8 @@
"features",
"licensing",
"triggersActionsUi",
"usageCollection"
"usageCollection",
"ruleRegistry"
],
"server": true,
"ui": true,
Expand Down
29 changes: 15 additions & 14 deletions x-pack/plugins/uptime/public/apps/plugin.ts
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,21 @@ export class UptimePlugin
});
}

const { observabilityRuleTypeRegistry } = plugins.observability;

alertTypeInitializers.forEach((init) => {
const alertInitializer = init({
core,
plugins,
});
if (
plugins.triggersActionsUi &&
!plugins.triggersActionsUi.alertTypeRegistry.has(alertInitializer.id)
) {
observabilityRuleTypeRegistry.register(alertInitializer);
}
});

core.application.register({
id: PLUGIN.ID,
euiIconType: 'logoObservability',
Expand Down Expand Up @@ -128,26 +143,12 @@ export class UptimePlugin
const [coreStart, corePlugins] = await core.getStartServices();

const { renderApp } = await import('./render_app');

return renderApp(coreStart, plugins, corePlugins, params);
},
});
}

public start(start: CoreStart, plugins: ClientPluginsStart): void {
alertTypeInitializers.forEach((init) => {
const alertInitializer = init({
core: start,
plugins,
});
if (
plugins.triggersActionsUi &&
!plugins.triggersActionsUi.alertTypeRegistry.has(alertInitializer.id)
) {
plugins.triggersActionsUi.alertTypeRegistry.register(alertInitializer);
}
});

if (plugins.fleet) {
const { registerExtension } = plugins.fleet;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ export const SettingsMessageExpressionPopover: React.FC<SettingsMessageExpressio
id,
}) => {
const kibana = useKibana();
const path = kibana.services?.application?.getUrlForApp('uptime', { path: 'settings' });
const settingsPath = kibana.services?.http?.basePath.prepend('uptime/settings');
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Because alerts are registered in the setup function, this component no longer has access to getUrlForApp.

const [isOpen, setIsOpen] = useState(false);
return (
<EuiPopover
Expand All @@ -54,7 +54,10 @@ export const SettingsMessageExpressionPopover: React.FC<SettingsMessageExpressio
settingsPageLink: (
// this link is wrapped around a span so we can also change the UI state
// and hide the alert flyout before triggering the navigation to the settings page
<EuiLink href={path} data-test-subj="xpack.uptime.alerts.tlsFlyout.linkToSettings">
<EuiLink
href={settingsPath}
data-test-subj="xpack.uptime.alerts.tlsFlyout.linkToSettings"
>
<span
onClick={() => {
setAlertFlyoutVisible(false);
Expand Down
18 changes: 18 additions & 0 deletions x-pack/plugins/uptime/public/lib/alert_types/common.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
* 2.0; you may not use this file except in compliance with the Elastic License
* 2.0.
*/

import { stringify } from 'querystring';

export const format = ({
pathname,
query,
}: {
pathname: string;
query: Record<string, any>;
}): string => {
return `${pathname}?${stringify(query)}`;
};
Original file line number Diff line number Diff line change
Expand Up @@ -6,18 +6,20 @@
*/

import React from 'react';
import { AlertTypeModel } from '../../../../triggers_actions_ui/public';
import { CLIENT_ALERT_TYPES } from '../../../common/constants/alerts';
import { DurationAnomalyTranslations } from './translations';
import { AlertTypeInitializer } from '.';

import { FormattableRuleType } from '../../../../observability/public';
import type { UptimeRuleFieldMap } from '../../../common/rules/uptime_rule_field_map';

const { defaultActionMessage, description } = DurationAnomalyTranslations;
const DurationAnomalyAlert = React.lazy(() => import('./lazy_wrapper/duration_anomaly'));

export const initDurationAnomalyAlertType: AlertTypeInitializer = ({
core,
plugins,
}): AlertTypeModel => ({
}): FormattableRuleType<UptimeRuleFieldMap> => ({
id: CLIENT_ALERT_TYPES.DURATION_ANOMALY,
iconClass: 'uptimeApp',
documentationUrl(docLinks) {
Expand All @@ -30,4 +32,8 @@ export const initDurationAnomalyAlertType: AlertTypeInitializer = ({
validate: () => ({ errors: {} }),
defaultActionMessage,
requiresAppContext: true,
format: ({ alert }) => ({
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

draft.

reason: 'test',
link: 'http://elastic.co',
}),
});
12 changes: 6 additions & 6 deletions x-pack/plugins/uptime/public/lib/alert_types/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,17 +5,17 @@
* 2.0.
*/

import { CoreStart } from 'kibana/public';
import { AlertTypeModel } from '../../../../triggers_actions_ui/public';
import { CoreSetup } from 'kibana/public';
import { FormattableAlertTypeModel } from '../../../../observability/public';
import { initMonitorStatusAlertType } from './monitor_status';
import { initTlsAlertType } from './tls';
import { ClientPluginsStart } from '../../apps/plugin';
import { ClientPluginsSetup } from '../../apps/plugin';
import { initDurationAnomalyAlertType } from './duration_anomaly';

export type AlertTypeInitializer = (dependenies: {
core: CoreStart;
plugins: ClientPluginsStart;
}) => AlertTypeModel;
core: CoreSetup;
plugins: ClientPluginsSetup;
}) => FormattableAlertTypeModel;

export const alertTypeInitializers: AlertTypeInitializer[] = [
initMonitorStatusAlertType,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,16 @@

import React from 'react';
import { Provider as ReduxProvider } from 'react-redux';
import { CoreStart } from 'kibana/public';
import { CoreSetup } from 'kibana/public';
import { store } from '../../../state';
import { AnomalyAlertComponent } from '../../../components/overview/alerts/anomaly_alert/anomaly_alert';
import { KibanaContextProvider } from '../../../../../../../src/plugins/kibana_react/public';
import { ClientPluginsStart } from '../../../apps/plugin';
import { ClientPluginsSetup } from '../../../apps/plugin';
import { kibanaService } from '../../../state/kibana_service';

interface Props {
core: CoreStart;
plugins: ClientPluginsStart;
core: CoreSetup;
plugins: ClientPluginsSetup;
params: any;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,16 @@

import React from 'react';
import { Provider as ReduxProvider } from 'react-redux';
import { CoreStart } from 'kibana/public';
import { CoreSetup } from 'kibana/public';
import { store } from '../../../state';
import { KibanaContextProvider } from '../../../../../../../src/plugins/kibana_react/public';
import { ClientPluginsStart } from '../../../apps/plugin';
import { ClientPluginsSetup } from '../../../apps/plugin';
import { kibanaService } from '../../../state/kibana_service';
import { AlertMonitorStatus } from '../../../components/overview/alerts/alerts_containers/alert_monitor_status';

interface Props {
core: CoreStart;
plugins: ClientPluginsStart;
core: CoreSetup;
plugins: ClientPluginsSetup;
params: any;
}

Expand Down
Loading