[8.7] [Synthetics] add default email recovery message (#154862) (#155418)

# Backport

This will backport the following commits from `main` to `8.7`:
 - [Synthetics] add default email recovery message (#154862) (0b71c745)

<!--- Backport version: 8.9.7 -->

### Questions ?
Please refer to the [Backport tool
documentation](https://github.com/sqren/backport)

<!--BACKPORT [{"author":{"name":"Dominique
Clarke","email":"dominique.clarke@elastic.co"},"sourceCommit":{"committedDate":"2023-04-20T14:51:04Z","message":"[Synthetics]
add default email recovery message (#154862)\n\n##
Summary\r\n\r\nResolves
https://github.com/elastic/kibana/issues/153891\r\n<img width=\"1334\"
alt=\"Screen Shot 2023-04-18 at 7 50 20
PM\"\r\nsrc=\"https://user-images.githubusercontent.com/11356435/232928889-09de824f-14ef-426d-8732-6da7fc12eb37.png\">\r\n\r\nDown
email\r\n\r\nRecovered email\r\n<img width=\"1339\" alt=\"Screen Shot
2023-04-18 at 7 50 30
PM\"\r\nsrc=\"https://user-images.githubusercontent.com/11356435/232928874-4e7c0cbb-b7ec-4684-b0d2-88ec993697df.png\">\r\n\r\nPlease
note the `recoverd` typo in the screenshot has been addressed
in\r\ncommits\r\n[7c4040f](56f637b82e)\r\n\r\n###
Testing\r\nThis PR is extremely tricky to test. I have deployed this
branch to my\r\nown cloud account. This ensures that I can control the
allowlist setting\r\nfor emails on cloud. If you want, I can give you
the cloud cluster where\r\nthis branch is hosted and if you give me your
email I can add you to my\r\nallowlist settings for you to
test.\r\n\r\nThe cloud cluster is current on
commit\r\n[f889500](f889500dc2)","sha":"0b71c7458df0d78869668dbe38c7b11757da3193"},"sourceBranch":"main","suggestedTargetBranches":[],"targetPullRequestStates":[]}]
BACKPORT-->

Co-authored-by: Dominique Clarke <dominique.clarke@elastic.co>
This commit is contained in:
Kibana Machine 2023-04-20 11:54:34 -04:00 committed by GitHub
parent cad6f92bc2
commit a398c5e611
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
14 changed files with 333 additions and 156 deletions

View file

@ -9,7 +9,7 @@ import { populateAlertActions } from './alert_actions';
import { ActionConnector } from './types';
import { MONITOR_STATUS } from '../constants/uptime_alerts';
import { MONITOR_STATUS as SYNTHETICS_MONITOR_STATUS } from '../constants/synthetics_alerts';
import { MonitorStatusTranslations } from '../translations';
import { MonitorStatusTranslations } from './legacy_uptime/translations';
import { SyntheticsMonitorStatusTranslations } from './synthetics/translations';
describe('Legacy Alert Actions factory', () => {
@ -33,6 +33,7 @@ describe('Legacy Alert Actions factory', () => {
defaultActionMessage: MonitorStatusTranslations.defaultActionMessage,
defaultRecoveryMessage: MonitorStatusTranslations.defaultRecoveryMessage,
defaultSubjectMessage: MonitorStatusTranslations.defaultSubjectMessage,
defaultRecoverySubjectMessage: MonitorStatusTranslations.defaultRecoverySubjectMessage,
},
isLegacy: true,
});
@ -60,6 +61,70 @@ describe('Legacy Alert Actions factory', () => {
]);
});
it('generate expected action for email', async () => {
const resp = populateAlertActions({
groupId: MONITOR_STATUS.id,
defaultActions: [
{
actionTypeId: '.email',
group: 'xpack.uptime.alerts.actionGroups.monitorStatus',
params: {
dedupKey: 'always-downxpack.uptime.alerts.actionGroups.monitorStatus',
eventAction: 'trigger',
severity: 'error',
summary: MonitorStatusTranslations.defaultActionMessage,
},
id: 'f2a3b195-ed76-499a-805d-82d24d4eeba9',
},
] as unknown as ActionConnector[],
translations: {
defaultActionMessage: MonitorStatusTranslations.defaultActionMessage,
defaultRecoveryMessage: MonitorStatusTranslations.defaultRecoveryMessage,
defaultSubjectMessage: MonitorStatusTranslations.defaultSubjectMessage,
defaultRecoverySubjectMessage: MonitorStatusTranslations.defaultRecoverySubjectMessage,
},
isLegacy: true,
defaultEmail: {
to: ['test@email.com'],
},
});
expect(resp).toEqual([
{
group: 'recovered',
id: 'f2a3b195-ed76-499a-805d-82d24d4eeba9',
params: {
bcc: [],
cc: [],
kibanaFooterLink: {
path: '',
text: '',
},
message:
'Alert for monitor {{context.monitorName}} with url {{{context.monitorUrl}}} from {{context.observerLocation}} has recovered',
subject:
'Monitor {{context.monitorName}} with url {{{context.monitorUrl}}} has recovered',
to: ['test@email.com'],
},
},
{
group: 'xpack.uptime.alerts.actionGroups.monitorStatus',
id: 'f2a3b195-ed76-499a-805d-82d24d4eeba9',
params: {
bcc: [],
cc: [],
kibanaFooterLink: {
path: '',
text: '',
},
message:
'Monitor {{context.monitorName}} with url {{{context.monitorUrl}}} from {{context.observerLocation}} {{{context.statusMessage}}} The latest error message is {{{context.latestErrorMessage}}}, checked at {{context.checkedAt}}',
subject: 'Monitor {{context.monitorName}} with url {{{context.monitorUrl}}} is down',
to: ['test@email.com'],
},
},
]);
});
it('generate expected action for index', async () => {
const resp = populateAlertActions({
groupId: MONITOR_STATUS.id,
@ -80,6 +145,7 @@ describe('Legacy Alert Actions factory', () => {
defaultActionMessage: MonitorStatusTranslations.defaultActionMessage,
defaultRecoveryMessage: MonitorStatusTranslations.defaultRecoveryMessage,
defaultSubjectMessage: MonitorStatusTranslations.defaultSubjectMessage,
defaultRecoverySubjectMessage: MonitorStatusTranslations.defaultRecoverySubjectMessage,
},
isLegacy: true,
});
@ -141,6 +207,7 @@ describe('Legacy Alert Actions factory', () => {
defaultActionMessage: MonitorStatusTranslations.defaultActionMessage,
defaultRecoveryMessage: MonitorStatusTranslations.defaultRecoveryMessage,
defaultSubjectMessage: MonitorStatusTranslations.defaultSubjectMessage,
defaultRecoverySubjectMessage: MonitorStatusTranslations.defaultRecoverySubjectMessage,
},
});
expect(resp).toEqual([
@ -189,6 +256,8 @@ describe('Alert Actions factory', () => {
defaultActionMessage: SyntheticsMonitorStatusTranslations.defaultActionMessage,
defaultRecoveryMessage: SyntheticsMonitorStatusTranslations.defaultRecoveryMessage,
defaultSubjectMessage: SyntheticsMonitorStatusTranslations.defaultSubjectMessage,
defaultRecoverySubjectMessage:
SyntheticsMonitorStatusTranslations.defaultRecoverySubjectMessage,
},
});
expect(resp).toEqual([
@ -235,6 +304,8 @@ describe('Alert Actions factory', () => {
defaultActionMessage: SyntheticsMonitorStatusTranslations.defaultActionMessage,
defaultRecoveryMessage: SyntheticsMonitorStatusTranslations.defaultRecoveryMessage,
defaultSubjectMessage: SyntheticsMonitorStatusTranslations.defaultSubjectMessage,
defaultRecoverySubjectMessage:
SyntheticsMonitorStatusTranslations.defaultRecoverySubjectMessage,
},
});
expect(resp).toEqual([
@ -295,6 +366,8 @@ describe('Alert Actions factory', () => {
defaultActionMessage: SyntheticsMonitorStatusTranslations.defaultActionMessage,
defaultRecoveryMessage: SyntheticsMonitorStatusTranslations.defaultRecoveryMessage,
defaultSubjectMessage: SyntheticsMonitorStatusTranslations.defaultSubjectMessage,
defaultRecoverySubjectMessage:
SyntheticsMonitorStatusTranslations.defaultRecoverySubjectMessage,
},
});
expect(resp).toEqual([
@ -320,4 +393,69 @@ describe('Alert Actions factory', () => {
},
]);
});
it('generate expected action for email action connector', async () => {
const resp = populateAlertActions({
groupId: SYNTHETICS_MONITOR_STATUS.id,
defaultActions: [
{
actionTypeId: '.email',
group: 'xpack.synthetics.alerts.actionGroups.monitorStatus',
params: {
dedupKey: 'always-downxpack.uptime.alerts.actionGroups.monitorStatus',
eventAction: 'trigger',
severity: 'error',
summary:
'Monitor {{context.monitorName}} with url {{{context.monitorUrl}}} from {{context.observerLocation}} {{{context.statusMessage}}} The latest error message is {{{context.latestErrorMessage}}}',
},
id: 'f2a3b195-ed76-499a-805d-82d24d4eeba9',
},
] as unknown as ActionConnector[],
defaultEmail: {
to: ['test@email.com'],
},
translations: {
defaultActionMessage: SyntheticsMonitorStatusTranslations.defaultActionMessage,
defaultRecoveryMessage: SyntheticsMonitorStatusTranslations.defaultRecoveryMessage,
defaultSubjectMessage: SyntheticsMonitorStatusTranslations.defaultSubjectMessage,
defaultRecoverySubjectMessage:
SyntheticsMonitorStatusTranslations.defaultRecoverySubjectMessage,
},
});
expect(resp).toEqual([
{
group: 'recovered',
id: 'f2a3b195-ed76-499a-805d-82d24d4eeba9',
params: {
bcc: [],
cc: [],
kibanaFooterLink: {
path: '',
text: '',
},
message:
'The alert for the monitor {{context.monitorName}} checking {{{context.monitorUrl}}} from {{context.locationName}} is no longer active: {{context.recoveryReason}}.',
subject:
'The monitor {{context.monitorName}} checking {{{context.monitorUrl}}} has recovered.',
to: ['test@email.com'],
},
},
{
group: 'xpack.synthetics.alerts.actionGroups.monitorStatus',
id: 'f2a3b195-ed76-499a-805d-82d24d4eeba9',
params: {
bcc: [],
cc: [],
kibanaFooterLink: {
path: '',
text: '',
},
message:
'The monitor {{context.monitorName}} checking {{{context.monitorUrl}}} from {{context.locationName}} last ran at {{context.checkedAt}} and is {{{context.status}}}. The last error received is: {{{context.lastErrorMessage}}}.',
subject: 'The monitor {{context.monitorName}} checking {{{context.monitorUrl}}} is down.',
to: ['test@email.com'],
},
},
]);
});
});

View file

@ -36,6 +36,7 @@ interface Translations {
defaultActionMessage: string;
defaultRecoveryMessage: string;
defaultSubjectMessage: string;
defaultRecoverySubjectMessage: string;
}
export function populateAlertActions({
@ -107,6 +108,8 @@ export function populateAlertActions({
case EMAIL_ACTION_ID:
if (defaultEmail) {
action.params = getEmailActionParams(translations, defaultEmail);
recoveredAction.params = getEmailActionParams(translations, defaultEmail, true);
actions.push(recoveredAction);
}
break;
default:
@ -270,13 +273,19 @@ function getJiraActionParams({ defaultActionMessage }: Translations): JiraAction
}
function getEmailActionParams(
{ defaultActionMessage, defaultSubjectMessage }: Translations,
defaultEmail: DefaultEmail
{
defaultActionMessage,
defaultSubjectMessage,
defaultRecoverySubjectMessage,
defaultRecoveryMessage,
}: Translations,
defaultEmail: DefaultEmail,
isRecovery?: boolean
): EmailActionParams {
return {
to: defaultEmail.to,
subject: defaultSubjectMessage,
message: defaultActionMessage,
subject: isRecovery ? defaultRecoverySubjectMessage : defaultSubjectMessage,
message: isRecovery ? defaultRecoveryMessage : defaultActionMessage,
cc: defaultEmail.cc ?? [],
bcc: defaultEmail.bcc ?? [],
kibanaFooterLink: {

View file

@ -0,0 +1,160 @@
/*
* 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 { i18n } from '@kbn/i18n';
export const MonitorStatusTranslations = {
defaultActionMessage: i18n.translate(
'xpack.synthetics.alerts.monitorStatus.defaultActionMessage',
{
defaultMessage:
'Monitor {monitorName} with url {monitorUrl} from {observerLocation} {statusMessage} The latest error message is {latestErrorMessage}, checked at {checkedAt}',
values: {
monitorName: '{{context.monitorName}}',
monitorUrl: '{{{context.monitorUrl}}}',
statusMessage: '{{{context.statusMessage}}}',
latestErrorMessage: '{{{context.latestErrorMessage}}}',
observerLocation: '{{context.observerLocation}}',
checkedAt: '{{context.checkedAt}}',
},
}
),
defaultSubjectMessage: i18n.translate(
'xpack.synthetics.alerts.monitorStatus.defaultSubjectMessage',
{
defaultMessage: 'Monitor {monitorName} with url {monitorUrl} is down',
values: {
monitorName: '{{context.monitorName}}',
monitorUrl: '{{{context.monitorUrl}}}',
},
}
),
defaultRecoverySubjectMessage: i18n.translate(
'xpack.synthetics.alerts.monitorStatus.defaultRecoverySubjectMessage',
{
defaultMessage: 'Monitor {monitorName} with url {monitorUrl} has recovered',
values: {
monitorName: '{{context.monitorName}}',
monitorUrl: '{{{context.monitorUrl}}}',
},
}
),
defaultRecoveryMessage: i18n.translate(
'xpack.synthetics.alerts.monitorStatus.defaultRecoveryMessage',
{
defaultMessage:
'Alert for monitor {monitorName} with url {monitorUrl} from {observerLocation} has recovered',
values: {
monitorName: '{{context.monitorName}}',
monitorUrl: '{{{context.monitorUrl}}}',
observerLocation: '{{context.observerLocation}}',
},
}
),
name: i18n.translate('xpack.synthetics.alerts.monitorStatus.clientName', {
defaultMessage: 'Uptime monitor status',
}),
description: i18n.translate('xpack.synthetics.alerts.monitorStatus.description', {
defaultMessage: 'Alert when a monitor is down or an availability threshold is breached.',
}),
};
export const TlsTranslations = {
defaultActionMessage: i18n.translate('xpack.synthetics.alerts.tls.defaultActionMessage', {
defaultMessage: `Detected TLS certificate {commonName} from issuer {issuer} is {status}. Certificate {summary}`,
values: {
commonName: '{{context.commonName}}',
issuer: '{{context.issuer}}',
summary: '{{context.summary}}',
status: '{{context.status}}',
},
}),
defaultRecoveryMessage: i18n.translate('xpack.synthetics.alerts.tls.defaultRecoveryMessage', {
defaultMessage: `Alert for TLS certificate {commonName} from issuer {issuer} has recovered`,
values: {
commonName: '{{context.commonName}}',
issuer: '{{context.issuer}}',
},
}),
name: i18n.translate('xpack.synthetics.alerts.tls.clientName', {
defaultMessage: 'Uptime TLS',
}),
description: i18n.translate('xpack.synthetics.alerts.tls.description', {
defaultMessage: 'Alert when the TLS certificate of an Uptime monitor is about to expire.',
}),
};
export const TlsTranslationsLegacy = {
defaultActionMessage: i18n.translate('xpack.synthetics.alerts.tls.legacy.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.synthetics.alerts.tls.legacy.clientName', {
defaultMessage: 'Uptime TLS (Legacy)',
}),
description: i18n.translate('xpack.synthetics.alerts.tls.legacy.description', {
defaultMessage:
'Alert when the TLS certificate of an Uptime monitor is about to expire. This alert will be deprecated in a future version.',
}),
};
export const DurationAnomalyTranslations = {
defaultActionMessage: i18n.translate(
'xpack.synthetics.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: '{{context.severity}}',
anomalyStartTimestamp: '{{context.anomalyStartTimestamp}}',
monitor: '{{context.monitor}}',
monitorUrl: '{{{context.monitorUrl}}}',
slowestAnomalyResponse: '{{context.slowestAnomalyResponse}}',
expectedResponseTime: '{{context.expectedResponseTime}}',
severityScore: '{{context.severityScore}}',
observerLocation: '{{context.observerLocation}}',
},
}
),
defaultRecoveryMessage: i18n.translate(
'xpack.synthetics.alerts.durationAnomaly.defaultRecoveryMessage',
{
defaultMessage: `Alert for abnormal ({severity} level) response time detected on monitor {monitor} with url {monitorUrl} from location {observerLocation} at {anomalyStartTimestamp} has recovered`,
values: {
severity: '{{context.severity}}',
anomalyStartTimestamp: '{{context.anomalyStartTimestamp}}',
monitor: '{{context.monitor}}',
monitorUrl: '{{{context.monitorUrl}}}',
observerLocation: '{{context.observerLocation}}',
},
}
),
name: i18n.translate('xpack.synthetics.alerts.durationAnomaly.clientName', {
defaultMessage: 'Uptime Duration Anomaly',
}),
description: i18n.translate('xpack.synthetics.alerts.durationAnomaly.description', {
defaultMessage: 'Alert when the Uptime monitor duration is anomalous.',
}),
};

View file

@ -33,6 +33,16 @@ export const SyntheticsMonitorStatusTranslations = {
},
}
),
defaultRecoverySubjectMessage: i18n.translate(
'xpack.synthetics.alerts.syntheticsMonitorStatus.defaultRecoverySubjectMessage',
{
defaultMessage: 'The monitor {monitorName} checking {monitorUrl} has recovered.',
values: {
monitorName: '{{context.monitorName}}',
monitorUrl: '{{{context.monitorUrl}}}',
},
}
),
defaultRecoveryMessage: i18n.translate(
'xpack.synthetics.alerts.syntheticsMonitorStatus.defaultRecoveryMessage',
{

View file

@ -20,146 +20,3 @@ export const VALUE_MUST_BE_AN_INTEGER = i18n.translate(
defaultMessage: 'Value must be an integer.',
}
);
export const MonitorStatusTranslations = {
defaultActionMessage: i18n.translate(
'xpack.synthetics.alerts.monitorStatus.defaultActionMessage',
{
defaultMessage:
'Monitor {monitorName} with url {monitorUrl} from {observerLocation} {statusMessage} The latest error message is {latestErrorMessage}, checked at {checkedAt}',
values: {
monitorName: '{{context.monitorName}}',
monitorUrl: '{{{context.monitorUrl}}}',
statusMessage: '{{{context.statusMessage}}}',
latestErrorMessage: '{{{context.latestErrorMessage}}}',
observerLocation: '{{context.observerLocation}}',
checkedAt: '{{context.checkedAt}}',
},
}
),
defaultSubjectMessage: i18n.translate(
'xpack.synthetics.alerts.monitorStatus.defaultSubjectMessage',
{
defaultMessage: 'Monitor {monitorName} with url {monitorUrl} is down',
values: {
monitorName: '{{context.monitorName}}',
monitorUrl: '{{{context.monitorUrl}}}',
},
}
),
defaultRecoveryMessage: i18n.translate(
'xpack.synthetics.alerts.monitorStatus.defaultRecoveryMessage',
{
defaultMessage:
'Alert for monitor {monitorName} with url {monitorUrl} from {observerLocation} has recovered',
values: {
monitorName: '{{context.monitorName}}',
monitorUrl: '{{{context.monitorUrl}}}',
observerLocation: '{{context.observerLocation}}',
},
}
),
name: i18n.translate('xpack.synthetics.alerts.monitorStatus.clientName', {
defaultMessage: 'Uptime monitor status',
}),
description: i18n.translate('xpack.synthetics.alerts.monitorStatus.description', {
defaultMessage: 'Alert when a monitor is down or an availability threshold is breached.',
}),
};
export const TlsTranslations = {
defaultActionMessage: i18n.translate('xpack.synthetics.alerts.tls.defaultActionMessage', {
defaultMessage: `Detected TLS certificate {commonName} from issuer {issuer} is {status}. Certificate {summary}`,
values: {
commonName: '{{context.commonName}}',
issuer: '{{context.issuer}}',
summary: '{{context.summary}}',
status: '{{context.status}}',
},
}),
defaultRecoveryMessage: i18n.translate('xpack.synthetics.alerts.tls.defaultRecoveryMessage', {
defaultMessage: `Alert for TLS certificate {commonName} from issuer {issuer} has recovered`,
values: {
commonName: '{{context.commonName}}',
issuer: '{{context.issuer}}',
},
}),
name: i18n.translate('xpack.synthetics.alerts.tls.clientName', {
defaultMessage: 'Uptime TLS',
}),
description: i18n.translate('xpack.synthetics.alerts.tls.description', {
defaultMessage: 'Alert when the TLS certificate of an Uptime monitor is about to expire.',
}),
};
export const TlsTranslationsLegacy = {
defaultActionMessage: i18n.translate('xpack.synthetics.alerts.tls.legacy.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.synthetics.alerts.tls.legacy.clientName', {
defaultMessage: 'Uptime TLS (Legacy)',
}),
description: i18n.translate('xpack.synthetics.alerts.tls.legacy.description', {
defaultMessage:
'Alert when the TLS certificate of an Uptime monitor is about to expire. This alert will be deprecated in a future version.',
}),
};
export const DurationAnomalyTranslations = {
defaultActionMessage: i18n.translate(
'xpack.synthetics.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: '{{context.severity}}',
anomalyStartTimestamp: '{{context.anomalyStartTimestamp}}',
monitor: '{{context.monitor}}',
monitorUrl: '{{{context.monitorUrl}}}',
slowestAnomalyResponse: '{{context.slowestAnomalyResponse}}',
expectedResponseTime: '{{context.expectedResponseTime}}',
severityScore: '{{context.severityScore}}',
observerLocation: '{{context.observerLocation}}',
},
}
),
defaultRecoveryMessage: i18n.translate(
'xpack.synthetics.alerts.durationAnomaly.defaultRecoveryMessage',
{
defaultMessage: `Alert for abnormal ({severity} level) response time detected on monitor {monitor} with url {monitorUrl} from location {observerLocation} at {anomalyStartTimestamp} has recovered`,
values: {
severity: '{{context.severity}}',
anomalyStartTimestamp: '{{context.anomalyStartTimestamp}}',
monitor: '{{context.monitor}}',
monitorUrl: '{{{context.monitorUrl}}}',
observerLocation: '{{context.observerLocation}}',
},
}
),
name: i18n.translate('xpack.synthetics.alerts.durationAnomaly.clientName', {
defaultMessage: 'Uptime Duration Anomaly',
}),
description: i18n.translate('xpack.synthetics.alerts.durationAnomaly.description', {
defaultMessage: 'Alert when the Uptime monitor duration is anomalous.',
}),
};

View file

@ -14,7 +14,7 @@ import { ObservabilityRuleTypeModel } from '@kbn/observability-plugin/public';
import { AlertTypeInitializer } from '.';
import { getMonitorRouteFromMonitorId } from '../../../../common/utils/get_monitor_url';
import { CLIENT_ALERT_TYPES } from '../../../../common/constants/uptime_alerts';
import { DurationAnomalyTranslations } from '../../../../common/translations';
import { DurationAnomalyTranslations } from '../../../../common/rules/legacy_uptime/translations';
const { defaultActionMessage, defaultRecoveryMessage, description } = DurationAnomalyTranslations;
const DurationAnomalyAlert = React.lazy(() => import('./lazy_wrapper/duration_anomaly'));

View file

@ -20,7 +20,7 @@ import { ObservabilityRuleTypeModel } from '@kbn/observability-plugin/public';
import { ValidationResult } from '@kbn/triggers-actions-ui-plugin/public';
import { AlertTypeInitializer } from '.';
import { getMonitorRouteFromMonitorId } from '../../../../common/utils/get_monitor_url';
import { MonitorStatusTranslations } from '../../../../common/translations';
import { MonitorStatusTranslations } from '../../../../common/rules/legacy_uptime/translations';
import { CLIENT_ALERT_TYPES } from '../../../../common/constants/uptime_alerts';
const { defaultActionMessage, defaultRecoveryMessage, description } = MonitorStatusTranslations;

View file

@ -12,7 +12,7 @@ import type { RuleTypeParamsExpressionProps } from '@kbn/triggers-actions-ui-plu
import { ValidationResult } from '@kbn/triggers-actions-ui-plugin/public';
import { TLSParams } from '../../../../common/runtime_types/alerts/tls';
import { CLIENT_ALERT_TYPES } from '../../../../common/constants/uptime_alerts';
import { TlsTranslations } from '../../../../common/translations';
import { TlsTranslations } from '../../../../common/rules/legacy_uptime/translations';
import { AlertTypeInitializer } from '.';
import { CERTIFICATES_ROUTE } from '../../../../common/constants/ui';

View file

@ -8,7 +8,7 @@
import React from 'react';
import { RuleTypeModel } from '@kbn/triggers-actions-ui-plugin/public';
import { CLIENT_ALERT_TYPES } from '../../../../common/constants/uptime_alerts';
import { TlsTranslationsLegacy } from '../../../../common/translations';
import { TlsTranslationsLegacy } from '../../../../common/rules/legacy_uptime/translations';
import { AlertTypeInitializer } from '.';
const { defaultActionMessage, description } = TlsTranslationsLegacy;

View file

@ -7,7 +7,7 @@
import type { ActionType, AsApiContract, Rule } from '@kbn/triggers-actions-ui-plugin/public';
import { RuleTypeParams } from '@kbn/alerting-plugin/common';
import { MonitorStatusTranslations } from '../../../../common/translations';
import { MonitorStatusTranslations } from '../../../../common/rules/legacy_uptime/translations';
import { ActionConnector } from '../../../../common/rules/types';
import { CLIENT_ALERT_TYPES, MONITOR_STATUS } from '../../../../common/constants/uptime_alerts';
import { apiService } from './utils';
@ -86,6 +86,7 @@ export const createAlert = async ({
defaultActionMessage: MonitorStatusTranslations.defaultActionMessage,
defaultRecoveryMessage: MonitorStatusTranslations.defaultRecoveryMessage,
defaultSubjectMessage: MonitorStatusTranslations.defaultSubjectMessage,
defaultRecoverySubjectMessage: MonitorStatusTranslations.defaultRecoverySubjectMessage,
},
isLegacy: true,
});

View file

@ -29,7 +29,7 @@ import { UptimeAlertTypeFactory } from './types';
import { Ping } from '../../../../common/runtime_types/ping';
import { getMLJobId } from '../../../../common/lib';
import { DurationAnomalyTranslations as CommonDurationAnomalyTranslations } from '../../../../common/translations';
import { DurationAnomalyTranslations as CommonDurationAnomalyTranslations } from '../../../../common/rules/legacy_uptime/translations';
import { getMonitorRouteFromMonitorId } from '../../../../common/utils/get_monitor_url';
import { ALERT_REASON_MSG, ACTION_VARIABLES, VIEW_IN_APP_URL } from './action_variables';

View file

@ -21,7 +21,7 @@ import { CLIENT_ALERT_TYPES, TLS } from '../../../../common/constants/uptime_ale
import { DYNAMIC_SETTINGS_DEFAULTS } from '../../../../common/constants';
import { Cert, CertResult } from '../../../../common/runtime_types';
import { commonStateTranslations, tlsTranslations } from './translations';
import { TlsTranslations } from '../../../../common/translations';
import { TlsTranslations } from '../../../../common/rules/legacy_uptime/translations';
import { savedObjectsAdapter } from '../saved_objects/saved_objects';
import { UptimeEsClient } from '../lib';

View file

@ -114,6 +114,8 @@ export class StatusAlertService {
defaultActionMessage: SyntheticsMonitorStatusTranslations.defaultActionMessage,
defaultRecoveryMessage: SyntheticsMonitorStatusTranslations.defaultRecoveryMessage,
defaultSubjectMessage: SyntheticsMonitorStatusTranslations.defaultSubjectMessage,
defaultRecoverySubjectMessage:
SyntheticsMonitorStatusTranslations.defaultRecoverySubjectMessage,
},
});
}

View file

@ -6,7 +6,7 @@
*/
import expect from '@kbn/expect';
import { MonitorStatusTranslations } from '@kbn/synthetics-plugin/common/translations';
import { MonitorStatusTranslations } from '@kbn/synthetics-plugin/common/rules/legacy_uptime/translations';
import { FtrProviderContext } from '../../../ftr_provider_context';
import { deleteUptimeSettingsObject } from '../../../../functional/apps/uptime';