[Synthetics] Clean up common dir (#162692)

This commit is contained in:
Shahzad 2023-07-31 16:22:49 +02:00 committed by GitHub
parent 036751463d
commit fa01462487
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
43 changed files with 57 additions and 953 deletions

View file

@ -1,27 +0,0 @@
/*
* 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.
*/
const MINUTE = 1000 * 60;
const HOUR = MINUTE * 60;
const DAY = 24 * 60 * 60 * 1000;
const WEEK = DAY * 7;
const MONTH = WEEK * 4;
/**
* These constants are used by the charting code to determine
* what label should be applied to chart axes so as to help users
* understand the timeseries data they're being shown.
*/
export const CHART_FORMAT_LIMITS = {
DAY,
EIGHT_MINUTES: MINUTE * 8,
FOUR_YEARS: 4 * 12 * 4 * WEEK,
THIRTY_SIX_HOURS: HOUR * 36,
THREE_WEEKS: WEEK * 3,
SIX_MONTHS: MONTH * 7,
NINE_DAYS: DAY * 9,
};

View file

@ -5,12 +5,9 @@
* 2.0.
*/
export { CHART_FORMAT_LIMITS } from './chart_format_limits';
export { CLIENT_DEFAULTS } from './client_defaults';
export { CONTEXT_DEFAULTS } from './context_defaults';
export * from './capabilities';
export * from './settings_defaults';
export { QUERY } from './query';
export * from './ui';
export * from './rest_api';
export * from './synthetics';

View file

@ -1,28 +0,0 @@
/*
* 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.
*/
/**
* These are the fields that will be used when users enter simple_query_string
* searches into the FilterBar component.
*/
export const QUERY = {
DEFAULT_BUCKET_COUNT: 25,
// the maximum buckets allowed by most aggregations
DEFAULT_AGGS_CAP: 10000,
SIMPLE_QUERY_STRING_FIELDS: [
'monitor.id',
'monitor.url',
'monitor.type',
'monitor.status',
'monitor.name',
'url.full',
'url.path',
'url.scheme',
'url.domain',
'error.type',
],
};

View file

@ -1,37 +0,0 @@
/*
* 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 enum API_URLS {
DYNAMIC_SETTINGS = `/internal/uptime/dynamic_settings`,
INDEX_STATUS = '/internal/uptime/index_status',
MONITOR_LIST = `/internal/uptime/monitor/list`,
MONITOR_LOCATIONS = `/internal/uptime/monitor/locations`,
MONITOR_DURATION = `/internal/uptime/monitor/duration`,
MONITOR_DETAILS = `/internal/uptime/monitor/details`,
MONITOR_STATUS = `/internal/uptime/monitor/status`,
NETWORK_EVENTS = `/internal/uptime/network_events`,
PINGS = '/internal/uptime/pings',
PING_HISTOGRAM = `/internal/uptime/ping/histogram`,
SNAPSHOT_COUNT = `/internal/uptime/snapshot/count`,
SYNTHETICS_SUCCESSFUL_CHECK = `/internal/uptime/synthetics/check/success`,
JOURNEY = `/internal/uptime/journey/{checkGroup}`,
JOURNEY_FAILED_STEPS = `/internal/uptime/journeys/failed_steps`,
JOURNEY_SCREENSHOT = `/internal/uptime/journey/screenshot/{checkGroup}/{stepIndex}`,
JOURNEY_SCREENSHOT_BLOCKS = `/internal/uptime/journey/screenshot/block`,
ML_MODULE_JOBS = `/internal/ml/modules/jobs_exist/`,
ML_SETUP_MODULE = '/internal/ml/modules/setup/',
ML_DELETE_JOB = `/internal/ml/jobs/delete_jobs`,
ML_CAPABILITIES = '/internal/ml/ml_capabilities',
ML_ANOMALIES_RESULT = `/internal/ml/results/anomalies_table_data`,
RULE_CONNECTORS = '/api/actions/connectors',
CREATE_RULE = '/api/alerting/rule',
DELETE_RULE = '/api/alerting/rule/',
RULES_FIND = '/api/alerting/rules/_find',
CONNECTOR_TYPES = '/api/actions/connector_types',
}

View file

@ -45,4 +45,11 @@ export enum SYNTHETICS_API_URLS {
SYNTHETICS_MONITORS_PROJECT = '/api/synthetics/project/{projectName}/monitors',
SYNTHETICS_MONITORS_PROJECT_UPDATE = '/api/synthetics/project/{projectName}/monitors/_bulk_update',
SYNTHETICS_MONITORS_PROJECT_DELETE = '/api/synthetics/project/{projectName}/monitors/_bulk_delete',
DYNAMIC_SETTINGS = `/internal/uptime/dynamic_settings`,
RULE_CONNECTORS = '/api/actions/connectors',
CREATE_RULE = '/api/alerting/rule',
DELETE_RULE = '/api/alerting/rule/',
RULES_FIND = '/api/alerting/rules/_find',
CONNECTOR_TYPES = '/api/actions/connector_types',
}

View file

@ -42,8 +42,6 @@ export const SYNTHETIC_CHECK_STEPS_ROUTE = '/journey/:checkGroupId/steps';
export const TEST_RUN_DETAILS_ROUTE = '/monitor/:monitorId/test-run/:checkGroupId';
export const MAPPING_ERROR_ROUTE = '/mapping-error';
export const ERROR_DETAILS_ROUTE = '/monitor/:monitorId/errors/:errorStateId';
export enum STATUS {
@ -61,10 +59,6 @@ export enum MONITOR_TYPES {
BROWSER = 'browser',
}
export const ML_JOB_ID = 'high_latency_by_geo';
export const ML_MODULE_ID = 'uptime_heartbeat';
export const UNNAMED_LOCATION = 'Unnamed-location';
export enum CERT_STATUS {
@ -74,15 +68,6 @@ export enum CERT_STATUS {
TOO_OLD = 'TOO_OLD',
}
export const KQL_SYNTAX_LOCAL_STORAGE = 'xpack.uptime.kql.syntax';
export const FILTER_FIELDS = {
TAGS: 'tags',
PORT: 'url.port',
LOCATION: 'observer.geo.name',
TYPE: 'monitor.type',
};
export const SYNTHETICS_INDEX_PATTERN = 'synthetics-*';
export const LICENSE_NOT_ACTIVE_ERROR = 'License not active';

View file

@ -1,49 +0,0 @@
/*
* 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 { ActionGroup } from '@kbn/alerting-plugin/common';
export type MonitorStatusActionGroup =
ActionGroup<'xpack.uptime.alerts.actionGroups.monitorStatus'>;
export type TLSLegacyActionGroup = ActionGroup<'xpack.uptime.alerts.actionGroups.tls'>;
export type TLSActionGroup = ActionGroup<'xpack.uptime.alerts.actionGroups.tlsCertificate'>;
export type DurationAnomalyActionGroup =
ActionGroup<'xpack.uptime.alerts.actionGroups.durationAnomaly'>;
export const MONITOR_STATUS: MonitorStatusActionGroup = {
id: 'xpack.uptime.alerts.actionGroups.monitorStatus',
name: 'Uptime Down Monitor',
};
export const TLS_LEGACY: TLSLegacyActionGroup = {
id: 'xpack.uptime.alerts.actionGroups.tls',
name: 'Uptime TLS Alert (Legacy)',
};
export const TLS: TLSActionGroup = {
id: 'xpack.uptime.alerts.actionGroups.tlsCertificate',
name: 'Uptime TLS Alert',
};
export const DURATION_ANOMALY: DurationAnomalyActionGroup = {
id: 'xpack.uptime.alerts.actionGroups.durationAnomaly',
name: 'Uptime Duration Anomaly',
};
export const CLIENT_ALERT_TYPES = {
MONITOR_STATUS: 'xpack.uptime.alerts.monitorStatus',
TLS_LEGACY: 'xpack.uptime.alerts.tls',
TLS: 'xpack.uptime.alerts.tlsCertificate',
DURATION_ANOMALY: 'xpack.uptime.alerts.durationAnomaly',
};
export const UPTIME_RULE_TYPES = [
'xpack.uptime.alerts.tls',
'xpack.uptime.alerts.tlsCertificate',
'xpack.uptime.alerts.monitorStatus',
'xpack.uptime.alerts.durationAnomaly',
];

View file

@ -1,3 +0,0 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`assertCloseTo throws an error when expected value is outside of precision range 1`] = `"expected [12500] to be within 100 of 10000"`;

View file

@ -1,22 +0,0 @@
/*
* 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 { assertCloseTo } from './assert_close_to';
describe('assertCloseTo', () => {
it('does not throw an error when expected value is correct', () => {
assertCloseTo(10000, 10001, 100);
});
it('does not throw an error when expected value is under actual, but within precision threshold', () => {
assertCloseTo(10000, 9875, 300);
});
it('throws an error when expected value is outside of precision range', () => {
expect(() => assertCloseTo(10000, 12500, 100)).toThrowErrorMatchingSnapshot();
});
});

View file

@ -1,17 +0,0 @@
/*
* 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 assertCloseTo = (actual: number, expected: number, precision: number) => {
if (Math.abs(expected - actual) > precision) {
throw new Error(`expected [${expected}] to be within ${precision} of ${actual}`);
}
// if actual is undefined above math condition will be NAN and it will be always false
if (actual === undefined) {
throw new Error(`expected close to [${expected}] but got [${actual}]`);
}
};

View file

@ -1,21 +0,0 @@
/*
* 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 { getHistogramInterval } from './get_histogram_interval';
import { assertCloseTo } from './assert_close_to';
describe('getHistogramInterval', () => {
it('specifies the interval necessary to divide a given timespan into equal buckets, rounded to the nearest integer, expressed in ms', () => {
const interval = getHistogramInterval('now-15m', 'now', 10);
assertCloseTo(interval, 90000, 20);
});
it('will supply a default constant value for bucketCount when none is provided', () => {
const interval = getHistogramInterval('now-15m', 'now');
assertCloseTo(interval, 36000, 20);
});
});

View file

@ -1,46 +0,0 @@
/*
* 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 DateMath from '@kbn/datemath';
import { QUERY } from '../constants';
export const parseRelativeDate = (dateStr: string, options = {}) => {
// We need this this parsing because if user selects This week or this date
// That represents end date in future, if week or day is still in the middle
// Uptime data can never be collected in future, so we will reset date to now
// in That case. Example case we select this week range will be to='now/w' and from = 'now/w';
const parsedDate = DateMath.parse(dateStr, options);
const dateTimestamp = parsedDate?.valueOf() ?? 0;
if (dateTimestamp > Date.now()) {
return DateMath.parse('now');
}
return parsedDate;
};
export const getHistogramInterval = (
dateRangeStart: string,
dateRangeEnd: string,
bucketCount?: number
): number => {
const from = parseRelativeDate(dateRangeStart);
// roundUp is required for relative date like now/w to get the end of the week
const to = parseRelativeDate(dateRangeEnd, { roundUp: true });
if (from === undefined) {
throw Error('Invalid dateRangeStart value');
}
if (to === undefined) {
throw Error('Invalid dateRangeEnd value');
}
const interval = Math.round(
(to.valueOf() - from.valueOf()) / (bucketCount || QUERY.DEFAULT_BUCKET_COUNT)
);
// Interval can never be zero, if it's 0 we return at least 1ms interval
return interval > 0 ? interval : 1;
};

View file

@ -7,5 +7,3 @@
export * from './combine_filters_and_user_search';
export * from './stringify_kueries';
export { getMLJobId } from './ml';

View file

@ -1,35 +0,0 @@
/*
* 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 { getMLJobId } from './ml';
describe('ML Anomaly API', () => {
it('it generates a lowercase job id', async () => {
const monitorId = 'ABC1334haa';
const jobId = getMLJobId(monitorId);
expect(jobId).toEqual(jobId.toLowerCase());
});
it('should truncate long monitor IDs', () => {
const longAndWeirdMonitorId =
'https://auto-mmmmxhhhhhccclongAndWeirdMonitorId123yyyyyrereauto-xcmpa-1345555454646';
expect(getMLJobId(longAndWeirdMonitorId)).toHaveLength(64);
});
it('should remove special characters and replace them with underscore', () => {
const monIdSpecialChars = '/ ? , " < > | * a';
const jobId = getMLJobId(monIdSpecialChars);
const format = /[/?,"<>|*]+/;
expect(format.test(jobId)).toBe(false);
});
});

View file

@ -1,28 +0,0 @@
/*
* 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 { ML_JOB_ID } from '../constants';
export const getJobPrefix = (monitorId: string) => {
// ML App doesn't support upper case characters in job name
// Also Spaces and the characters / ? , " < > | * are not allowed
// so we will replace all special chars with _
const prefix = monitorId.replace(/[^A-Z0-9]+/gi, '_').toLowerCase();
// ML Job ID can't be greater than 64 length, so will be substring it, and hope
// At such big length, there is minimum chance of having duplicate monitor id
// Subtracting ML_JOB_ID constant as well
const postfix = '_' + ML_JOB_ID;
if ((prefix + postfix).length > 64) {
return prefix.substring(0, 64 - postfix.length) + '_';
}
return prefix + '_';
};
export const getMLJobId = (monitorId: string) => `${getJobPrefix(monitorId)}${ML_JOB_ID}`;

View file

@ -7,237 +7,9 @@
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 './legacy_uptime/translations';
import { SyntheticsMonitorStatusTranslations } from './synthetics/translations';
describe('Legacy Alert Actions factory', () => {
it('generate expected action for pager duty', async () => {
const resp = populateAlertActions({
groupId: MONITOR_STATUS.id,
defaultActions: [
{
actionTypeId: '.pagerduty',
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,
});
expect(resp).toEqual([
{
group: 'recovered',
id: 'f2a3b195-ed76-499a-805d-82d24d4eeba9',
params: {
dedupKey: expect.any(String),
eventAction: 'resolve',
summary:
'Alert for monitor {{context.monitorName}} with url {{{context.monitorUrl}}} from {{context.observerLocation}} has recovered',
},
},
{
group: 'xpack.uptime.alerts.actionGroups.monitorStatus',
id: 'f2a3b195-ed76-499a-805d-82d24d4eeba9',
params: {
dedupKey: expect.any(String),
eventAction: 'trigger',
severity: 'error',
summary: MonitorStatusTranslations.defaultActionMessage,
},
},
]);
});
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',
messageHTML: null,
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}}',
messageHTML: null,
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,
defaultActions: [
{
actionTypeId: '.index',
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,
});
expect(resp).toEqual([
{
group: 'recovered',
id: 'f2a3b195-ed76-499a-805d-82d24d4eeba9',
params: {
documents: [
{
latestErrorMessage: '',
monitorName: '{{context.monitorName}}',
monitorUrl: '{{{context.monitorUrl}}}',
observerLocation: '{{context.observerLocation}}',
statusMessage:
'Alert for monitor {{context.monitorName}} with url {{{context.monitorUrl}}} from {{context.observerLocation}} has recovered',
},
],
indexOverride: null,
},
},
{
group: 'xpack.uptime.alerts.actionGroups.monitorStatus',
id: 'f2a3b195-ed76-499a-805d-82d24d4eeba9',
params: {
documents: [
{
latestErrorMessage: '{{{context.latestErrorMessage}}}',
monitorName: '{{context.monitorName}}',
monitorUrl: '{{{context.monitorUrl}}}',
observerLocation: '{{context.observerLocation}}',
statusMessage: '{{{context.statusMessage}}}',
},
],
indexOverride: null,
},
},
]);
});
it('generate expected action for slack action connector', async () => {
const resp = populateAlertActions({
groupId: MONITOR_STATUS.id,
defaultActions: [
{
actionTypeId: '.pagerduty',
group: 'xpack.uptime.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[],
translations: {
defaultActionMessage: MonitorStatusTranslations.defaultActionMessage,
defaultRecoveryMessage: MonitorStatusTranslations.defaultRecoveryMessage,
defaultSubjectMessage: MonitorStatusTranslations.defaultSubjectMessage,
defaultRecoverySubjectMessage: MonitorStatusTranslations.defaultRecoverySubjectMessage,
},
isLegacy: true,
});
expect(resp).toEqual([
{
group: 'recovered',
id: 'f2a3b195-ed76-499a-805d-82d24d4eeba9',
params: {
dedupKey: expect.any(String),
eventAction: 'resolve',
summary:
'Alert for monitor {{context.monitorName}} with url {{{context.monitorUrl}}} from {{context.observerLocation}} has recovered',
},
},
{
group: 'xpack.uptime.alerts.actionGroups.monitorStatus',
id: 'f2a3b195-ed76-499a-805d-82d24d4eeba9',
params: {
dedupKey: expect.any(String),
eventAction: 'trigger',
severity: 'error',
summary: MonitorStatusTranslations.defaultActionMessage,
},
},
]);
});
});
describe('Alert Actions factory', () => {
it('generate expected action for pager duty', async () => {
const resp = populateAlertActions({

View file

@ -44,13 +44,11 @@ export function populateAlertActions({
defaultEmail,
groupId,
translations,
isLegacy = false,
}: {
groupId: string;
defaultActions: ActionConnector[];
defaultEmail?: DefaultEmail;
translations: Translations;
isLegacy?: boolean;
}) {
const actions: RuleAction[] = [];
defaultActions.forEach((aId) => {
@ -58,13 +56,11 @@ export function populateAlertActions({
id: aId.id,
group: groupId,
params: {},
frequency: !isLegacy
? {
notifyWhen: 'onActionGroupChange',
throttle: null,
summary: false,
}
: undefined,
frequency: {
notifyWhen: 'onActionGroupChange',
throttle: null,
summary: false,
},
};
const recoveredAction: RuleAction = {
@ -73,13 +69,11 @@ export function populateAlertActions({
params: {
message: translations.defaultRecoveryMessage,
},
frequency: !isLegacy
? {
notifyWhen: 'onActionGroupChange',
throttle: null,
summary: false,
}
: undefined,
frequency: {
notifyWhen: 'onActionGroupChange',
throttle: null,
summary: false,
},
};
switch (aId.actionTypeId) {
@ -95,8 +89,8 @@ export function populateAlertActions({
actions.push(recoveredAction);
break;
case INDEX_ACTION_ID:
action.params = getIndexActionParams(translations, false, isLegacy);
recoveredAction.params = getIndexActionParams(translations, true, isLegacy);
action.params = getIndexActionParams(translations, false);
recoveredAction.params = getIndexActionParams(translations, true);
actions.push(recoveredAction);
break;
case SERVICE_NOW_ACTION_ID:
@ -138,41 +132,7 @@ export function populateAlertActions({
return actions;
}
function getIndexActionParams(
translations: Translations,
recovery = false,
isLegacy = false
): IndexActionParams {
if (isLegacy && recovery) {
return {
documents: [
{
monitorName: '{{context.monitorName}}',
monitorUrl: '{{{context.monitorUrl}}}',
statusMessage: translations.defaultRecoveryMessage,
latestErrorMessage: '',
observerLocation: '{{context.observerLocation}}',
},
],
indexOverride: null,
};
}
if (isLegacy) {
return {
documents: [
{
monitorName: '{{context.monitorName}}',
monitorUrl: '{{{context.monitorUrl}}}',
statusMessage: '{{{context.statusMessage}}}',
latestErrorMessage: '{{{context.latestErrorMessage}}}',
observerLocation: '{{context.observerLocation}}',
},
],
indexOverride: null,
};
}
function getIndexActionParams(translations: Translations, recovery = false): IndexActionParams {
if (recovery) {
return {
documents: [

View file

@ -1,160 +0,0 @@
/*
* 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

@ -1,22 +0,0 @@
/*
* 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 VALUE_MUST_BE_GREATER_THAN_ZERO = i18n.translate(
'xpack.synthetics.settings.invalid.error',
{
defaultMessage: 'Value must be greater than 0.',
}
);
export const VALUE_MUST_BE_AN_INTEGER = i18n.translate(
'xpack.synthetics.settings.invalid.nanError',
{
defaultMessage: 'Value must be an integer.',
}
);

View file

@ -5,7 +5,5 @@
* 2.0.
*/
export * from './monitor_duration';
export * from './synthetics_monitor';
export * from './monitor_validation';
export * from './integration_deprecation';

View file

@ -1,26 +0,0 @@
/*
* 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.
*/
/** Represents the average monitor duration ms at a point in time. */
export interface MonitorDurationAveragePoint {
/** The timeseries value for this point. */
x: number;
/** The average duration ms for the monitor. */
y?: number | null;
}
export interface LocationDurationLine {
name: string;
line: MonitorDurationAveragePoint[];
}
/** The data used to populate the monitor charts. */
export interface MonitorDurationResult {
/** The average values for the monitor duration. */
locationDurationLines: LocationDurationLine[];
}

View file

@ -1,40 +0,0 @@
/*
* 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)}`;
};
export const getMonitorRouteFromMonitorId = ({
monitorId,
dateRangeStart,
dateRangeEnd,
filters = {},
}: {
monitorId: string;
dateRangeStart: string;
dateRangeEnd: string;
filters?: Record<string, string[]>;
}) =>
format({
pathname: `/app/uptime/monitor/${btoa(monitorId)}`,
query: {
dateRangeEnd,
dateRangeStart,
...(Object.keys(filters).length
? { filters: JSON.stringify(Object.keys(filters).map((key) => [key, filters[key]])) }
: {}),
},
});

View file

@ -4,9 +4,11 @@
* 2.0; you may not use this file except in compliance with the Elastic License
* 2.0.
*/
import { stringify } from 'querystring';
import { format } from './get_monitor_url';
const format = ({ pathname, query }: { pathname: string; query: Record<string, any> }): string => {
return `${pathname}?${stringify(query)}`;
};
export const getSyntheticsErrorRouteFromMonitorId = ({
configId,
stateId,

View file

@ -19,10 +19,10 @@ import {
LocationMonitorsResponse,
LocationMonitorsType,
} from '../../../../../common/runtime_types';
import { API_URLS, SYNTHETICS_API_URLS } from '../../../../../common/constants';
import { SYNTHETICS_API_URLS } from '../../../../../common/constants';
import { LocationMonitor } from '.';
const apiPath = API_URLS.DYNAMIC_SETTINGS;
const apiPath = SYNTHETICS_API_URLS.DYNAMIC_SETTINGS;
interface SaveApiRequest {
settings: DynamicSettings;
@ -51,7 +51,7 @@ export const fetchLocationMonitors = async (): Promise<LocationMonitor[]> => {
export type ActionConnector = Omit<RawActionConnector, 'secrets'>;
export const fetchConnectors = async (): Promise<ActionConnector[]> => {
const response = (await apiService.get(API_URLS.RULE_CONNECTORS)) as Array<
const response = (await apiService.get(SYNTHETICS_API_URLS.RULE_CONNECTORS)) as Array<
AsApiContract<ActionConnector>
>;
return response.map(
@ -76,7 +76,7 @@ export const fetchConnectors = async (): Promise<ActionConnector[]> => {
};
export const fetchActionTypes = async (): Promise<ActionType[]> => {
const response = (await apiService.get(API_URLS.CONNECTOR_TYPES, {
const response = (await apiService.get(SYNTHETICS_API_URLS.CONNECTOR_TYPES, {
feature_id: 'uptime',
})) as Array<AsApiContract<ActionType>>;
return response.map<ActionType>(

View file

@ -10,10 +10,15 @@ import { syntheticsMonitorType, syntheticsParamType } from '../common/types/save
import { SYNTHETICS_RULE_TYPES } from '../common/constants/synthetics_alerts';
import { privateLocationsSavedObjectName } from '../common/saved_objects/private_locations';
import { PLUGIN } from '../common/constants/plugin';
import { UPTIME_RULE_TYPES } from '../common/constants/uptime_alerts';
import { settingsObjectType } from './saved_objects/uptime_settings';
import { syntheticsApiKeyObjectType } from './saved_objects/service_api_key';
const UPTIME_RULE_TYPES = [
'xpack.uptime.alerts.tls',
'xpack.uptime.alerts.tlsCertificate',
'xpack.uptime.alerts.monitorStatus',
'xpack.uptime.alerts.durationAnomaly',
];
export const uptimeFeature = {
id: PLUGIN.ID,
name: PLUGIN.NAME,

View file

@ -18,7 +18,7 @@ import { RequestStatus } from '@kbn/inspector-plugin/common';
import { InspectResponse } from '@kbn/observability-plugin/typings/common';
import { enableInspectEsQueries } from '@kbn/observability-plugin/common';
import { getInspectResponse } from '@kbn/observability-shared-plugin/common';
import { API_URLS } from '../common/constants';
import { SYNTHETICS_API_URLS } from '../common/constants';
import { SyntheticsServerSetup } from './types';
import { savedObjectsAdapter } from './saved_objects/saved_objects';
@ -168,7 +168,7 @@ export class UptimeEsClient {
async getInspectData(path: string) {
const isInspectorEnabled = await this.getInspectEnabled();
const showInspectData =
(isInspectorEnabled || this.isDev) && path !== API_URLS.DYNAMIC_SETTINGS;
(isInspectorEnabled || this.isDev) && path !== SYNTHETICS_API_URLS.DYNAMIC_SETTINGS;
if (showInspectData) {
return { _inspect: this.inspectableEsQueries };

View file

@ -4738,7 +4738,6 @@
"kibana-react.kibanaCodeEditor.ariaLabel": "Éditeur de code",
"kibana-react.kibanaCodeEditor.enterKeyLabel": "Entrée",
"kibana-react.kibanaCodeEditor.escapeKeyLabel": "Échap",
"reactPackages.mountPointPortal.errorMessage": "Erreur lors du rendu du contenu du portail.",
"kibana-react.noDataPage.cantDecide.link": "Consultez la documentation pour en savoir plus.",
"kibana-react.noDataPage.elasticAgentCard.description": "Utilisez Elastic Agent pour collecter de manière simple et unifiée les données de vos machines.",
"kibana-react.noDataPage.elasticAgentCard.noPermission.description": "Cette intégration n'est pas encore activée. Votre administrateur possède les autorisations requises pour l'activer.",
@ -4752,6 +4751,7 @@
"kibana-react.pageFooter.makeDefaultRouteLink": "Choisir comme page de destination",
"kibana-react.solutionNav.collapsibleLabel": "Réduire la navigation latérale",
"kibana-react.solutionNav.openLabel": "Ouvrir la navigation latérale",
"reactPackages.mountPointPortal.errorMessage": "Erreur lors du rendu du contenu du portail.",
"languageDocumentationPopover.header": "Référence de {language}",
"languageDocumentationPopover.tooltip": "Référence de {lang}",
"languageDocumentationPopover.searchPlaceholder": "Recherche",
@ -36834,12 +36834,6 @@
"xpack.stackConnectors.xmatters.title": "xMatters",
"xpack.stackConnectors.xmatters.unexpectedNullResponseErrorMessage": "réponse nulle inattendue de xmatters",
"xpack.synthetics.alertRules.monitorStatus.reasonMessage": "Le moniteur \"{name}\" de {location} est {status}. Vérifié à {checkedAt}.",
"xpack.synthetics.alerts.durationAnomaly.defaultActionMessage": "Temps de réponse anormal (niveau {severity}) détecté sur le {monitor} avec l'URL {monitorUrl} à {anomalyStartTimestamp}. La note de sévérité d'anomalie est {severityScore}.\nDes temps de réponse aussi élevés que {slowestAnomalyResponse} ont été détectés à partir de l'emplacement {observerLocation}. Le temps de réponse attendu est {expectedResponseTime}.",
"xpack.synthetics.alerts.durationAnomaly.defaultRecoveryMessage": "L'alerte pour temps de réponse anormal (niveau {severity}) détecté sur le moniteur {monitor} possédant l'URL {monitorUrl} depuis l'emplacement {observerLocation} à {anomalyStartTimestamp} a été résolue",
"xpack.synthetics.alerts.monitorStatus.defaultActionMessage": "Moniteur {monitorName} avec l'URL {monitorUrl} depuis {observerLocation} {statusMessage} Le dernier message d'erreur est {latestErrorMessage}, vérifié à {checkedAt}",
"xpack.synthetics.alerts.monitorStatus.defaultRecoveryMessage": "L'alerte pour le moniteur {monitorName} avec l'URL {monitorUrl} depuis {observerLocation} a été résolue",
"xpack.synthetics.alerts.monitorStatus.defaultRecoverySubjectMessage": "Le moniteur {monitorName} avec l'URL {monitorUrl} a récupéré",
"xpack.synthetics.alerts.monitorStatus.defaultSubjectMessage": "Le moniteur {monitorName} avec l'URL {monitorUrl} est arrêté",
"xpack.synthetics.alerts.monitorStatus.upCheck.reasonWithoutDuration": "le moniteur est de nouveau opérationnel. Il a été exécuté avec succès à {checkedAt}",
"xpack.synthetics.alerts.syntheticsMonitorStatus.defaultActionMessage": "\"{monitorName}\" est {status} de {locationName}. - Elastic Synthetics\n\nDétails :\n\n- Nom du moniteur : {monitorName} \n- {monitorUrlLabel} : {monitorUrl} \n- Type du moniteur : {monitorType} \n- Vérifié à : {checkedAt} \n- De : {locationName} \n- Erreur reçue : {lastErrorMessage} \n{linkMessage}",
"xpack.synthetics.alerts.syntheticsMonitorStatus.defaultRecoveryMessage": "Lalerte pour \"{monitorName}\" de {locationName} nest plus active : {recoveryReason}. - Elastic Synthetics\n\nDétails :\n\n- Nom du moniteur : {monitorName} \n- {monitorUrlLabel} : {monitorUrl} \n- Type du moniteur : {monitorType} \n- De : {locationName} \n- Dernière erreur reçue : {lastErrorMessage} \n{linkMessage}",
@ -36847,9 +36841,6 @@
"xpack.synthetics.alerts.syntheticsMonitorStatus.defaultSubjectMessage": "\"{monitorName}\" ({locationName}) est arrêté - Elastic Synthetics",
"xpack.synthetics.alerts.syntheticsMonitorTLS.defaultRecoverySubjectMessage": "Lalerte a été résolue pour le certificat {commonName} - Elastic Synthetics",
"xpack.synthetics.alerts.syntheticsMonitorTLS.defaultSubjectMessage": "Lalerte a été déclenchée pour le certificat {commonName} - Elastic Synthetics",
"xpack.synthetics.alerts.tls.defaultActionMessage": "Le certificat TLS {commonName} détecté de l'émetteur {issuer} est {status}. Certificat {summary}",
"xpack.synthetics.alerts.tls.defaultRecoveryMessage": "L'alerte pour le certificat TLS {commonName} de l'émetteur {issuer} a été résolue",
"xpack.synthetics.alerts.tls.legacy.defaultActionMessage": "Détection de {count} certificats TLS sur le point d'expirer ou devenant trop anciens.\n{expiringConditionalOpen}\nNombre de certificats sur le point d'expirer : {expiringCount}\nCertificats sur le point d'expirer : {expiringCommonNameAndDate}\n{expiringConditionalClose}\n{agingConditionalOpen}\nNombre de certificats vieillissants : {agingCount}\nCertificats vieillissants : {agingCommonNameAndDate}\n{agingConditionalClose}\n",
"xpack.synthetics.certificates.heading": "Certificats TLS ({total})",
"xpack.synthetics.certificatesRoute.title": "Certificats | {baseTitle}",
"xpack.synthetics.certs.status.ok.label": " pour {okRelativeDate}",
@ -37015,14 +37006,10 @@
"xpack.synthetics.alertRules.monitorStatus.browser.label": "navigateur",
"xpack.synthetics.alertRules.monitorStatus.host.label": "Hôte",
"xpack.synthetics.alertRules.monitorStatus.unavailableUrlLabel": "(indisponible)",
"xpack.synthetics.alerts.durationAnomaly.clientName": "Anomalie de durée Uptime",
"xpack.synthetics.alerts.durationAnomaly.description": "Alerte lorsque la durée du moniteur Uptime est anormale.",
"xpack.synthetics.alerts.monitorStatus.absoluteLink.label": "- Lien",
"xpack.synthetics.alerts.monitorStatus.clientName": "Statut du moniteur Uptime",
"xpack.synthetics.alerts.monitorStatus.defaultRecovery.status": "a récupéré",
"xpack.synthetics.alerts.monitorStatus.deleteMonitor.reason": "le moniteur a été supprimé",
"xpack.synthetics.alerts.monitorStatus.deleteMonitor.status": "a été supprimé",
"xpack.synthetics.alerts.monitorStatus.description": "Alerte lorsqu'un monitoring est arrêté ou qu'un seuil de disponibilité est dépassé.",
"xpack.synthetics.alerts.monitorStatus.downLabel": "bas",
"xpack.synthetics.alerts.monitorStatus.relativeLink.label": "- Lien relatif",
"xpack.synthetics.alerts.monitorStatus.removedLocation.reason": "cet emplacement a été retiré du moniteur",
@ -37032,11 +37019,7 @@
"xpack.synthetics.alerts.settings.addConnector": "Ajouter un connecteur",
"xpack.synthetics.alerts.syntheticsMonitorStatus.clientName": "Statut du moniteur",
"xpack.synthetics.alerts.syntheticsMonitorStatus.description": "Alerte lorsqu'un moniteur est arrêté.",
"xpack.synthetics.alerts.tls.clientName": "Uptime TLS",
"xpack.synthetics.alerts.tls.criteriaExpression.description": "quand",
"xpack.synthetics.alerts.tls.description": "Alerte lorsque le certificat TLS d'un moniteur Uptime est sur le point d'expirer.",
"xpack.synthetics.alerts.tls.legacy.clientName": "Uptime TLS (existant)",
"xpack.synthetics.alerts.tls.legacy.description": "Alerte lorsque le certificat TLS d'un moniteur Uptime est sur le point d'expirer. Cette alerte sera déclassée dans une future version.",
"xpack.synthetics.alerts.toggleAlertFlyoutButtonText": "Alertes et règles",
"xpack.synthetics.alertsRulesPopover.toggleButton.ariaLabel": "Ouvrir les alertes et le menu des règles",
"xpack.synthetics.analyzeDataButtonLabel": "Explorer les données",
@ -37782,8 +37765,6 @@
"xpack.synthetics.settings.enablement.fail": "Échec de lactivation de lapplication Synthetics",
"xpack.synthetics.settings.error.couldNotSave": "Impossible d'enregistrer les paramètres !",
"xpack.synthetics.settings.getParams.failed": "Impossible dobtenir les paramètres globaux.",
"xpack.synthetics.settings.invalid.error": "La valeur doit être supérieure à 0.",
"xpack.synthetics.settings.invalid.nanError": "La valeur doit être un entier.",
"xpack.synthetics.settings.noSpace.error": "Les noms d'index ne doivent pas contenir d'espace",
"xpack.synthetics.settings.saveSuccess": "Paramètres enregistrés !",
"xpack.synthetics.settings.syncGlobalParams": "Paramètres globaux appliqués correctement à tous les moniteurs",

View file

@ -4754,7 +4754,6 @@
"kibana-react.kibanaCodeEditor.ariaLabel": "コードエディター",
"kibana-react.kibanaCodeEditor.enterKeyLabel": "Enter",
"kibana-react.kibanaCodeEditor.escapeKeyLabel": "Esc",
"reactPackages.mountPointPortal.errorMessage": "ポータルコンテンツのレンダリングエラー",
"kibana-react.noDataPage.cantDecide.link": "詳細については、ドキュメントをご確認ください。",
"kibana-react.noDataPage.elasticAgentCard.description": "Elasticエージェントを使用すると、シンプルで統一された方法でコンピューターからデータを収集するできます。",
"kibana-react.noDataPage.elasticAgentCard.noPermission.description": "この統合はまだ有効ではありません。管理者にはオンにするために必要なアクセス権があります。",
@ -4768,6 +4767,7 @@
"kibana-react.pageFooter.makeDefaultRouteLink": "これをランディングページにする",
"kibana-react.solutionNav.collapsibleLabel": "サイドナビゲーションを折りたたむ",
"kibana-react.solutionNav.openLabel": "サイドナビゲーションを開く",
"reactPackages.mountPointPortal.errorMessage": "ポータルコンテンツのレンダリングエラー",
"languageDocumentationPopover.header": "{language}リファレンス",
"languageDocumentationPopover.tooltip": "{lang}リファレンス",
"languageDocumentationPopover.searchPlaceholder": "検索",
@ -36833,12 +36833,6 @@
"xpack.stackConnectors.xmatters.title": "xMatters",
"xpack.stackConnectors.xmatters.unexpectedNullResponseErrorMessage": "xmattersからの予期しないnull応答",
"xpack.synthetics.alertRules.monitorStatus.reasonMessage": "{location}からのモニター\"{name}\"は{status}です。確認:{checkedAt}。",
"xpack.synthetics.alerts.durationAnomaly.defaultActionMessage": "{monitor}で{anomalyStartTimestamp}で{monitorUrl}のurlで異常な{severity}レベル)応答時間を検出しました。異常重要度スコアは{severityScore}です。\n{observerLocation}の位置から{slowestAnomalyResponse}の高い応答時間が検出されています。想定応答時間は{expectedResponseTime}です。",
"xpack.synthetics.alerts.durationAnomaly.defaultRecoveryMessage": "{anomalyStartTimestamp}の{observerLocation}地点から{monitorUrl}のモニター{monitor}で検出された応答時間異常({severity}レベル)のアラートが回復しました",
"xpack.synthetics.alerts.monitorStatus.defaultActionMessage": "{monitorName} を {observerLocation} から {monitorUrl} のurlで監視する {statusMessage} 最新のエラーメッセージは {latestErrorMessage} で、{checkedAt} で確認",
"xpack.synthetics.alerts.monitorStatus.defaultRecoveryMessage": "{observerLocation}から{monitorUrl}のurlを持つモニター{monitorName}に対するアラートが回復しました",
"xpack.synthetics.alerts.monitorStatus.defaultRecoverySubjectMessage": "URL {monitorUrl}のモニター\"{monitorName}\"が回復しました",
"xpack.synthetics.alerts.monitorStatus.defaultSubjectMessage": "url {monitorUrl}のモニタ{monitorName}がダウンしています",
"xpack.synthetics.alerts.monitorStatus.upCheck.reasonWithoutDuration": "モニターが再起動しました。{checkedAt}に正常に実行されました。",
"xpack.synthetics.alerts.syntheticsMonitorStatus.defaultActionMessage": "\"{monitorName}\"は{locationName}からの{status}です。- Elastic Synthetics\n\n詳細\n\n- モニター名:{monitorName} \n- {monitorUrlLabel}: {monitorUrl} \n- モニタータイプ:{monitorType} \n- 確認日時:{checkedAt} \n- 場所:{locationName} \n- 受信したエラー:{lastErrorMessage} \n{linkMessage}",
"xpack.synthetics.alerts.syntheticsMonitorStatus.defaultRecoveryMessage": "{locationName}からの\"{monitorName}\"のアラートはアクティブではありません:{recoveryReason}。- Elastic Synthetics\n\n詳細\n\n- モニター名:{monitorName} \n- {monitorUrlLabel}: {monitorUrl} \n- モニタータイプ:{monitorType} \n- 場所:{locationName} \n- 最後に受信したエラー:{lastErrorMessage} \n{linkMessage}",
@ -36846,9 +36840,6 @@
"xpack.synthetics.alerts.syntheticsMonitorStatus.defaultSubjectMessage": "\"{monitorName}\"{locationName})は停止しています - Elastic Synthetics",
"xpack.synthetics.alerts.syntheticsMonitorTLS.defaultRecoverySubjectMessage": "証明書{commonName}のアラートが解決しました - Elastic Synthetics",
"xpack.synthetics.alerts.syntheticsMonitorTLS.defaultSubjectMessage": "証明書{commonName}のアラートがトリガーされました - Elastic Synthetics",
"xpack.synthetics.alerts.tls.defaultActionMessage": "発行者{issuer}のTLS証明書{commonName}が{status}であることを検出しました。証明書{summary}",
"xpack.synthetics.alerts.tls.defaultRecoveryMessage": "発行者{issuer}のTLS証明書{commonName}のアラートが回復しました",
"xpack.synthetics.alerts.tls.legacy.defaultActionMessage": "期限切れになるか古くなりすぎた{count}個のTLS証明書証明書を検知しました。\n{expiringConditionalOpen}\n有効期限切れになる証明書件数{expiringCount}\n有効期限切れになる証明書{expiringCommonNameAndDate}\n{expiringConditionalClose}\n{agingConditionalOpen}\n古い証明書件数{agingCount}\n古い証明書{agingCommonNameAndDate}\n{agingConditionalClose}\n",
"xpack.synthetics.certificates.heading": "TLS証明書{total}",
"xpack.synthetics.certificatesRoute.title": "証明書 | {baseTitle}",
"xpack.synthetics.certs.status.ok.label": " {okRelativeDate}",
@ -37014,14 +37005,10 @@
"xpack.synthetics.alertRules.monitorStatus.browser.label": "ブラウザー",
"xpack.synthetics.alertRules.monitorStatus.host.label": "ホスト",
"xpack.synthetics.alertRules.monitorStatus.unavailableUrlLabel": "(使用不可)",
"xpack.synthetics.alerts.durationAnomaly.clientName": "アップタイム期間異常",
"xpack.synthetics.alerts.durationAnomaly.description": "アップタイム監視期間が異常なときにアラートを発行します。",
"xpack.synthetics.alerts.monitorStatus.absoluteLink.label": "- リンク",
"xpack.synthetics.alerts.monitorStatus.clientName": "稼働状況の監視ステータス",
"xpack.synthetics.alerts.monitorStatus.defaultRecovery.status": "回復しました",
"xpack.synthetics.alerts.monitorStatus.deleteMonitor.reason": "モニターが削除されました",
"xpack.synthetics.alerts.monitorStatus.deleteMonitor.status": "が削除されました",
"xpack.synthetics.alerts.monitorStatus.description": "監視が停止しているか、可用性しきい値に違反したときにアラートを発行します。",
"xpack.synthetics.alerts.monitorStatus.downLabel": "ダウン",
"xpack.synthetics.alerts.monitorStatus.relativeLink.label": "- 相対リンク",
"xpack.synthetics.alerts.monitorStatus.removedLocation.reason": "この場所はモニターから削除されました",
@ -37031,11 +37018,7 @@
"xpack.synthetics.alerts.settings.addConnector": "コネクターの追加",
"xpack.synthetics.alerts.syntheticsMonitorStatus.clientName": "監視ステータス",
"xpack.synthetics.alerts.syntheticsMonitorStatus.description": "モニターがダウンしているときにアラートを通知します。",
"xpack.synthetics.alerts.tls.clientName": "アップタイムTLS",
"xpack.synthetics.alerts.tls.criteriaExpression.description": "タイミング",
"xpack.synthetics.alerts.tls.description": "アップタイム監視の TLS 証明書の有効期限が近いときにアラートを発行します。",
"xpack.synthetics.alerts.tls.legacy.clientName": "アップタイムTLSレガシー",
"xpack.synthetics.alerts.tls.legacy.description": "アップタイム監視の TLS 証明書の有効期限が近いときにアラートを発行します。このアラートは将来のバージョンで廃止予定です。",
"xpack.synthetics.alerts.toggleAlertFlyoutButtonText": "アラートとルール",
"xpack.synthetics.alertsRulesPopover.toggleButton.ariaLabel": "アラートおよびルールメニューを開く",
"xpack.synthetics.analyzeDataButtonLabel": "データの探索",
@ -37781,8 +37764,6 @@
"xpack.synthetics.settings.enablement.fail": "Syntheticsアプリを有効化できませんでした",
"xpack.synthetics.settings.error.couldNotSave": "設定を保存できませんでした!",
"xpack.synthetics.settings.getParams.failed": "グローバルパラメーターを取得できませんでした。",
"xpack.synthetics.settings.invalid.error": "値は0よりも大きい値でなければなりません。",
"xpack.synthetics.settings.invalid.nanError": "値は整数でなければなりません。",
"xpack.synthetics.settings.noSpace.error": "インデックス名にはスペースを使用できません",
"xpack.synthetics.settings.saveSuccess": "設定が保存されました。",
"xpack.synthetics.settings.syncGlobalParams": "グローバルパラメーターをすべてのモニターに正常に適用しました",

View file

@ -4753,7 +4753,6 @@
"kibana-react.kibanaCodeEditor.ariaLabel": "代码编辑器",
"kibana-react.kibanaCodeEditor.enterKeyLabel": "Enter",
"kibana-react.kibanaCodeEditor.escapeKeyLabel": "Esc",
"reactPackages.mountPointPortal.errorMessage": "呈现门户内容时出错",
"kibana-react.noDataPage.cantDecide.link": "请参阅我们的文档以了解更多信息。",
"kibana-react.noDataPage.elasticAgentCard.description": "使用 Elastic 代理以简单统一的方式从您的计算机中收集数据。",
"kibana-react.noDataPage.elasticAgentCard.noPermission.description": "尚未启用此集成。您的管理员具有打开它所需的权限。",
@ -4767,6 +4766,7 @@
"kibana-react.pageFooter.makeDefaultRouteLink": "将此设为我的登陆页面",
"kibana-react.solutionNav.collapsibleLabel": "折叠侧边导航",
"kibana-react.solutionNav.openLabel": "打开侧边导航",
"reactPackages.mountPointPortal.errorMessage": "呈现门户内容时出错",
"languageDocumentationPopover.header": "{language} 参考",
"languageDocumentationPopover.tooltip": "{lang} 参考",
"languageDocumentationPopover.searchPlaceholder": "搜索",
@ -36827,12 +36827,6 @@
"xpack.stackConnectors.xmatters.title": "xMatters",
"xpack.stackConnectors.xmatters.unexpectedNullResponseErrorMessage": "来自 xmatters 的异常空响应",
"xpack.synthetics.alertRules.monitorStatus.reasonMessage": "来自 {location} 的监测“{name}”为 {status}。已于 {checkedAt} 检查。",
"xpack.synthetics.alerts.durationAnomaly.defaultActionMessage": "{anomalyStartTimestamp} 在 url {monitorUrl} 的 {monitor} 上检测到异常({severity} 级别)响应时间。异常严重性分数为 {severityScore}。\n从位置 {observerLocation} 检测到高达 {slowestAnomalyResponse} 的响应时间。预期响应时间为 {expectedResponseTime}。",
"xpack.synthetics.alerts.durationAnomaly.defaultRecoveryMessage": "{anomalyStartTimestamp} 从位置 {observerLocation} 在 url {monitorUrl} 的监测 {monitor} 上检测到异常({severity} 级别)响应时间的告警已恢复",
"xpack.synthetics.alerts.monitorStatus.defaultActionMessage": "在 {observerLocation}URL 为 {monitorUrl} 的监测 {monitorName} 是 {statusMessage} 最新错误消息是 {latestErrorMessage},已于 {checkedAt} 检查",
"xpack.synthetics.alerts.monitorStatus.defaultRecoveryMessage": "来自 {observerLocation} 且 url 为 {monitorUrl} 的监测 {monitorName} 的告警已恢复",
"xpack.synthetics.alerts.monitorStatus.defaultRecoverySubjectMessage": "URL 为 {monitorUrl} 的监测 {monitorName} 已恢复",
"xpack.synthetics.alerts.monitorStatus.defaultSubjectMessage": "URL 为 {monitorUrl} 的监测 {monitorName} 已关闭",
"xpack.synthetics.alerts.monitorStatus.upCheck.reasonWithoutDuration": "监测现已再次启动。它于 {checkedAt}成功运行",
"xpack.synthetics.alerts.syntheticsMonitorStatus.defaultActionMessage": "“{monitorName}”为来自 {locationName} 的 {status} 状态 - Elastic Synthetics\n\n详情\n\n- 监测名称:{monitorName} \n- {monitorUrlLabel}{monitorUrl} \n- 监测类型:{monitorType} \n- 检查时间:{checkedAt} \n- 来自:{locationName} \n- 收到错误:{lastErrorMessage} \n{linkMessage}",
"xpack.synthetics.alerts.syntheticsMonitorStatus.defaultRecoveryMessage": "来自 {locationName} 的“{monitorName}”的告警不再处于活动状态:{recoveryReason} - Elastic Synthetics\n\n详情\n\n- 监测名称:{monitorName} \n- {monitorUrlLabel}{monitorUrl} \n- 监测类型:{monitorType} \n- 来自:{locationName} \n- 收到的上一个错误:{lastErrorMessage} \n{linkMessage}",
@ -36840,9 +36834,6 @@
"xpack.synthetics.alerts.syntheticsMonitorStatus.defaultSubjectMessage": "“{monitorName}”({locationName}) 已关闭 - Elastic Synthetics",
"xpack.synthetics.alerts.syntheticsMonitorTLS.defaultRecoverySubjectMessage": "告警已解析证书 {commonName} - Elastic Synthetics",
"xpack.synthetics.alerts.syntheticsMonitorTLS.defaultSubjectMessage": "已针对证书 {commonName} 触发告警 - Elastic Synthetics",
"xpack.synthetics.alerts.tls.defaultActionMessage": "检测到来自颁发者 {issuer} 的 TLS 证书 {commonName} 的状态为 {status}。证书 {summary}",
"xpack.synthetics.alerts.tls.defaultRecoveryMessage": "来自颁发者 {issuer} 的 TLS 证书 {commonName} 的告警已恢复",
"xpack.synthetics.alerts.tls.legacy.defaultActionMessage": "检测到 {count} 个 TLS 证书即将过期或即将过时。\n{expiringConditionalOpen}\n即将过期的证书计数{expiringCount}\n即将过期的证书{expiringCommonNameAndDate}\n{expiringConditionalClose}\n{agingConditionalOpen}\n过时的证书计数{agingCount}\n过时的证书{agingCommonNameAndDate}\n{agingConditionalClose}\n",
"xpack.synthetics.certificates.heading": "TLS 证书 ({total})",
"xpack.synthetics.certificatesRoute.title": "证书 | {baseTitle}",
"xpack.synthetics.certs.status.ok.label": " 对于 {okRelativeDate}",
@ -37008,14 +36999,10 @@
"xpack.synthetics.alertRules.monitorStatus.browser.label": "浏览器",
"xpack.synthetics.alertRules.monitorStatus.host.label": "主机",
"xpack.synthetics.alertRules.monitorStatus.unavailableUrlLabel": "(不可用)",
"xpack.synthetics.alerts.durationAnomaly.clientName": "Uptime 持续时间异常",
"xpack.synthetics.alerts.durationAnomaly.description": "运行时间监测持续时间异常时告警。",
"xpack.synthetics.alerts.monitorStatus.absoluteLink.label": "- 链接",
"xpack.synthetics.alerts.monitorStatus.clientName": "运行时间监测状态",
"xpack.synthetics.alerts.monitorStatus.defaultRecovery.status": "已恢复",
"xpack.synthetics.alerts.monitorStatus.deleteMonitor.reason": "此监测已删除",
"xpack.synthetics.alerts.monitorStatus.deleteMonitor.status": "已删除",
"xpack.synthetics.alerts.monitorStatus.description": "监测关闭或超出可用性阈值时告警。",
"xpack.synthetics.alerts.monitorStatus.downLabel": "关闭",
"xpack.synthetics.alerts.monitorStatus.relativeLink.label": "- 相对链接",
"xpack.synthetics.alerts.monitorStatus.removedLocation.reason": "此位置已从监测中移除",
@ -37025,11 +37012,7 @@
"xpack.synthetics.alerts.settings.addConnector": "添加连接器",
"xpack.synthetics.alerts.syntheticsMonitorStatus.clientName": "监测状态",
"xpack.synthetics.alerts.syntheticsMonitorStatus.description": "监测关闭时告警。",
"xpack.synthetics.alerts.tls.clientName": "Uptime TLS",
"xpack.synthetics.alerts.tls.criteriaExpression.description": "当",
"xpack.synthetics.alerts.tls.description": "运行时间监测的 TLS 证书即将过期时告警。",
"xpack.synthetics.alerts.tls.legacy.clientName": "Uptime TLS旧版",
"xpack.synthetics.alerts.tls.legacy.description": "运行时间监测的 TLS 证书即将过期时告警。未来的版本将弃用此告警。",
"xpack.synthetics.alerts.toggleAlertFlyoutButtonText": "告警和规则",
"xpack.synthetics.alertsRulesPopover.toggleButton.ariaLabel": "打开告警和规则菜单",
"xpack.synthetics.analyzeDataButtonLabel": "浏览数据",
@ -37775,8 +37758,6 @@
"xpack.synthetics.settings.enablement.fail": "无法启用 Synthetics 应用",
"xpack.synthetics.settings.error.couldNotSave": "无法保存设置!",
"xpack.synthetics.settings.getParams.failed": "无法获取全局参数。",
"xpack.synthetics.settings.invalid.error": "值必须大于 0。",
"xpack.synthetics.settings.invalid.nanError": "值必须为整数。",
"xpack.synthetics.settings.noSpace.error": "索引名称不得包含空格",
"xpack.synthetics.settings.saveSuccess": "设置已保存!",
"xpack.synthetics.settings.syncGlobalParams": "已成功将全局参数应用到所有监测",

View file

@ -5,6 +5,4 @@
* 2.0.
*/
export interface SyntheticsHasIntegrationMonitorsResponse {
hasIntegrationMonitors: boolean;
}
export { UPTIME_RULE_TYPES } from './constants/uptime_alerts';

View file

@ -6,7 +6,7 @@
*/
import expect from '@kbn/expect';
import { API_URLS, SYNTHETICS_API_URLS } from '@kbn/synthetics-plugin/common/constants';
import { SYNTHETICS_API_URLS } from '@kbn/synthetics-plugin/common/constants';
import { SanitizedRule } from '@kbn/alerting-plugin/common';
import { omit } from 'lodash';
import { TlsTranslations } from '@kbn/synthetics-plugin/common/rules/synthetics/translations';
@ -36,7 +36,7 @@ export default function ({ getService }: FtrProviderContext) {
it('creates rule when settings are configured', async () => {
await supertest
.post(API_URLS.DYNAMIC_SETTINGS)
.post(SYNTHETICS_API_URLS.DYNAMIC_SETTINGS)
.set('kbn-xsrf', 'true')
.send({
heartbeatIndices: 'heartbeat-8*,heartbeat-7*',
@ -76,7 +76,7 @@ export default function ({ getService }: FtrProviderContext) {
it('updates rules when settings are updated', async () => {
await supertest
.post(API_URLS.DYNAMIC_SETTINGS)
.post(SYNTHETICS_API_URLS.DYNAMIC_SETTINGS)
.set('kbn-xsrf', 'true')
.send({
heartbeatIndices: 'heartbeat-8*,heartbeat-7*',

View file

@ -6,7 +6,7 @@
*/
import expect from '@kbn/expect';
import { API_URLS } from '@kbn/synthetics-plugin/common/constants';
import { API_URLS } from '@kbn/uptime-plugin/common/constants';
import { FtrProviderContext } from '../../ftr_provider_context';
import { PINGS_DATE_RANGE_END, PINGS_DATE_RANGE_START } from './constants';

View file

@ -7,7 +7,7 @@
import moment from 'moment';
import expect from '@kbn/expect';
import { API_URLS } from '@kbn/synthetics-plugin/common/constants';
import { API_URLS } from '@kbn/uptime-plugin/common/constants';
import { PINGS_DATE_RANGE_START, PINGS_DATE_RANGE_END } from './constants';
import { FtrProviderContext } from '../../ftr_provider_context';

View file

@ -7,8 +7,8 @@
import expect from '@kbn/expect';
import { isRight } from 'fp-ts/lib/Either';
import { DynamicSettingsCodec, DynamicSettings } from '@kbn/synthetics-plugin/common/runtime_types';
import { DYNAMIC_SETTINGS_DEFAULTS, API_URLS } from '@kbn/synthetics-plugin/common/constants';
import { DynamicSettingsCodec, DynamicSettings } from '@kbn/uptime-plugin/common/runtime_types';
import { DYNAMIC_SETTINGS_DEFAULTS, API_URLS } from '@kbn/uptime-plugin/common/constants';
import { FtrProviderContext } from '../../../ftr_provider_context';
export default function ({ getService }: FtrProviderContext) {

View file

@ -5,7 +5,7 @@
* 2.0.
*/
import { API_URLS } from '@kbn/synthetics-plugin/common/constants';
import { API_URLS } from '@kbn/uptime-plugin/common/constants';
import expect from '@kbn/expect';
import { FtrProviderContext } from '../../../ftr_provider_context';

View file

@ -5,7 +5,7 @@
* 2.0.
*/
import { API_URLS } from '@kbn/synthetics-plugin/common/constants';
import { API_URLS } from '@kbn/uptime-plugin/common/constants';
import expect from '@kbn/expect';
import { expectFixtureEql } from './helper/expect_fixture_eql';
import { FtrProviderContext } from '../../../ftr_provider_context';

View file

@ -5,7 +5,7 @@
* 2.0.
*/
import { API_URLS } from '@kbn/synthetics-plugin/common/constants';
import { API_URLS } from '@kbn/uptime-plugin/common/constants';
import { expectFixtureEql } from './helper/expect_fixture_eql';
import { FtrProviderContext } from '../../../ftr_provider_context';

View file

@ -7,7 +7,7 @@
import expect from '@kbn/expect';
import { MonitorSummary } from '@kbn/synthetics-plugin/common/runtime_types';
import { API_URLS } from '@kbn/synthetics-plugin/common/constants';
import { API_URLS } from '@kbn/uptime-plugin/common/constants';
import { FtrProviderContext } from '../../../ftr_provider_context';
import { makeChecksWithStatus } from './helper/make_checks';

View file

@ -11,7 +11,7 @@ import {
MonitorSummariesResult,
MonitorSummariesResultType,
} from '@kbn/synthetics-plugin/common/runtime_types';
import { API_URLS } from '@kbn/synthetics-plugin/common/constants';
import { API_URLS } from '@kbn/uptime-plugin/common/constants';
import { FtrProviderContext } from '../../../ftr_provider_context';
interface ExpectedMonitorStatesPage {

View file

@ -5,7 +5,7 @@
* 2.0.
*/
import { API_URLS } from '@kbn/synthetics-plugin/common/constants';
import { API_URLS } from '@kbn/uptime-plugin/common/constants';
import { expectFixtureEql } from './helper/expect_fixture_eql';
import { FtrProviderContext } from '../../../ftr_provider_context';

View file

@ -8,8 +8,8 @@
import expect from '@kbn/expect';
import { isLeft } from 'fp-ts/lib/Either';
import { PathReporter } from 'io-ts/lib/PathReporter';
import { PingsResponseType } from '@kbn/synthetics-plugin/common/runtime_types';
import { API_URLS } from '@kbn/synthetics-plugin/common/constants';
import { PingsResponseType } from '@kbn/uptime-plugin/common/runtime_types';
import { API_URLS } from '@kbn/uptime-plugin/common/constants';
import { FtrProviderContext } from '../../../ftr_provider_context';
function decodePingsResponseData(response: any) {

View file

@ -5,7 +5,7 @@
* 2.0.
*/
import { API_URLS } from '@kbn/synthetics-plugin/common/constants';
import { API_URLS } from '@kbn/uptime-plugin/common/constants';
import expect from '@kbn/expect';
import { FtrProviderContext } from '../../../ftr_provider_context';
import { makeChecksWithStatus, getChecksDateRange } from './helper/make_checks';

View file

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