diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
index 745101711171..ff5ec12fef6a 100644
--- a/.github/CODEOWNERS
+++ b/.github/CODEOWNERS
@@ -1646,6 +1646,11 @@ x-pack/plugins/cloud_integrations/cloud_full_story/server/config.ts @elastic/kib
/x-pack/test/functional/es_archives/cases/signals/hosts_users @elastic/response-ops
# Enterprise Search
+# search
+/x-pack/test/functional_solution_sidenav/tests/search_sidenav.ts @elastic/search-kibana
+/x-pack/test/functional/services/search_sessions.ts @elastic/search-kibana
+/x-pack/test/functional/page_objects/search_* @elastic/search-kibana
+/x-pack/test/functional/apps/search_playground @elastic/search-kibana
/x-pack/test_serverless/functional/page_objects/svl_ingest_pipelines.ts @elastic/search-kibana
/x-pack/test/functional/apps/dev_tools/embedded_console.ts @elastic/search-kibana
/x-pack/test/functional/apps/ingest_pipelines/feature_controls/ingest_pipelines_security.ts @elastic/search-kibana
diff --git a/oas_docs/bundle.json b/oas_docs/bundle.json
index 0fde92c1fa3f..a4c1e30c8cf0 100644
--- a/oas_docs/bundle.json
+++ b/oas_docs/bundle.json
@@ -1304,14 +1304,17 @@
},
"flapping": {
"additionalProperties": false,
+ "description": "When flapping detection is turned on, alerts that switch quickly between active and recovered states are identified as “flapping” and notifications are reduced.",
"nullable": true,
"properties": {
"look_back_window": {
+ "description": "The minimum number of runs in which the threshold must be met.",
"maximum": 20,
"minimum": 2,
"type": "number"
},
"status_change_threshold": {
+ "description": "The minimum number of times an alert must switch states in the look back window.",
"maximum": 20,
"minimum": 2,
"type": "number"
@@ -2083,14 +2086,17 @@
},
"flapping": {
"additionalProperties": false,
+ "description": "When flapping detection is turned on, alerts that switch quickly between active and recovered states are identified as “flapping” and notifications are reduced.",
"nullable": true,
"properties": {
"look_back_window": {
+ "description": "The minimum number of runs in which the threshold must be met.",
"maximum": 20,
"minimum": 2,
"type": "number"
},
"status_change_threshold": {
+ "description": "The minimum number of times an alert must switch states in the look back window.",
"maximum": 20,
"minimum": 2,
"type": "number"
@@ -2484,14 +2490,17 @@
},
"flapping": {
"additionalProperties": false,
+ "description": "When flapping detection is turned on, alerts that switch quickly between active and recovered states are identified as “flapping” and notifications are reduced.",
"nullable": true,
"properties": {
"look_back_window": {
+ "description": "The minimum number of runs in which the threshold must be met.",
"maximum": 20,
"minimum": 2,
"type": "number"
},
"status_change_threshold": {
+ "description": "The minimum number of times an alert must switch states in the look back window.",
"maximum": 20,
"minimum": 2,
"type": "number"
@@ -3253,14 +3262,17 @@
},
"flapping": {
"additionalProperties": false,
+ "description": "When flapping detection is turned on, alerts that switch quickly between active and recovered states are identified as “flapping” and notifications are reduced.",
"nullable": true,
"properties": {
"look_back_window": {
+ "description": "The minimum number of runs in which the threshold must be met.",
"maximum": 20,
"minimum": 2,
"type": "number"
},
"status_change_threshold": {
+ "description": "The minimum number of times an alert must switch states in the look back window.",
"maximum": 20,
"minimum": 2,
"type": "number"
@@ -3647,14 +3659,17 @@
},
"flapping": {
"additionalProperties": false,
+ "description": "When flapping detection is turned on, alerts that switch quickly between active and recovered states are identified as “flapping” and notifications are reduced.",
"nullable": true,
"properties": {
"look_back_window": {
+ "description": "The minimum number of runs in which the threshold must be met.",
"maximum": 20,
"minimum": 2,
"type": "number"
},
"status_change_threshold": {
+ "description": "The minimum number of times an alert must switch states in the look back window.",
"maximum": 20,
"minimum": 2,
"type": "number"
@@ -5094,14 +5109,17 @@
},
"flapping": {
"additionalProperties": false,
+ "description": "When flapping detection is turned on, alerts that switch quickly between active and recovered states are identified as “flapping” and notifications are reduced.",
"nullable": true,
"properties": {
"look_back_window": {
+ "description": "The minimum number of runs in which the threshold must be met.",
"maximum": 20,
"minimum": 2,
"type": "number"
},
"status_change_threshold": {
+ "description": "The minimum number of times an alert must switch states in the look back window.",
"maximum": 20,
"minimum": 2,
"type": "number"
diff --git a/oas_docs/bundle.serverless.json b/oas_docs/bundle.serverless.json
index 229bda84b862..a0bd0c4cc434 100644
--- a/oas_docs/bundle.serverless.json
+++ b/oas_docs/bundle.serverless.json
@@ -1304,14 +1304,17 @@
},
"flapping": {
"additionalProperties": false,
+ "description": "When flapping detection is turned on, alerts that switch quickly between active and recovered states are identified as “flapping” and notifications are reduced.",
"nullable": true,
"properties": {
"look_back_window": {
+ "description": "The minimum number of runs in which the threshold must be met.",
"maximum": 20,
"minimum": 2,
"type": "number"
},
"status_change_threshold": {
+ "description": "The minimum number of times an alert must switch states in the look back window.",
"maximum": 20,
"minimum": 2,
"type": "number"
@@ -2083,14 +2086,17 @@
},
"flapping": {
"additionalProperties": false,
+ "description": "When flapping detection is turned on, alerts that switch quickly between active and recovered states are identified as “flapping” and notifications are reduced.",
"nullable": true,
"properties": {
"look_back_window": {
+ "description": "The minimum number of runs in which the threshold must be met.",
"maximum": 20,
"minimum": 2,
"type": "number"
},
"status_change_threshold": {
+ "description": "The minimum number of times an alert must switch states in the look back window.",
"maximum": 20,
"minimum": 2,
"type": "number"
@@ -2484,14 +2490,17 @@
},
"flapping": {
"additionalProperties": false,
+ "description": "When flapping detection is turned on, alerts that switch quickly between active and recovered states are identified as “flapping” and notifications are reduced.",
"nullable": true,
"properties": {
"look_back_window": {
+ "description": "The minimum number of runs in which the threshold must be met.",
"maximum": 20,
"minimum": 2,
"type": "number"
},
"status_change_threshold": {
+ "description": "The minimum number of times an alert must switch states in the look back window.",
"maximum": 20,
"minimum": 2,
"type": "number"
@@ -3253,14 +3262,17 @@
},
"flapping": {
"additionalProperties": false,
+ "description": "When flapping detection is turned on, alerts that switch quickly between active and recovered states are identified as “flapping” and notifications are reduced.",
"nullable": true,
"properties": {
"look_back_window": {
+ "description": "The minimum number of runs in which the threshold must be met.",
"maximum": 20,
"minimum": 2,
"type": "number"
},
"status_change_threshold": {
+ "description": "The minimum number of times an alert must switch states in the look back window.",
"maximum": 20,
"minimum": 2,
"type": "number"
@@ -3647,14 +3659,17 @@
},
"flapping": {
"additionalProperties": false,
+ "description": "When flapping detection is turned on, alerts that switch quickly between active and recovered states are identified as “flapping” and notifications are reduced.",
"nullable": true,
"properties": {
"look_back_window": {
+ "description": "The minimum number of runs in which the threshold must be met.",
"maximum": 20,
"minimum": 2,
"type": "number"
},
"status_change_threshold": {
+ "description": "The minimum number of times an alert must switch states in the look back window.",
"maximum": 20,
"minimum": 2,
"type": "number"
@@ -5094,14 +5109,17 @@
},
"flapping": {
"additionalProperties": false,
+ "description": "When flapping detection is turned on, alerts that switch quickly between active and recovered states are identified as “flapping” and notifications are reduced.",
"nullable": true,
"properties": {
"look_back_window": {
+ "description": "The minimum number of runs in which the threshold must be met.",
"maximum": 20,
"minimum": 2,
"type": "number"
},
"status_change_threshold": {
+ "description": "The minimum number of times an alert must switch states in the look back window.",
"maximum": 20,
"minimum": 2,
"type": "number"
diff --git a/oas_docs/output/kibana.serverless.yaml b/oas_docs/output/kibana.serverless.yaml
index 9f0c38baded7..117e52586c5a 100644
--- a/oas_docs/output/kibana.serverless.yaml
+++ b/oas_docs/output/kibana.serverless.yaml
@@ -1018,14 +1018,24 @@ paths:
- last_execution_date
flapping:
additionalProperties: false
+ description: >-
+ When flapping detection is turned on, alerts that switch
+ quickly between active and recovered states are identified
+ as “flapping” and notifications are reduced.
nullable: true
type: object
properties:
look_back_window:
+ description: >-
+ The minimum number of runs in which the threshold must
+ be met.
maximum: 20
minimum: 2
type: number
status_change_threshold:
+ description: >-
+ The minimum number of times an alert must switch
+ states in the look back window.
maximum: 20
minimum: 2
type: number
@@ -1600,14 +1610,24 @@ paths:
type: boolean
flapping:
additionalProperties: false
+ description: >-
+ When flapping detection is turned on, alerts that switch
+ quickly between active and recovered states are identified
+ as “flapping” and notifications are reduced.
nullable: true
type: object
properties:
look_back_window:
+ description: >-
+ The minimum number of runs in which the threshold must
+ be met.
maximum: 20
minimum: 2
type: number
status_change_threshold:
+ description: >-
+ The minimum number of times an alert must switch states
+ in the look back window.
maximum: 20
minimum: 2
type: number
@@ -1925,14 +1945,24 @@ paths:
- last_execution_date
flapping:
additionalProperties: false
+ description: >-
+ When flapping detection is turned on, alerts that switch
+ quickly between active and recovered states are identified
+ as “flapping” and notifications are reduced.
nullable: true
type: object
properties:
look_back_window:
+ description: >-
+ The minimum number of runs in which the threshold must
+ be met.
maximum: 20
minimum: 2
type: number
status_change_threshold:
+ description: >-
+ The minimum number of times an alert must switch
+ states in the look back window.
maximum: 20
minimum: 2
type: number
@@ -2510,14 +2540,24 @@ paths:
- active
flapping:
additionalProperties: false
+ description: >-
+ When flapping detection is turned on, alerts that switch
+ quickly between active and recovered states are identified
+ as “flapping” and notifications are reduced.
nullable: true
type: object
properties:
look_back_window:
+ description: >-
+ The minimum number of runs in which the threshold must
+ be met.
maximum: 20
minimum: 2
type: number
status_change_threshold:
+ description: >-
+ The minimum number of times an alert must switch states
+ in the look back window.
maximum: 20
minimum: 2
type: number
@@ -2807,14 +2847,24 @@ paths:
- last_execution_date
flapping:
additionalProperties: false
+ description: >-
+ When flapping detection is turned on, alerts that switch
+ quickly between active and recovered states are identified
+ as “flapping” and notifications are reduced.
nullable: true
type: object
properties:
look_back_window:
+ description: >-
+ The minimum number of runs in which the threshold must
+ be met.
maximum: 20
minimum: 2
type: number
status_change_threshold:
+ description: >-
+ The minimum number of times an alert must switch
+ states in the look back window.
maximum: 20
minimum: 2
type: number
@@ -3852,14 +3902,24 @@ paths:
- last_execution_date
flapping:
additionalProperties: false
+ description: >-
+ When flapping detection is turned on, alerts that switch
+ quickly between active and recovered states are identified
+ as “flapping” and notifications are reduced.
nullable: true
type: object
properties:
look_back_window:
+ description: >-
+ The minimum number of runs in which the threshold must
+ be met.
maximum: 20
minimum: 2
type: number
status_change_threshold:
+ description: >-
+ The minimum number of times an alert must switch
+ states in the look back window.
maximum: 20
minimum: 2
type: number
diff --git a/oas_docs/output/kibana.yaml b/oas_docs/output/kibana.yaml
index 50fd92fdc8a9..82acbdb311f2 100644
--- a/oas_docs/output/kibana.yaml
+++ b/oas_docs/output/kibana.yaml
@@ -1367,14 +1367,24 @@ paths:
- last_execution_date
flapping:
additionalProperties: false
+ description: >-
+ When flapping detection is turned on, alerts that switch
+ quickly between active and recovered states are identified
+ as “flapping” and notifications are reduced.
nullable: true
type: object
properties:
look_back_window:
+ description: >-
+ The minimum number of runs in which the threshold must
+ be met.
maximum: 20
minimum: 2
type: number
status_change_threshold:
+ description: >-
+ The minimum number of times an alert must switch
+ states in the look back window.
maximum: 20
minimum: 2
type: number
@@ -1948,14 +1958,24 @@ paths:
type: boolean
flapping:
additionalProperties: false
+ description: >-
+ When flapping detection is turned on, alerts that switch
+ quickly between active and recovered states are identified
+ as “flapping” and notifications are reduced.
nullable: true
type: object
properties:
look_back_window:
+ description: >-
+ The minimum number of runs in which the threshold must
+ be met.
maximum: 20
minimum: 2
type: number
status_change_threshold:
+ description: >-
+ The minimum number of times an alert must switch states
+ in the look back window.
maximum: 20
minimum: 2
type: number
@@ -2273,14 +2293,24 @@ paths:
- last_execution_date
flapping:
additionalProperties: false
+ description: >-
+ When flapping detection is turned on, alerts that switch
+ quickly between active and recovered states are identified
+ as “flapping” and notifications are reduced.
nullable: true
type: object
properties:
look_back_window:
+ description: >-
+ The minimum number of runs in which the threshold must
+ be met.
maximum: 20
minimum: 2
type: number
status_change_threshold:
+ description: >-
+ The minimum number of times an alert must switch
+ states in the look back window.
maximum: 20
minimum: 2
type: number
@@ -2857,14 +2887,24 @@ paths:
- active
flapping:
additionalProperties: false
+ description: >-
+ When flapping detection is turned on, alerts that switch
+ quickly between active and recovered states are identified
+ as “flapping” and notifications are reduced.
nullable: true
type: object
properties:
look_back_window:
+ description: >-
+ The minimum number of runs in which the threshold must
+ be met.
maximum: 20
minimum: 2
type: number
status_change_threshold:
+ description: >-
+ The minimum number of times an alert must switch states
+ in the look back window.
maximum: 20
minimum: 2
type: number
@@ -3154,14 +3194,24 @@ paths:
- last_execution_date
flapping:
additionalProperties: false
+ description: >-
+ When flapping detection is turned on, alerts that switch
+ quickly between active and recovered states are identified
+ as “flapping” and notifications are reduced.
nullable: true
type: object
properties:
look_back_window:
+ description: >-
+ The minimum number of runs in which the threshold must
+ be met.
maximum: 20
minimum: 2
type: number
status_change_threshold:
+ description: >-
+ The minimum number of times an alert must switch
+ states in the look back window.
maximum: 20
minimum: 2
type: number
@@ -4191,14 +4241,24 @@ paths:
- last_execution_date
flapping:
additionalProperties: false
+ description: >-
+ When flapping detection is turned on, alerts that switch
+ quickly between active and recovered states are identified
+ as “flapping” and notifications are reduced.
nullable: true
type: object
properties:
look_back_window:
+ description: >-
+ The minimum number of runs in which the threshold must
+ be met.
maximum: 20
minimum: 2
type: number
status_change_threshold:
+ description: >-
+ The minimum number of times an alert must switch
+ states in the look back window.
maximum: 20
minimum: 2
type: number
diff --git a/src/plugins/expression_error/public/expression_renderers/__stories__/error_renderer.stories.tsx b/src/plugins/expression_error/public/expression_renderers/__stories__/error_renderer.stories.tsx
index 07451f1f2c32..b7f789f873de 100644
--- a/src/plugins/expression_error/public/expression_renderers/__stories__/error_renderer.stories.tsx
+++ b/src/plugins/expression_error/public/expression_renderers/__stories__/error_renderer.stories.tsx
@@ -9,6 +9,7 @@
import React from 'react';
import { storiesOf } from '@storybook/react';
+import { coreMock } from '@kbn/core/public/mocks';
import { Render } from '@kbn/presentation-util-plugin/public/__stories__';
import { getErrorRenderer } from '../error_renderer';
@@ -17,5 +18,8 @@ storiesOf('renderers/error', module).add('default', () => {
const config = {
error: thrownError,
};
- return ;
+
+ return (
+
+ );
});
diff --git a/src/plugins/expression_error/public/expression_renderers/debug_renderer.tsx b/src/plugins/expression_error/public/expression_renderers/debug_renderer.tsx
index c3d422003887..29fa69aa736b 100644
--- a/src/plugins/expression_error/public/expression_renderers/debug_renderer.tsx
+++ b/src/plugins/expression_error/public/expression_renderers/debug_renderer.tsx
@@ -17,7 +17,6 @@ import { i18n } from '@kbn/i18n';
import { withSuspense } from '@kbn/presentation-util-plugin/public';
import { KibanaThemeProvider } from '@kbn/react-kibana-context-theme';
import { KibanaErrorBoundary, KibanaErrorBoundaryProvider } from '@kbn/shared-ux-error-boundary';
-import { defaultTheme$ } from '@kbn/presentation-util-plugin/common';
import { JSON } from '../../common';
import { LazyDebugRenderComponent } from '../components';
@@ -38,8 +37,7 @@ const strings = {
};
export const getDebugRenderer =
- (theme$: Observable = defaultTheme$) =>
- (): ExpressionRenderDefinition => ({
+ (theme$: Observable) => (): ExpressionRenderDefinition => ({
name: 'debug',
displayName: strings.getDisplayName(),
help: strings.getHelpDescription(),
diff --git a/src/plugins/expression_error/public/expression_renderers/error_renderer.tsx b/src/plugins/expression_error/public/expression_renderers/error_renderer.tsx
index c7865525b21f..4ba3daa15d08 100644
--- a/src/plugins/expression_error/public/expression_renderers/error_renderer.tsx
+++ b/src/plugins/expression_error/public/expression_renderers/error_renderer.tsx
@@ -21,7 +21,6 @@ import {
import { KibanaThemeProvider } from '@kbn/react-kibana-context-theme';
import { KibanaErrorBoundary, KibanaErrorBoundaryProvider } from '@kbn/shared-ux-error-boundary';
import { withSuspense } from '@kbn/presentation-util-plugin/public';
-import { defaultTheme$ } from '@kbn/presentation-util-plugin/common';
import { ErrorRendererConfig } from '../../common/types';
import { LazyErrorRenderComponent } from '../components';
@@ -39,8 +38,7 @@ const errorStrings = {
const ErrorComponent = withSuspense(LazyErrorRenderComponent);
export const getErrorRenderer =
- (theme$: Observable = defaultTheme$) =>
- (): ExpressionRenderDefinition => ({
+ (theme$: Observable) => (): ExpressionRenderDefinition => ({
name: 'error',
displayName: errorStrings.getDisplayName(),
help: errorStrings.getHelpDescription(),
diff --git a/src/plugins/expression_image/public/expression_renderers/__stories__/image_renderer.stories.tsx b/src/plugins/expression_image/public/expression_renderers/__stories__/image_renderer.stories.tsx
index 02679899b112..07fb4db558bd 100644
--- a/src/plugins/expression_image/public/expression_renderers/__stories__/image_renderer.stories.tsx
+++ b/src/plugins/expression_image/public/expression_renderers/__stories__/image_renderer.stories.tsx
@@ -9,6 +9,7 @@
import React from 'react';
import { storiesOf } from '@storybook/react';
+import { coreMock } from '@kbn/core/public/mocks';
import { Render, waitFor } from '@kbn/presentation-util-plugin/public/__stories__';
import { getElasticLogo } from '@kbn/presentation-util-plugin/common';
import { getImageRenderer } from '../image_renderer';
@@ -20,7 +21,14 @@ const Renderer = ({ elasticLogo }: { elasticLogo: string }) => {
mode: ImageMode.COVER,
};
- return ;
+ return (
+
+ );
};
storiesOf('renderers/image', module).add(
diff --git a/src/plugins/expression_image/public/expression_renderers/image_renderer.tsx b/src/plugins/expression_image/public/expression_renderers/image_renderer.tsx
index 8954bd90dc97..e80281fc10f4 100644
--- a/src/plugins/expression_image/public/expression_renderers/image_renderer.tsx
+++ b/src/plugins/expression_image/public/expression_renderers/image_renderer.tsx
@@ -17,7 +17,7 @@ import {
IInterpreterRenderHandlers,
} from '@kbn/expressions-plugin/common';
import { i18n } from '@kbn/i18n';
-import { getElasticLogo, defaultTheme$, isValidUrl } from '@kbn/presentation-util-plugin/common';
+import { getElasticLogo, isValidUrl } from '@kbn/presentation-util-plugin/common';
import { KibanaThemeProvider } from '@kbn/react-kibana-context-theme';
import { KibanaErrorBoundary, KibanaErrorBoundaryProvider } from '@kbn/shared-ux-error-boundary';
import { ImageRendererConfig } from '../../common/types';
@@ -34,8 +34,7 @@ const strings = {
};
export const getImageRenderer =
- (theme$: Observable = defaultTheme$) =>
- (): ExpressionRenderDefinition => ({
+ (theme$: Observable) => (): ExpressionRenderDefinition => ({
name: 'image',
displayName: strings.getDisplayName(),
help: strings.getHelpDescription(),
diff --git a/src/plugins/expression_metric/public/expression_renderers/__stories__/metric_renderer.stories.tsx b/src/plugins/expression_metric/public/expression_renderers/__stories__/metric_renderer.stories.tsx
index 03c8f9d5048d..5438bb4b4287 100644
--- a/src/plugins/expression_metric/public/expression_renderers/__stories__/metric_renderer.stories.tsx
+++ b/src/plugins/expression_metric/public/expression_renderers/__stories__/metric_renderer.stories.tsx
@@ -9,6 +9,7 @@
import React, { CSSProperties } from 'react';
import { storiesOf } from '@storybook/react';
+import { coreMock } from '@kbn/core/public/mocks';
import { Style } from '@kbn/expressions-plugin/common';
import { Render } from '@kbn/presentation-util-plugin/public/__stories__';
import { getMetricRenderer } from '../metric_renderer';
@@ -37,6 +38,8 @@ const metricFontSpec: CSSProperties = {
color: '#b83c6f',
};
+const theme$ = coreMock.createStart().theme.theme$;
+
storiesOf('renderers/Metric', module)
.add('with null metric', () => {
const config: MetricRendererConfig = {
@@ -46,7 +49,7 @@ storiesOf('renderers/Metric', module)
label: '',
metricFormat: '',
};
- return ;
+ return ;
})
.add('with number metric', () => {
const config: MetricRendererConfig = {
@@ -56,7 +59,7 @@ storiesOf('renderers/Metric', module)
label: '',
metricFormat: '',
};
- return ;
+ return ;
})
.add('with string metric', () => {
const config: MetricRendererConfig = {
@@ -66,7 +69,7 @@ storiesOf('renderers/Metric', module)
label: '',
metricFormat: '',
};
- return ;
+ return ;
})
.add('with label', () => {
const config: MetricRendererConfig = {
@@ -76,7 +79,7 @@ storiesOf('renderers/Metric', module)
label: 'Average price',
metricFormat: '',
};
- return ;
+ return ;
})
.add('with number metric and a specified format', () => {
const config: MetricRendererConfig = {
@@ -86,7 +89,7 @@ storiesOf('renderers/Metric', module)
label: 'Average price',
metricFormat: '0.00%',
};
- return ;
+ return ;
})
.add('with formatted string metric and a specified format', () => {
const config: MetricRendererConfig = {
@@ -96,7 +99,7 @@ storiesOf('renderers/Metric', module)
label: 'Total Revenue',
metricFormat: '$0a',
};
- return ;
+ return ;
})
.add('with invalid metricFont', () => {
const config: MetricRendererConfig = {
@@ -106,5 +109,5 @@ storiesOf('renderers/Metric', module)
label: 'Total Revenue',
metricFormat: '$0a',
};
- return ;
+ return ;
});
diff --git a/src/plugins/expression_metric/public/expression_renderers/metric_renderer.tsx b/src/plugins/expression_metric/public/expression_renderers/metric_renderer.tsx
index b802f4f40daf..db4b8575d5e2 100644
--- a/src/plugins/expression_metric/public/expression_renderers/metric_renderer.tsx
+++ b/src/plugins/expression_metric/public/expression_renderers/metric_renderer.tsx
@@ -19,7 +19,6 @@ import {
import { i18n } from '@kbn/i18n';
import { KibanaThemeProvider } from '@kbn/react-kibana-context-theme';
import { KibanaErrorBoundary, KibanaErrorBoundaryProvider } from '@kbn/shared-ux-error-boundary';
-import { defaultTheme$ } from '@kbn/presentation-util-plugin/common';
import { MetricRendererConfig } from '../../common/types';
const strings = {
@@ -34,8 +33,7 @@ const strings = {
};
export const getMetricRenderer =
- (theme$: Observable = defaultTheme$) =>
- (): ExpressionRenderDefinition => ({
+ (theme$: Observable) => (): ExpressionRenderDefinition => ({
name: 'metric',
displayName: strings.getDisplayName(),
help: strings.getHelpDescription(),
diff --git a/src/plugins/expression_repeat_image/public/expression_renderers/__stories__/repeat_image_renderer.stories.tsx b/src/plugins/expression_repeat_image/public/expression_renderers/__stories__/repeat_image_renderer.stories.tsx
index fa666d98ebb9..a5f58b97970c 100644
--- a/src/plugins/expression_repeat_image/public/expression_renderers/__stories__/repeat_image_renderer.stories.tsx
+++ b/src/plugins/expression_repeat_image/public/expression_renderers/__stories__/repeat_image_renderer.stories.tsx
@@ -9,6 +9,7 @@
import React from 'react';
import { storiesOf } from '@storybook/react';
+import { coreMock } from '@kbn/core/public/mocks';
import { Render } from '@kbn/presentation-util-plugin/public/__stories__';
import { getElasticLogo, getElasticOutline } from '@kbn/presentation-util-plugin/common';
import { waitFor } from '@kbn/presentation-util-plugin/public/__stories__';
@@ -29,7 +30,13 @@ const Renderer = ({
emptyImage: elasticOutline,
};
- return ;
+ return (
+
+ );
};
storiesOf('enderers/repeatImage', module).add(
diff --git a/src/plugins/expression_repeat_image/public/expression_renderers/repeat_image_renderer.tsx b/src/plugins/expression_repeat_image/public/expression_renderers/repeat_image_renderer.tsx
index 6dcc13293706..9a3545988088 100644
--- a/src/plugins/expression_repeat_image/public/expression_renderers/repeat_image_renderer.tsx
+++ b/src/plugins/expression_repeat_image/public/expression_renderers/repeat_image_renderer.tsx
@@ -20,7 +20,7 @@ import { i18n } from '@kbn/i18n';
import { I18nProvider } from '@kbn/i18n-react';
import { KibanaThemeProvider } from '@kbn/react-kibana-context-theme';
import { KibanaErrorBoundary, KibanaErrorBoundaryProvider } from '@kbn/shared-ux-error-boundary';
-import { defaultTheme$, getElasticOutline, isValidUrl } from '@kbn/presentation-util-plugin/common';
+import { getElasticOutline, isValidUrl } from '@kbn/presentation-util-plugin/common';
import { RepeatImageRendererConfig } from '../../common/types';
const strings = {
@@ -35,8 +35,7 @@ const strings = {
};
export const getRepeatImageRenderer =
- (theme$: Observable = defaultTheme$) =>
- (): ExpressionRenderDefinition => ({
+ (theme$: Observable) => (): ExpressionRenderDefinition => ({
name: 'repeatImage',
displayName: strings.getDisplayName(),
help: strings.getHelpDescription(),
diff --git a/src/plugins/expression_reveal_image/public/expression_renderers/__stories__/reveal_image_renderer.stories.tsx b/src/plugins/expression_reveal_image/public/expression_renderers/__stories__/reveal_image_renderer.stories.tsx
index 0c1a2cb5ca16..664cc9711779 100644
--- a/src/plugins/expression_reveal_image/public/expression_renderers/__stories__/reveal_image_renderer.stories.tsx
+++ b/src/plugins/expression_reveal_image/public/expression_renderers/__stories__/reveal_image_renderer.stories.tsx
@@ -9,6 +9,7 @@
import React from 'react';
import { storiesOf } from '@storybook/react';
+import { coreMock } from '@kbn/core/public/mocks';
import { getElasticOutline, getElasticLogo } from '@kbn/presentation-util-plugin/common';
import { Render, waitFor } from '@kbn/presentation-util-plugin/public/__stories__';
import { getRevealImageRenderer } from '..';
@@ -27,7 +28,13 @@ const Renderer = ({
origin: Origin.LEFT,
percent: 0.45,
};
- return ;
+
+ return (
+
+ );
};
storiesOf('renderers/revealImage', module).add(
diff --git a/src/plugins/expression_reveal_image/public/expression_renderers/reveal_image_renderer.tsx b/src/plugins/expression_reveal_image/public/expression_renderers/reveal_image_renderer.tsx
index 5beb58ef60f3..fbfe479225ec 100644
--- a/src/plugins/expression_reveal_image/public/expression_renderers/reveal_image_renderer.tsx
+++ b/src/plugins/expression_reveal_image/public/expression_renderers/reveal_image_renderer.tsx
@@ -20,7 +20,6 @@ import { i18n } from '@kbn/i18n';
import { I18nProvider } from '@kbn/i18n-react';
import { KibanaThemeProvider } from '@kbn/react-kibana-context-theme';
import { KibanaErrorBoundary, KibanaErrorBoundaryProvider } from '@kbn/shared-ux-error-boundary';
-import { defaultTheme$ } from '@kbn/presentation-util-plugin/common';
import { RevealImageRendererConfig } from '../../common/types';
export const strings = {
@@ -35,8 +34,7 @@ export const strings = {
};
export const getRevealImageRenderer =
- (theme$: Observable = defaultTheme$) =>
- (): ExpressionRenderDefinition => ({
+ (theme$: Observable) => (): ExpressionRenderDefinition => ({
name: 'revealImage',
displayName: strings.getDisplayName(),
help: strings.getHelpDescription(),
diff --git a/src/plugins/expression_shape/public/expression_renderers/__stories__/progress_renderer.stories.tsx b/src/plugins/expression_shape/public/expression_renderers/__stories__/progress_renderer.stories.tsx
index 22e8864d1b7d..0f93314ee081 100644
--- a/src/plugins/expression_shape/public/expression_renderers/__stories__/progress_renderer.stories.tsx
+++ b/src/plugins/expression_shape/public/expression_renderers/__stories__/progress_renderer.stories.tsx
@@ -10,6 +10,7 @@
import React from 'react';
import { storiesOf } from '@storybook/react';
import { Render } from '@kbn/presentation-util-plugin/public/__stories__';
+import { coreMock } from '@kbn/core/public/mocks';
import { getProgressRenderer } from '../progress_renderer';
import { Progress } from '../../../common';
@@ -30,5 +31,7 @@ storiesOf('renderers/progress', module).add('default', () => {
valueWeight: 15,
};
- return ;
+ return (
+
+ );
});
diff --git a/src/plugins/expression_shape/public/expression_renderers/__stories__/shape_renderer.stories.tsx b/src/plugins/expression_shape/public/expression_renderers/__stories__/shape_renderer.stories.tsx
index 77b54ae87239..d089174c6032 100644
--- a/src/plugins/expression_shape/public/expression_renderers/__stories__/shape_renderer.stories.tsx
+++ b/src/plugins/expression_shape/public/expression_renderers/__stories__/shape_renderer.stories.tsx
@@ -9,6 +9,7 @@
import React from 'react';
import { storiesOf } from '@storybook/react';
+import { coreMock } from '@kbn/core/public/mocks';
import { Render } from '@kbn/presentation-util-plugin/public/__stories__';
import { getShapeRenderer } from '..';
import { Shape } from '../../../common/types';
@@ -23,5 +24,7 @@ storiesOf('renderers/shape', module).add('default', () => {
maintainAspect: true,
};
- return ;
+ return (
+
+ );
});
diff --git a/src/plugins/expression_shape/public/expression_renderers/progress_renderer.tsx b/src/plugins/expression_shape/public/expression_renderers/progress_renderer.tsx
index 80904cf12f2b..ed7629a7d87a 100644
--- a/src/plugins/expression_shape/public/expression_renderers/progress_renderer.tsx
+++ b/src/plugins/expression_shape/public/expression_renderers/progress_renderer.tsx
@@ -20,7 +20,6 @@ import { i18n } from '@kbn/i18n';
import { I18nProvider } from '@kbn/i18n-react';
import { KibanaThemeProvider } from '@kbn/react-kibana-context-theme';
import { KibanaErrorBoundary, KibanaErrorBoundaryProvider } from '@kbn/shared-ux-error-boundary';
-import { defaultTheme$ } from '@kbn/presentation-util-plugin/common';
import { ProgressRendererConfig } from '../../common/types';
const strings = {
@@ -35,8 +34,7 @@ const strings = {
};
export const getProgressRenderer =
- (theme$: Observable = defaultTheme$) =>
- (): ExpressionRenderDefinition => ({
+ (theme$: Observable) => (): ExpressionRenderDefinition => ({
name: 'progress',
displayName: strings.getDisplayName(),
help: strings.getHelpDescription(),
diff --git a/src/plugins/expression_shape/public/expression_renderers/shape_renderer.tsx b/src/plugins/expression_shape/public/expression_renderers/shape_renderer.tsx
index 06c442ad2d8c..650033aa4542 100644
--- a/src/plugins/expression_shape/public/expression_renderers/shape_renderer.tsx
+++ b/src/plugins/expression_shape/public/expression_renderers/shape_renderer.tsx
@@ -20,7 +20,6 @@ import { i18n } from '@kbn/i18n';
import { I18nProvider } from '@kbn/i18n-react';
import { KibanaThemeProvider } from '@kbn/react-kibana-context-theme';
import { KibanaErrorBoundary, KibanaErrorBoundaryProvider } from '@kbn/shared-ux-error-boundary';
-import { defaultTheme$ } from '@kbn/presentation-util-plugin/common';
import { ShapeRendererConfig } from '../../common/types';
const strings = {
@@ -35,8 +34,7 @@ const strings = {
};
export const getShapeRenderer =
- (theme$: Observable = defaultTheme$) =>
- (): ExpressionRenderDefinition => ({
+ (theme$: Observable) => (): ExpressionRenderDefinition => ({
name: 'shape',
displayName: strings.getDisplayName(),
help: strings.getHelpDescription(),
diff --git a/src/plugins/presentation_util/common/index.ts b/src/plugins/presentation_util/common/index.ts
index 6917c52f4edc..b0350ca4a20f 100644
--- a/src/plugins/presentation_util/common/index.ts
+++ b/src/plugins/presentation_util/common/index.ts
@@ -36,7 +36,6 @@ export {
} from './labs';
export {
- defaultTheme$,
getElasticLogo,
getElasticOutline,
isValidUrl,
diff --git a/src/plugins/presentation_util/common/lib/utils/default_theme.ts b/src/plugins/presentation_util/common/lib/utils/default_theme.ts
deleted file mode 100644
index 9c86456bc251..000000000000
--- a/src/plugins/presentation_util/common/lib/utils/default_theme.ts
+++ /dev/null
@@ -1,15 +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", the "GNU Affero General Public License v3.0 only", and the "Server Side
- * Public License v 1"; you may not use this file except in compliance with, at
- * your election, the "Elastic License 2.0", the "GNU Affero General Public
- * License v3.0 only", or the "Server Side Public License, v 1".
- */
-
-import type { CoreTheme } from '@kbn/core/public';
-import { Observable } from 'rxjs';
-
-export const defaultTheme$: Observable = new Observable((subscriber) =>
- subscriber.next({ darkMode: false })
-);
diff --git a/src/plugins/presentation_util/common/lib/utils/index.ts b/src/plugins/presentation_util/common/lib/utils/index.ts
index 20b1d8450e5a..091aa216aa83 100644
--- a/src/plugins/presentation_util/common/lib/utils/index.ts
+++ b/src/plugins/presentation_util/common/lib/utils/index.ts
@@ -11,7 +11,6 @@ export * from './dataurl';
export * from './httpurl';
export * from './resolve_dataurl';
export * from './url';
-export { defaultTheme$ } from './default_theme';
export async function getElasticLogo() {
return await import('./elastic_logo');
diff --git a/src/plugins/unified_search/public/dataview_picker/change_dataview.styles.ts b/src/plugins/unified_search/public/dataview_picker/change_dataview.styles.ts
index 9727c8f6e159..21ece7f82e88 100644
--- a/src/plugins/unified_search/public/dataview_picker/change_dataview.styles.ts
+++ b/src/plugins/unified_search/public/dataview_picker/change_dataview.styles.ts
@@ -12,15 +12,18 @@ import { calculateWidthFromEntries } from '@kbn/calculate-width-from-char-count'
import { DataViewListItemEnhanced } from './dataview_list';
const MIN_WIDTH = 300;
+const MAX_MOBILE_WIDTH = 350;
export const changeDataViewStyles = ({
fullWidth,
dataViewsList,
theme,
+ isMobile,
}: {
fullWidth?: boolean;
dataViewsList: DataViewListItemEnhanced[];
theme: EuiThemeComputed;
+ isMobile: boolean;
}) => {
return {
trigger: {
@@ -30,7 +33,10 @@ export const changeDataViewStyles = ({
borderBottomLeftRadius: 0,
},
popoverContent: {
- width: calculateWidthFromEntries(dataViewsList, ['name', 'id'], { minWidth: MIN_WIDTH }),
+ width: calculateWidthFromEntries(dataViewsList, ['name', 'id'], {
+ minWidth: MIN_WIDTH,
+ ...(isMobile && { maxWidth: MAX_MOBILE_WIDTH }),
+ }),
},
};
};
diff --git a/src/plugins/unified_search/public/dataview_picker/change_dataview.tsx b/src/plugins/unified_search/public/dataview_picker/change_dataview.tsx
index d89621d59867..06ed558ce7a0 100644
--- a/src/plugins/unified_search/public/dataview_picker/change_dataview.tsx
+++ b/src/plugins/unified_search/public/dataview_picker/change_dataview.tsx
@@ -17,6 +17,7 @@ import {
EuiContextMenuItem,
useEuiTheme,
useGeneratedHtmlId,
+ useIsWithinBreakpoints,
EuiIcon,
EuiText,
EuiContextMenuPanelProps,
@@ -68,10 +69,13 @@ export function ChangeDataView({
const kibana = useKibana();
const { application, data, dataViews, dataViewEditor } = kibana.services;
+ const isMobile = useIsWithinBreakpoints(['xs']);
+
const styles = changeDataViewStyles({
fullWidth: trigger.fullWidth,
dataViewsList,
theme: euiTheme,
+ isMobile,
});
// Create a reusable id to ensure search input is the first focused item in the popover even though it's not the first item
diff --git a/test/functional/screenshots/.empty b/test/functional/screenshots/.empty
deleted file mode 100644
index e69de29bb2d1..000000000000
diff --git a/x-pack/plugins/alerting/common/routes/rule/common/flapping/schemas/v1.ts b/x-pack/plugins/alerting/common/routes/rule/common/flapping/schemas/v1.ts
index 4844a9e808ef..acdd35854df3 100644
--- a/x-pack/plugins/alerting/common/routes/rule/common/flapping/schemas/v1.ts
+++ b/x-pack/plugins/alerting/common/routes/rule/common/flapping/schemas/v1.ts
@@ -17,13 +17,24 @@ import { validateFlapping as validateFlappingV1 } from '../../../validation/vali
export const flappingSchema = schema.object(
{
look_back_window: schema.number({
+ meta: { description: 'The minimum number of runs in which the threshold must be met.' },
min: MIN_LOOK_BACK_WINDOW_V1,
max: MAX_LOOK_BACK_WINDOW_V1,
}),
status_change_threshold: schema.number({
+ meta: {
+ description:
+ 'The minimum number of times an alert must switch states in the look back window.',
+ },
min: MIN_STATUS_CHANGE_THRESHOLD_V1,
max: MAX_STATUS_CHANGE_THRESHOLD_V1,
}),
},
- { validate: validateFlappingV1 }
+ {
+ validate: validateFlappingV1,
+ meta: {
+ description:
+ 'When flapping detection is turned on, alerts that switch quickly between active and recovered states are identified as “flapping” and notifications are reduced.',
+ },
+ }
);
diff --git a/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/agent_explorer/index.ts b/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/agent_explorer/index.ts
index f77b13923930..ae05cb6b89cb 100644
--- a/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/agent_explorer/index.ts
+++ b/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/agent_explorer/index.ts
@@ -5,7 +5,7 @@
* 2.0.
*/
-import { DeploymentAgnosticFtrProviderContext } from '../../../../ftr_provider_context';
+import type { DeploymentAgnosticFtrProviderContext } from '../../../../ftr_provider_context';
export default function ({ loadTestFile }: DeploymentAgnosticFtrProviderContext) {
describe('agent_explorer', () => {
diff --git a/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/alerts/error_count_threshold.spec.ts b/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/alerts/error_count_threshold.spec.ts
index e0b9e1b022b4..c515263f09b2 100644
--- a/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/alerts/error_count_threshold.spec.ts
+++ b/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/alerts/error_count_threshold.spec.ts
@@ -10,7 +10,7 @@ import { errorCountActionVariables } from '@kbn/apm-plugin/server/routes/alerts/
import { apm, timerange } from '@kbn/apm-synthtrace-client';
import expect from '@kbn/expect';
import { omit } from 'lodash';
-import { ApmSynthtraceEsClient } from '@kbn/apm-synthtrace';
+import type { ApmSynthtraceEsClient } from '@kbn/apm-synthtrace';
import type { RoleCredentials } from '../../../../services';
import type { DeploymentAgnosticFtrProviderContext } from '../../../../ftr_provider_context';
import {
diff --git a/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/alerts/index.ts b/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/alerts/index.ts
index 71661e4cbc8b..3796b4253e60 100644
--- a/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/alerts/index.ts
+++ b/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/alerts/index.ts
@@ -5,7 +5,7 @@
* 2.0.
*/
-import { DeploymentAgnosticFtrProviderContext } from '../../../../ftr_provider_context';
+import type { DeploymentAgnosticFtrProviderContext } from '../../../../ftr_provider_context';
export default function ({ loadTestFile }: DeploymentAgnosticFtrProviderContext) {
describe('alerts', () => {
diff --git a/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/alerts/preview_chart_error_count.spec.ts b/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/alerts/preview_chart_error_count.spec.ts
index d6792400fc2b..38bf9d4eade4 100644
--- a/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/alerts/preview_chart_error_count.spec.ts
+++ b/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/alerts/preview_chart_error_count.spec.ts
@@ -7,7 +7,7 @@
import type { PreviewChartResponseItem } from '@kbn/apm-plugin/server/routes/alerts/route';
import expect from '@kbn/expect';
-import { ApmSynthtraceEsClient } from '@kbn/apm-synthtrace';
+import type { ApmSynthtraceEsClient } from '@kbn/apm-synthtrace';
import {
ERROR_GROUP_ID,
SERVICE_ENVIRONMENT,
diff --git a/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/alerts/preview_chart_error_rate.spec.ts b/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/alerts/preview_chart_error_rate.spec.ts
index 3e5c0753fbc1..167b114e755c 100644
--- a/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/alerts/preview_chart_error_rate.spec.ts
+++ b/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/alerts/preview_chart_error_rate.spec.ts
@@ -13,7 +13,7 @@ import {
} from '@kbn/observability-shared-plugin/common';
import type { PreviewChartResponseItem } from '@kbn/apm-plugin/server/routes/alerts/route';
import expect from '@kbn/expect';
-import { ApmSynthtraceEsClient } from '@kbn/apm-synthtrace';
+import type { ApmSynthtraceEsClient } from '@kbn/apm-synthtrace';
import type { DeploymentAgnosticFtrProviderContext } from '../../../../ftr_provider_context';
import { generateErrorData } from './generate_data';
diff --git a/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/cold_start/index.ts b/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/cold_start/index.ts
index a5d8045f227d..108340514a0c 100644
--- a/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/cold_start/index.ts
+++ b/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/cold_start/index.ts
@@ -5,7 +5,7 @@
* 2.0.
*/
-import { DeploymentAgnosticFtrProviderContext } from '../../../../ftr_provider_context';
+import type { DeploymentAgnosticFtrProviderContext } from '../../../../ftr_provider_context';
export default function ({ loadTestFile }: DeploymentAgnosticFtrProviderContext) {
describe('cold_start', () => {
diff --git a/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/correlations/index.ts b/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/correlations/index.ts
index 660556edb8d7..ffa54dbe7bb5 100644
--- a/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/correlations/index.ts
+++ b/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/correlations/index.ts
@@ -5,7 +5,7 @@
* 2.0.
*/
-import { DeploymentAgnosticFtrProviderContext } from '../../../../ftr_provider_context';
+import type { DeploymentAgnosticFtrProviderContext } from '../../../../ftr_provider_context';
export default function ({ loadTestFile }: DeploymentAgnosticFtrProviderContext) {
describe('correlations', () => {
diff --git a/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/custom_dashboards/index.ts b/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/custom_dashboards/index.ts
index 77f12ca0f88d..a46024ff1ab1 100644
--- a/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/custom_dashboards/index.ts
+++ b/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/custom_dashboards/index.ts
@@ -5,7 +5,7 @@
* 2.0.
*/
-import { DeploymentAgnosticFtrProviderContext } from '../../../../ftr_provider_context';
+import type { DeploymentAgnosticFtrProviderContext } from '../../../../ftr_provider_context';
export default function ({ loadTestFile }: DeploymentAgnosticFtrProviderContext) {
describe('custom_dashboards', () => {
diff --git a/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/data_view/index.ts b/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/data_view/index.ts
index 9412ddca7cbc..c81b643e6263 100644
--- a/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/data_view/index.ts
+++ b/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/data_view/index.ts
@@ -5,7 +5,7 @@
* 2.0.
*/
-import { DeploymentAgnosticFtrProviderContext } from '../../../../ftr_provider_context';
+import type { DeploymentAgnosticFtrProviderContext } from '../../../../ftr_provider_context';
export default function ({ loadTestFile }: DeploymentAgnosticFtrProviderContext) {
describe('data_view', () => {
diff --git a/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/dependencies/index.ts b/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/dependencies/index.ts
index 2acf449ce923..46ad39938055 100644
--- a/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/dependencies/index.ts
+++ b/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/dependencies/index.ts
@@ -5,7 +5,7 @@
* 2.0.
*/
-import { DeploymentAgnosticFtrProviderContext } from '../../../../ftr_provider_context';
+import type { DeploymentAgnosticFtrProviderContext } from '../../../../ftr_provider_context';
export default function ({ loadTestFile }: DeploymentAgnosticFtrProviderContext) {
describe('custom_dashboards', () => {
diff --git a/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/dependencies/top_dependencies.spec.ts b/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/dependencies/top_dependencies.spec.ts
index 0fa88b67d337..21e990a1dbb5 100644
--- a/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/dependencies/top_dependencies.spec.ts
+++ b/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/dependencies/top_dependencies.spec.ts
@@ -7,7 +7,7 @@
import expect from '@kbn/expect';
import { APIReturnType } from '@kbn/apm-plugin/public/services/rest/create_call_apm_api';
import { NodeType, DependencyNode } from '@kbn/apm-plugin/common/connections';
-import { ApmSynthtraceEsClient } from '@kbn/apm-synthtrace';
+import type { ApmSynthtraceEsClient } from '@kbn/apm-synthtrace';
import type { DeploymentAgnosticFtrProviderContext } from '../../../../ftr_provider_context';
import { dataConfig, generateData } from './generate_data';
import { roundNumber } from '../utils/common';
diff --git a/x-pack/test/apm_api_integration/tests/diagnostics/apm_events.spec.ts b/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/diagnostics/apm_events.spec.ts
similarity index 93%
rename from x-pack/test/apm_api_integration/tests/diagnostics/apm_events.spec.ts
rename to x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/diagnostics/apm_events.spec.ts
index 1abace6c77f4..4ca60e15fa19 100644
--- a/x-pack/test/apm_api_integration/tests/diagnostics/apm_events.spec.ts
+++ b/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/diagnostics/apm_events.spec.ts
@@ -9,19 +9,18 @@ import expect from '@kbn/expect';
import { apm, timerange } from '@kbn/apm-synthtrace-client';
import { APIReturnType } from '@kbn/apm-plugin/public/services/rest/create_call_apm_api';
import { sumBy } from 'lodash';
-import { FtrProviderContext } from '../../common/ftr_provider_context';
+import type { ApmSynthtraceEsClient } from '@kbn/apm-synthtrace';
+import type { DeploymentAgnosticFtrProviderContext } from '../../../../ftr_provider_context';
-export default function ApiTest({ getService }: FtrProviderContext) {
- const registry = getService('registry');
- const apmApiClient = getService('apmApiClient');
+export default function ApiTest({ getService }: DeploymentAgnosticFtrProviderContext) {
+ const apmApiClient = getService('apmApi');
const es = getService('es');
- const apmSynthtraceEsClient = getService('apmSynthtraceEsClient');
+ const synthtrace = getService('synthtrace');
const start = new Date('2021-01-01T00:00:00.000Z').getTime();
const end = new Date('2021-01-01T00:15:00.000Z').getTime() - 1;
- // FLAKY: https://github.com/elastic/kibana/issues/177144
- registry.when('Diagnostics: APM Events', { config: 'basic', archives: [] }, () => {
+ describe('Diagnostics: APM Events', () => {
describe('When there is no data', () => {
before(async () => {
// delete APM data streams
@@ -38,10 +37,13 @@ export default function ApiTest({ getService }: FtrProviderContext) {
});
describe('When data is ingested', () => {
+ let apmSynthtraceEsClient: ApmSynthtraceEsClient;
+
before(async () => {
const instance = apm
.service({ name: 'synth-go', environment: 'production', agentName: 'go' })
.instance('instance-a');
+ apmSynthtraceEsClient = await synthtrace.createApmSynthtraceEsClient();
await apmSynthtraceEsClient.index(
timerange(start, end)
diff --git a/x-pack/test/apm_api_integration/tests/diagnostics/data_streams.spec.ts b/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/diagnostics/data_streams.spec.ts
similarity index 82%
rename from x-pack/test/apm_api_integration/tests/diagnostics/data_streams.spec.ts
rename to x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/diagnostics/data_streams.spec.ts
index 80fa34dbaa00..1d37c668e91f 100644
--- a/x-pack/test/apm_api_integration/tests/diagnostics/data_streams.spec.ts
+++ b/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/diagnostics/data_streams.spec.ts
@@ -7,20 +7,18 @@
import expect from '@kbn/expect';
import { apm, timerange } from '@kbn/apm-synthtrace-client';
-import { FtrProviderContext } from '../../common/ftr_provider_context';
+import type { ApmSynthtraceEsClient } from '@kbn/apm-synthtrace';
+import type { DeploymentAgnosticFtrProviderContext } from '../../../../ftr_provider_context';
-export default function ApiTest({ getService }: FtrProviderContext) {
- const registry = getService('registry');
- const apmApiClient = getService('apmApiClient');
+export default function ApiTest({ getService }: DeploymentAgnosticFtrProviderContext) {
+ const apmApiClient = getService('apmApi');
const es = getService('es');
- const apmSynthtraceEsClient = getService('apmSynthtraceEsClient');
- const synthtraceKibanaClient = getService('synthtraceKibanaClient');
+ const synthtrace = getService('synthtrace');
const start = new Date('2021-01-01T00:00:00.000Z').getTime();
const end = new Date('2021-01-01T00:15:00.000Z').getTime() - 1;
- // FLAKY: https://github.com/elastic/kibana/issues/177245
- registry.when('Diagnostics: Data streams', { config: 'basic', archives: [] }, () => {
+ describe('Diagnostics: Data streams', () => {
describe('When there is no data', () => {
before(async () => {
// delete APM data streams
@@ -45,9 +43,10 @@ export default function ApiTest({ getService }: FtrProviderContext) {
});
describe('When data is ingested', () => {
+ let apmSynthtraceEsClient: ApmSynthtraceEsClient;
+
before(async () => {
- const latestVersion = await synthtraceKibanaClient.fetchLatestApmPackageVersion();
- await synthtraceKibanaClient.installApmPackage(latestVersion);
+ apmSynthtraceEsClient = await synthtrace.createApmSynthtraceEsClient();
const instance = apm
.service({ name: 'synth-go', environment: 'production', agentName: 'go' })
diff --git a/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/diagnostics/index.ts b/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/diagnostics/index.ts
new file mode 100644
index 000000000000..192771d3fc75
--- /dev/null
+++ b/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/diagnostics/index.ts
@@ -0,0 +1,19 @@
+/*
+ * 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 type { DeploymentAgnosticFtrProviderContext } from '../../../../ftr_provider_context';
+
+export default function ({ loadTestFile }: DeploymentAgnosticFtrProviderContext) {
+ describe('diagnostics', () => {
+ loadTestFile(require.resolve('./apm_events.spec.ts'));
+ loadTestFile(require.resolve('./data_streams.spec.ts'));
+ loadTestFile(require.resolve('./index_pattern_settings.spec.ts'));
+ loadTestFile(require.resolve('./index_templates.spec.ts'));
+ loadTestFile(require.resolve('./indices.spec.ts'));
+ loadTestFile(require.resolve('./privileges.spec.ts'));
+ });
+}
diff --git a/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/diagnostics/index_pattern_settings.spec.ts b/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/diagnostics/index_pattern_settings.spec.ts
new file mode 100644
index 000000000000..8235e2a179d4
--- /dev/null
+++ b/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/diagnostics/index_pattern_settings.spec.ts
@@ -0,0 +1,108 @@
+/*
+ * 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 expect from '@kbn/expect';
+import { apm, timerange } from '@kbn/apm-synthtrace-client';
+import type { ApmSynthtraceEsClient } from '@kbn/apm-synthtrace';
+import { uniq } from 'lodash';
+import type { DeploymentAgnosticFtrProviderContext } from '../../../../ftr_provider_context';
+
+export default function ApiTest({ getService }: DeploymentAgnosticFtrProviderContext) {
+ const apmApiClient = getService('apmApi');
+ const synthtrace = getService('synthtrace');
+
+ const start = new Date('2021-01-01T00:00:00.000Z').getTime();
+ const end = new Date('2021-01-01T00:15:00.000Z').getTime() - 1;
+
+ describe('Diagnostics: Index pattern settings', () => {
+ describe('When data is ingested', () => {
+ let apmSynthtraceEsClient: ApmSynthtraceEsClient;
+
+ before(async () => {
+ apmSynthtraceEsClient = await synthtrace.createApmSynthtraceEsClient();
+
+ const instance = apm
+ .service({ name: 'synth-go', environment: 'production', agentName: 'go' })
+ .instance('instance-a');
+ await apmSynthtraceEsClient.index(
+ timerange(start, end)
+ .interval('1m')
+ .rate(30)
+ .generator((timestamp) =>
+ instance
+ .transaction({ transactionName: 'GET /users' })
+ .timestamp(timestamp)
+ .duration(100)
+ .success()
+ )
+ );
+ });
+
+ after(() => apmSynthtraceEsClient.clean());
+
+ it('returns APM index templates', async () => {
+ const apmIndexTemplatesPatterns = ['apm', 'otel'];
+
+ const { status, body } = await apmApiClient.adminUser({
+ endpoint: 'GET /internal/apm/diagnostics',
+ });
+ expect(status).to.be(200);
+
+ // filtering the array for unique index templates because they get duplicated across different index patterns
+ const uniqueTemplateNames = uniq(
+ body.indexTemplatesByIndexPattern.flatMap(({ indexTemplates }) => {
+ return indexTemplates?.map(({ templateName }) => templateName);
+ })
+ );
+
+ // filter only APM releated indices
+ const apmTemplateNames = uniqueTemplateNames.filter(
+ (templateName) =>
+ templateName.endsWith('@template') &&
+ apmIndexTemplatesPatterns.some((pattern) => templateName.includes(pattern))
+ );
+
+ // sort alphabeticaly before comparing because an order is different between testing environments
+ const sortedApmTemplates = apmTemplateNames.sort();
+
+ expect(sortedApmTemplates).to.eql([
+ 'logs-apm.app@template',
+ 'logs-apm.error@template',
+ 'logs-otel@template',
+ 'metrics-apm.app@template',
+ 'metrics-apm.internal@template',
+ 'metrics-apm.service_destination.10m@template',
+ 'metrics-apm.service_destination.1m@template',
+ 'metrics-apm.service_destination.60m@template',
+ 'metrics-apm.service_summary.10m@template',
+ 'metrics-apm.service_summary.1m@template',
+ 'metrics-apm.service_summary.60m@template',
+ 'metrics-apm.service_transaction.10m@template',
+ 'metrics-apm.service_transaction.1m@template',
+ 'metrics-apm.service_transaction.60m@template',
+ 'metrics-apm.transaction.10m@template',
+ 'metrics-apm.transaction.1m@template',
+ 'metrics-apm.transaction.60m@template',
+ 'metrics-otel@template',
+ 'metrics-service_summary.10m.otel@template',
+ 'metrics-service_summary.1m.otel@template',
+ 'metrics-service_summary.60m.otel@template',
+ 'metrics-service_transaction.10m.otel@template',
+ 'metrics-service_transaction.1m.otel@template',
+ 'metrics-service_transaction.60m.otel@template',
+ 'metrics-transaction.10m.otel@template',
+ 'metrics-transaction.1m.otel@template',
+ 'metrics-transaction.60m.otel@template',
+ 'traces-apm.rum@template',
+ 'traces-apm.sampled@template',
+ 'traces-apm@template',
+ 'traces-otel@template',
+ ]);
+ });
+ });
+ });
+}
diff --git a/x-pack/test/apm_api_integration/tests/diagnostics/index_templates.spec.ts b/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/diagnostics/index_templates.spec.ts
similarity index 51%
rename from x-pack/test/apm_api_integration/tests/diagnostics/index_templates.spec.ts
rename to x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/diagnostics/index_templates.spec.ts
index 1bbc799b3bf7..aa45a93a3ce7 100644
--- a/x-pack/test/apm_api_integration/tests/diagnostics/index_templates.spec.ts
+++ b/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/diagnostics/index_templates.spec.ts
@@ -7,44 +7,22 @@
import expect from '@kbn/expect';
import { apm, timerange } from '@kbn/apm-synthtrace-client';
-import { getApmIndexTemplateNames } from '@kbn/apm-plugin/server/routes/diagnostics/helpers/get_apm_index_template_names';
-import { FtrProviderContext } from '../../common/ftr_provider_context';
+import type { ApmSynthtraceEsClient } from '@kbn/apm-synthtrace';
+import type { DeploymentAgnosticFtrProviderContext } from '../../../../ftr_provider_context';
-export default function ApiTest({ getService }: FtrProviderContext) {
- const registry = getService('registry');
- const apmApiClient = getService('apmApiClient');
- const es = getService('es');
- const apmSynthtraceEsClient = getService('apmSynthtraceEsClient');
- const synthtraceKibanaClient = getService('synthtraceKibanaClient');
+export default function ApiTest({ getService }: DeploymentAgnosticFtrProviderContext) {
+ const apmApiClient = getService('apmApi');
+ const synthtrace = getService('synthtrace');
const start = new Date('2021-01-01T00:00:00.000Z').getTime();
const end = new Date('2021-01-01T00:15:00.000Z').getTime() - 1;
- registry.when.skip('Diagnostics: Index Templates', { config: 'basic', archives: [] }, () => {
- describe('When there is no data', () => {
- before(async () => {
- // delete APM index templates
- await es.indices.deleteIndexTemplate({
- name: Object.values(getApmIndexTemplateNames()).flat(),
- });
- });
-
- it('verifies that none of the default APM index templates exists`', async () => {
- const { status, body } = await apmApiClient.adminUser({
- endpoint: 'GET /internal/apm/diagnostics',
- });
- expect(status).to.be(200);
- const noApmIndexTemplateExists = body.apmIndexTemplates.every(
- ({ exists }) => exists === false
- );
- expect(noApmIndexTemplateExists).to.eql(true);
- });
- });
-
+ describe('Diagnostics: Index Templates', () => {
describe('When data is ingested', () => {
+ let apmSynthtraceEsClient: ApmSynthtraceEsClient;
+
before(async () => {
- const latestVersion = await synthtraceKibanaClient.fetchLatestApmPackageVersion();
- await synthtraceKibanaClient.installApmPackage(latestVersion);
+ apmSynthtraceEsClient = await synthtrace.createApmSynthtraceEsClient();
const instance = apm
.service({ name: 'synth-go', environment: 'production', agentName: 'go' })
diff --git a/x-pack/test/apm_api_integration/tests/diagnostics/indices.spec.ts b/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/diagnostics/indices.spec.ts
similarity index 88%
rename from x-pack/test/apm_api_integration/tests/diagnostics/indices.spec.ts
rename to x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/diagnostics/indices.spec.ts
index 477824524b48..92976e6bce88 100644
--- a/x-pack/test/apm_api_integration/tests/diagnostics/indices.spec.ts
+++ b/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/diagnostics/indices.spec.ts
@@ -8,20 +8,20 @@
import expect from '@kbn/expect';
import { apm, timerange } from '@kbn/apm-synthtrace-client';
import { omit } from 'lodash';
-import { FtrProviderContext } from '../../common/ftr_provider_context';
+import type { ApmSynthtraceEsClient } from '@kbn/apm-synthtrace';
+import type { DeploymentAgnosticFtrProviderContext } from '../../../../ftr_provider_context';
-export default function ApiTest({ getService }: FtrProviderContext) {
- const registry = getService('registry');
- const apmApiClient = getService('apmApiClient');
- const apmSynthtraceEsClient = getService('apmSynthtraceEsClient');
+export default function ApiTest({ getService }: DeploymentAgnosticFtrProviderContext) {
+ const apmApiClient = getService('apmApi');
+ const synthtrace = getService('synthtrace');
const es = getService('es');
- const synthtraceKibanaClient = getService('synthtraceKibanaClient');
const start = new Date('2021-01-01T00:00:00.000Z').getTime();
const end = new Date('2021-01-01T00:15:00.000Z').getTime() - 1;
- // FLAKY: https://github.com/elastic/kibana/pull/177039
- registry.when.skip('Diagnostics: Indices', { config: 'basic', archives: [] }, () => {
+ let apmSynthtraceEsClient: ApmSynthtraceEsClient;
+
+ describe('Diagnostics: Indices', () => {
describe.skip('When there is no data', () => {
it('returns empty response`', async () => {
const { status, body } = await apmApiClient.adminUser({
@@ -39,6 +39,7 @@ export default function ApiTest({ getService }: FtrProviderContext) {
const instance = apm
.service({ name: 'synth-go', environment: 'production', agentName: 'go' })
.instance('instance-a');
+ apmSynthtraceEsClient = await synthtrace.createApmSynthtraceEsClient();
await apmSynthtraceEsClient.index(
timerange(start, end)
@@ -92,8 +93,6 @@ export default function ApiTest({ getService }: FtrProviderContext) {
after(async () => {
await es.indices.delete({ index: 'traces-apm-default' });
- const latestVersion = await synthtraceKibanaClient.fetchLatestApmPackageVersion();
- await synthtraceKibanaClient.installApmPackage(latestVersion);
await apmSynthtraceEsClient.clean();
});
@@ -136,8 +135,6 @@ export default function ApiTest({ getService }: FtrProviderContext) {
});
after(async () => {
- const latestVersion = await synthtraceKibanaClient.fetchLatestApmPackageVersion();
- await synthtraceKibanaClient.installApmPackage(latestVersion);
await apmSynthtraceEsClient.clean();
});
diff --git a/x-pack/test/apm_api_integration/tests/diagnostics/privileges.spec.ts b/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/diagnostics/privileges.spec.ts
similarity index 90%
rename from x-pack/test/apm_api_integration/tests/diagnostics/privileges.spec.ts
rename to x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/diagnostics/privileges.spec.ts
index 2d9652b61201..fa46ff08cc8e 100644
--- a/x-pack/test/apm_api_integration/tests/diagnostics/privileges.spec.ts
+++ b/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/diagnostics/privileges.spec.ts
@@ -7,13 +7,12 @@
import { APIReturnType } from '@kbn/apm-plugin/public/services/rest/create_call_apm_api';
import expect from '@kbn/expect';
-import { FtrProviderContext } from '../../common/ftr_provider_context';
+import type { DeploymentAgnosticFtrProviderContext } from '../../../../ftr_provider_context';
-export default function ApiTest({ getService }: FtrProviderContext) {
- const registry = getService('registry');
- const apmApiClient = getService('apmApiClient');
+export default function ApiTest({ getService }: DeploymentAgnosticFtrProviderContext) {
+ const apmApiClient = getService('apmApi');
- registry.when('Diagnostics: Privileges', { config: 'basic', archives: [] }, () => {
+ describe('Diagnostics: Privileges', () => {
describe('superuser', () => {
let body: APIReturnType<'GET /internal/apm/diagnostics'>;
diff --git a/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/entities/index.ts b/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/entities/index.ts
index d7a36e3e447b..71be4955fe52 100644
--- a/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/entities/index.ts
+++ b/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/entities/index.ts
@@ -5,7 +5,7 @@
* 2.0.
*/
-import { DeploymentAgnosticFtrProviderContext } from '../../../../ftr_provider_context';
+import type { DeploymentAgnosticFtrProviderContext } from '../../../../ftr_provider_context';
export default function ({ loadTestFile }: DeploymentAgnosticFtrProviderContext) {
describe('entities', () => {
diff --git a/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/environment/index.ts b/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/environment/index.ts
index 4a77e610d500..e48a8f88d74c 100644
--- a/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/environment/index.ts
+++ b/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/environment/index.ts
@@ -5,7 +5,7 @@
* 2.0.
*/
-import { DeploymentAgnosticFtrProviderContext } from '../../../../ftr_provider_context';
+import type { DeploymentAgnosticFtrProviderContext } from '../../../../ftr_provider_context';
export default function ({ loadTestFile }: DeploymentAgnosticFtrProviderContext) {
describe('environment', () => {
diff --git a/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/error_rate/index.ts b/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/error_rate/index.ts
index a3dd89f0ddb1..04ed9b3be1ff 100644
--- a/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/error_rate/index.ts
+++ b/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/error_rate/index.ts
@@ -5,7 +5,7 @@
* 2.0.
*/
-import { DeploymentAgnosticFtrProviderContext } from '../../../../ftr_provider_context';
+import type { DeploymentAgnosticFtrProviderContext } from '../../../../ftr_provider_context';
export default function ({ loadTestFile }: DeploymentAgnosticFtrProviderContext) {
describe('error_rate', () => {
diff --git a/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/error_rate/service_apis.spec.ts b/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/error_rate/service_apis.spec.ts
index 56dded824a32..6a8bca2eefac 100644
--- a/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/error_rate/service_apis.spec.ts
+++ b/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/error_rate/service_apis.spec.ts
@@ -13,7 +13,7 @@ import { isFiniteNumber } from '@kbn/apm-plugin/common/utils/is_finite_number';
import { ApmDocumentType } from '@kbn/apm-plugin/common/document_type';
import { RollupInterval } from '@kbn/apm-plugin/common/rollup';
import { ProcessorEvent } from '@kbn/observability-plugin/common';
-import { DeploymentAgnosticFtrProviderContext } from '../../../../ftr_provider_context';
+import type { DeploymentAgnosticFtrProviderContext } from '../../../../ftr_provider_context';
const GO_PROD_LIST_RATE = 75;
const GO_PROD_LIST_ERROR_RATE = 25;
diff --git a/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/error_rate/service_maps.spec.ts b/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/error_rate/service_maps.spec.ts
index 462ad8db4bdd..c45f3fd9457d 100644
--- a/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/error_rate/service_maps.spec.ts
+++ b/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/error_rate/service_maps.spec.ts
@@ -5,13 +5,13 @@
* 2.0.
*/
import { apm, timerange } from '@kbn/apm-synthtrace-client';
-import { ApmSynthtraceEsClient } from '@kbn/apm-synthtrace';
+import type { ApmSynthtraceEsClient } from '@kbn/apm-synthtrace';
import expect from '@kbn/expect';
import { meanBy } from 'lodash';
import { ApmDocumentType } from '@kbn/apm-plugin/common/document_type';
import { RollupInterval } from '@kbn/apm-plugin/common/rollup';
import { ProcessorEvent } from '@kbn/observability-plugin/common';
-import { DeploymentAgnosticFtrProviderContext } from '../../../../ftr_provider_context';
+import type { DeploymentAgnosticFtrProviderContext } from '../../../../ftr_provider_context';
const GO_PROD_LIST_RATE = 75;
const GO_PROD_LIST_ERROR_RATE = 25;
diff --git a/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/historical_data/has_data.spec.ts b/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/historical_data/has_data.spec.ts
index 6ac96b8e3815..b6eaca65cad1 100644
--- a/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/historical_data/has_data.spec.ts
+++ b/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/historical_data/has_data.spec.ts
@@ -8,8 +8,8 @@
import expect from '@kbn/expect';
import { apm, timerange } from '@kbn/apm-synthtrace-client';
import moment from 'moment';
-import { ApmSynthtraceEsClient } from '@kbn/apm-synthtrace';
-import { DeploymentAgnosticFtrProviderContext } from '../../../../ftr_provider_context';
+import type { ApmSynthtraceEsClient } from '@kbn/apm-synthtrace';
+import type { DeploymentAgnosticFtrProviderContext } from '../../../../ftr_provider_context';
export default function ApiTest({ getService }: DeploymentAgnosticFtrProviderContext) {
const apmApiClient = getService('apmApi');
diff --git a/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/historical_data/index.ts b/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/historical_data/index.ts
index 49f0068ee313..0b9c76d21d3b 100644
--- a/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/historical_data/index.ts
+++ b/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/historical_data/index.ts
@@ -5,7 +5,7 @@
* 2.0.
*/
-import { DeploymentAgnosticFtrProviderContext } from '../../../../ftr_provider_context';
+import type { DeploymentAgnosticFtrProviderContext } from '../../../../ftr_provider_context';
export default function ({ loadTestFile }: DeploymentAgnosticFtrProviderContext) {
describe('historical_data', () => {
diff --git a/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/index.ts b/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/index.ts
index af8cc32783c2..d115e10f2373 100644
--- a/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/index.ts
+++ b/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/index.ts
@@ -5,7 +5,7 @@
* 2.0.
*/
-import { DeploymentAgnosticFtrProviderContext } from '../../../ftr_provider_context';
+import type { DeploymentAgnosticFtrProviderContext } from '../../../ftr_provider_context';
export default function apmApiIntegrationTests({
loadTestFile,
@@ -30,5 +30,7 @@ export default function apmApiIntegrationTests({
loadTestFile(require.resolve('./infrastructure'));
loadTestFile(require.resolve('./inspect'));
loadTestFile(require.resolve('./service_groups'));
+ loadTestFile(require.resolve('./diagnostics'));
+ loadTestFile(require.resolve('./service_nodes'));
});
}
diff --git a/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/infrastructure/index.ts b/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/infrastructure/index.ts
index 1351a44d41c8..3379e3f0fdc2 100644
--- a/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/infrastructure/index.ts
+++ b/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/infrastructure/index.ts
@@ -5,7 +5,7 @@
* 2.0.
*/
-import { DeploymentAgnosticFtrProviderContext } from '../../../../ftr_provider_context';
+import type { DeploymentAgnosticFtrProviderContext } from '../../../../ftr_provider_context';
export default function ({ loadTestFile }: DeploymentAgnosticFtrProviderContext) {
describe('infrastructure', () => {
diff --git a/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/infrastructure/infrastructure_attributes.spec.ts b/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/infrastructure/infrastructure_attributes.spec.ts
index ca70d8d1fa00..fe9b0246c505 100644
--- a/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/infrastructure/infrastructure_attributes.spec.ts
+++ b/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/infrastructure/infrastructure_attributes.spec.ts
@@ -7,7 +7,7 @@
import expect from '@kbn/expect';
import type { ApmSynthtraceEsClient } from '@kbn/apm-synthtrace';
import { generateData } from './generate_data';
-import { DeploymentAgnosticFtrProviderContext } from '../../../../ftr_provider_context';
+import type { DeploymentAgnosticFtrProviderContext } from '../../../../ftr_provider_context';
export default function ApiTest({ getService }: DeploymentAgnosticFtrProviderContext) {
const apmApiClient = getService('apmApi');
diff --git a/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/latency/index.ts b/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/latency/index.ts
index 0b9a71293f68..2ff9ec1896c7 100644
--- a/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/latency/index.ts
+++ b/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/latency/index.ts
@@ -5,7 +5,7 @@
* 2.0.
*/
-import { DeploymentAgnosticFtrProviderContext } from '../../../../ftr_provider_context';
+import type { DeploymentAgnosticFtrProviderContext } from '../../../../ftr_provider_context';
export default function ({ loadTestFile }: DeploymentAgnosticFtrProviderContext) {
describe('latency', () => {
diff --git a/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/latency/service_apis.spec.ts b/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/latency/service_apis.spec.ts
index dee5f27b7a61..2219a873c0f2 100644
--- a/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/latency/service_apis.spec.ts
+++ b/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/latency/service_apis.spec.ts
@@ -12,8 +12,8 @@ import { isFiniteNumber } from '@kbn/apm-plugin/common/utils/is_finite_number';
import { ApmDocumentType } from '@kbn/apm-plugin/common/document_type';
import { RollupInterval } from '@kbn/apm-plugin/common/rollup';
import { ProcessorEvent } from '@kbn/observability-plugin/common';
-import { ApmSynthtraceEsClient } from '@kbn/apm-synthtrace';
-import { DeploymentAgnosticFtrProviderContext } from '../../../../ftr_provider_context';
+import type { ApmSynthtraceEsClient } from '@kbn/apm-synthtrace';
+import type { DeploymentAgnosticFtrProviderContext } from '../../../../ftr_provider_context';
export default function ApiTest({ getService }: DeploymentAgnosticFtrProviderContext) {
const apmApiClient = getService('apmApi');
diff --git a/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/latency/service_maps.spec.ts b/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/latency/service_maps.spec.ts
index fa088e4f12dc..e0bb69306a03 100644
--- a/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/latency/service_maps.spec.ts
+++ b/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/latency/service_maps.spec.ts
@@ -10,8 +10,8 @@ import { meanBy } from 'lodash';
import { ApmDocumentType } from '@kbn/apm-plugin/common/document_type';
import { RollupInterval } from '@kbn/apm-plugin/common/rollup';
import { ProcessorEvent } from '@kbn/observability-plugin/common';
-import { ApmSynthtraceEsClient } from '@kbn/apm-synthtrace';
-import { DeploymentAgnosticFtrProviderContext } from '../../../../ftr_provider_context';
+import type { ApmSynthtraceEsClient } from '@kbn/apm-synthtrace';
+import type { DeploymentAgnosticFtrProviderContext } from '../../../../ftr_provider_context';
export default function ApiTest({ getService }: DeploymentAgnosticFtrProviderContext) {
const apmApiClient = getService('apmApi');
diff --git a/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/mobile/generate_mobile_data.ts b/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/mobile/generate_mobile_data.ts
index a4420b3f53c7..fa3323c411d6 100644
--- a/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/mobile/generate_mobile_data.ts
+++ b/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/mobile/generate_mobile_data.ts
@@ -5,7 +5,7 @@
* 2.0.
*/
import { apm, timerange } from '@kbn/apm-synthtrace-client';
-import { ApmSynthtraceEsClient } from '@kbn/apm-synthtrace';
+import type { ApmSynthtraceEsClient } from '@kbn/apm-synthtrace';
export const SERVICE_VERSIONS = ['2.3', '1.2', '1.1'];
diff --git a/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/mobile/index.ts b/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/mobile/index.ts
index 97d8e13256d6..d54eb187b29c 100644
--- a/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/mobile/index.ts
+++ b/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/mobile/index.ts
@@ -5,7 +5,7 @@
* 2.0.
*/
-import { DeploymentAgnosticFtrProviderContext } from '../../../../ftr_provider_context';
+import type { DeploymentAgnosticFtrProviderContext } from '../../../../ftr_provider_context';
export default function ({ loadTestFile }: DeploymentAgnosticFtrProviderContext) {
describe('Mobile', () => {
diff --git a/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/observability_overview/index.ts b/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/observability_overview/index.ts
index c43e15d005bb..bbb35976f817 100644
--- a/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/observability_overview/index.ts
+++ b/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/observability_overview/index.ts
@@ -5,7 +5,7 @@
* 2.0.
*/
-import { DeploymentAgnosticFtrProviderContext } from '../../../../ftr_provider_context';
+import type { DeploymentAgnosticFtrProviderContext } from '../../../../ftr_provider_context';
export default function ({ loadTestFile }: DeploymentAgnosticFtrProviderContext) {
describe('observability_overview', () => {
diff --git a/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/observability_overview/observability_overview.spec.ts b/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/observability_overview/observability_overview.spec.ts
index 740dd432b670..796ef08f7025 100644
--- a/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/observability_overview/observability_overview.spec.ts
+++ b/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/observability_overview/observability_overview.spec.ts
@@ -9,7 +9,7 @@ import expect from '@kbn/expect';
import { meanBy, sumBy } from 'lodash';
import { ApmDocumentType } from '@kbn/apm-plugin/common/document_type';
import { RollupInterval } from '@kbn/apm-plugin/common/rollup';
-import { ApmSynthtraceEsClient } from '@kbn/apm-synthtrace';
+import type { ApmSynthtraceEsClient } from '@kbn/apm-synthtrace';
import { roundNumber } from '../../../../../../apm_api_integration/utils';
import type { DeploymentAgnosticFtrProviderContext } from '../../../../ftr_provider_context';
diff --git a/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/service_groups/index.ts b/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/service_groups/index.ts
index e88208d48a9b..458361077c20 100644
--- a/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/service_groups/index.ts
+++ b/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/service_groups/index.ts
@@ -5,7 +5,7 @@
* 2.0.
*/
-import { DeploymentAgnosticFtrProviderContext } from '../../../../ftr_provider_context';
+import type { DeploymentAgnosticFtrProviderContext } from '../../../../ftr_provider_context';
export default function ({ loadTestFile }: DeploymentAgnosticFtrProviderContext) {
describe('service_groups', () => {
diff --git a/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/service_groups/save_service_group.spec.ts b/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/service_groups/save_service_group.spec.ts
index a0ed02739cf9..0b4db96e880e 100644
--- a/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/service_groups/save_service_group.spec.ts
+++ b/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/service_groups/save_service_group.spec.ts
@@ -5,7 +5,7 @@
* 2.0.
*/
import expect from '@kbn/expect';
-import { DeploymentAgnosticFtrProviderContext } from '../../../../ftr_provider_context';
+import type { DeploymentAgnosticFtrProviderContext } from '../../../../ftr_provider_context';
import { ApmApiError } from '../../../../../../apm_api_integration/common/apm_api_supertest';
import { expectToReject } from '../../../../../../apm_api_integration/common/utils/expect_to_reject';
import {
diff --git a/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/service_groups/service_group_count/service_group_count.spec.ts b/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/service_groups/service_group_count/service_group_count.spec.ts
index 21ac03197a42..cbb29e2729dc 100644
--- a/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/service_groups/service_group_count/service_group_count.spec.ts
+++ b/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/service_groups/service_group_count/service_group_count.spec.ts
@@ -5,8 +5,8 @@
* 2.0.
*/
import expect from '@kbn/expect';
-import { ApmSynthtraceEsClient } from '@kbn/apm-synthtrace';
-import { DeploymentAgnosticFtrProviderContext } from '../../../../../ftr_provider_context';
+import type { ApmSynthtraceEsClient } from '@kbn/apm-synthtrace';
+import type { DeploymentAgnosticFtrProviderContext } from '../../../../../ftr_provider_context';
import {
createServiceGroupApi,
deleteAllServiceGroups,
diff --git a/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/service_groups/service_group_with_overflow/service_group_with_overflow.spec.ts b/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/service_groups/service_group_with_overflow/service_group_with_overflow.spec.ts
index 9324dee60d4e..b5cbf1ae2566 100644
--- a/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/service_groups/service_group_with_overflow/service_group_with_overflow.spec.ts
+++ b/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/service_groups/service_group_with_overflow/service_group_with_overflow.spec.ts
@@ -9,8 +9,8 @@ import { ValuesType } from 'utility-types';
import { ENVIRONMENT_ALL } from '@kbn/apm-plugin/common/environment_filter_values';
import { ApmDocumentType } from '@kbn/apm-plugin/common/document_type';
import { RollupInterval } from '@kbn/apm-plugin/common/rollup';
-import { ApmSynthtraceEsClient } from '@kbn/apm-synthtrace';
-import { DeploymentAgnosticFtrProviderContext } from '../../../../../ftr_provider_context';
+import type { ApmSynthtraceEsClient } from '@kbn/apm-synthtrace';
+import type { DeploymentAgnosticFtrProviderContext } from '../../../../../ftr_provider_context';
import { createServiceGroupApi, deleteAllServiceGroups } from '../service_groups_api_methods';
import { createServiceTransactionMetricsDocs } from './es_utils';
import { generateData } from './generate_data';
diff --git a/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/service_nodes/get_service_nodes.spec.ts b/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/service_nodes/get_service_nodes.spec.ts
new file mode 100644
index 000000000000..95f0b8defa98
--- /dev/null
+++ b/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/service_nodes/get_service_nodes.spec.ts
@@ -0,0 +1,100 @@
+/*
+ * 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 expect from '@kbn/expect';
+import { apm, timerange } from '@kbn/apm-synthtrace-client';
+import type { ApmSynthtraceEsClient } from '@kbn/apm-synthtrace';
+import type { DeploymentAgnosticFtrProviderContext } from '../../../../ftr_provider_context';
+
+export default function ApiTest({ getService }: DeploymentAgnosticFtrProviderContext) {
+ const apmApiClient = getService('apmApi');
+ const synthtrace = getService('synthtrace');
+
+ const start = new Date('2021-01-01T00:00:00.000Z').getTime();
+ const end = new Date('2021-01-01T00:15:00.000Z').getTime() - 1;
+ const serviceName = 'synth-go';
+ const instanceName = 'instance-a';
+
+ async function callApi() {
+ return await apmApiClient.readUser({
+ endpoint: 'GET /internal/apm/services/{serviceName}/metrics/nodes',
+ params: {
+ path: { serviceName },
+ query: {
+ start: new Date(start).toISOString(),
+ end: new Date(end).toISOString(),
+ kuery: '',
+ environment: 'ENVIRONMENT_ALL',
+ },
+ },
+ });
+ }
+
+ describe('Service nodes', () => {
+ describe('when data is not loaded', () => {
+ it('handles the empty state', async () => {
+ const response = await callApi();
+
+ expect(response.status).to.be(200);
+
+ expectSnapshot(response.body).toMatchInline(`
+ Object {
+ "serviceNodes": Array [],
+ }
+ `);
+ });
+ });
+
+ describe('when data is loaded', () => {
+ let apmSynthtraceEsClient: ApmSynthtraceEsClient;
+
+ before(async () => {
+ apmSynthtraceEsClient = await synthtrace.createApmSynthtraceEsClient();
+ const instance = apm
+ .service({ name: serviceName, environment: 'production', agentName: 'go' })
+ .instance(instanceName);
+ await apmSynthtraceEsClient.index(
+ timerange(start, end)
+ .interval('1m')
+ .rate(1)
+ .generator((timestamp) =>
+ instance
+ .appMetrics({
+ 'system.process.cpu.total.norm.pct': 1,
+ 'jvm.memory.heap.used': 1000,
+ 'jvm.memory.non_heap.used': 100,
+ 'jvm.thread.count': 25,
+ })
+ .timestamp(timestamp)
+ )
+ );
+ });
+ after(() => apmSynthtraceEsClient.clean());
+
+ it('returns service nodes', async () => {
+ const response = await callApi();
+
+ expect(response.status).to.be(200);
+
+ expectSnapshot(response.body).toMatchInline(`
+ Object {
+ "serviceNodes": Array [
+ Object {
+ "cpu": 1,
+ "heapMemory": 1000,
+ "hostName": "instance-a",
+ "name": "instance-a",
+ "nonHeapMemory": 100,
+ "threadCount": 25,
+ },
+ ],
+ }
+ `);
+ });
+ });
+ });
+}
diff --git a/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/service_nodes/index.ts b/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/service_nodes/index.ts
new file mode 100644
index 000000000000..18315aade3b3
--- /dev/null
+++ b/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/service_nodes/index.ts
@@ -0,0 +1,14 @@
+/*
+ * 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 type { DeploymentAgnosticFtrProviderContext } from '../../../../ftr_provider_context';
+
+export default function ({ loadTestFile }: DeploymentAgnosticFtrProviderContext) {
+ describe('service_nodes', () => {
+ loadTestFile(require.resolve('./get_service_nodes.spec.ts'));
+ });
+}
diff --git a/x-pack/test/apm_api_integration/tests/diagnostics/index_pattern_settings.ts b/x-pack/test/apm_api_integration/tests/diagnostics/index_pattern_settings.ts
deleted file mode 100644
index d0ba7b1850d3..000000000000
--- a/x-pack/test/apm_api_integration/tests/diagnostics/index_pattern_settings.ts
+++ /dev/null
@@ -1,106 +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 expect from '@kbn/expect';
-import { apm, timerange } from '@kbn/apm-synthtrace-client';
-import { getApmIndexTemplateNames } from '@kbn/apm-plugin/server/routes/diagnostics/helpers/get_apm_index_template_names';
-import { FtrProviderContext } from '../../common/ftr_provider_context';
-
-export default function ApiTest({ getService }: FtrProviderContext) {
- const registry = getService('registry');
- const apmApiClient = getService('apmApiClient');
- const es = getService('es');
- const apmSynthtraceEsClient = getService('apmSynthtraceEsClient');
- const synthtraceKibanaClient = getService('synthtraceKibanaClient');
-
- const start = new Date('2021-01-01T00:00:00.000Z').getTime();
- const end = new Date('2021-01-01T00:15:00.000Z').getTime() - 1;
-
- registry.when('Diagnostics: Index pattern settings', { config: 'basic', archives: [] }, () => {
- describe('When there is no data', () => {
- before(async () => {
- // delete APM index templates
- await es.indices.deleteIndexTemplate({
- name: Object.values(getApmIndexTemplateNames()).flat(),
- });
- });
-
- it('returns the built-in (non-APM) index templates`', async () => {
- const { status, body } = await apmApiClient.adminUser({
- endpoint: 'GET /internal/apm/diagnostics',
- });
- expect(status).to.be(200);
-
- const templateNames = body.indexTemplatesByIndexPattern.flatMap(({ indexTemplates }) => {
- return indexTemplates?.map(({ templateName }) => templateName);
- });
-
- expect(templateNames).to.eql(['logs', 'metrics']);
- });
- });
-
- describe('When data is ingested', () => {
- before(async () => {
- const latestVersion = await synthtraceKibanaClient.fetchLatestApmPackageVersion();
- await synthtraceKibanaClient.installApmPackage(latestVersion);
-
- const instance = apm
- .service({ name: 'synth-go', environment: 'production', agentName: 'go' })
- .instance('instance-a');
- await apmSynthtraceEsClient.index(
- timerange(start, end)
- .interval('1m')
- .rate(30)
- .generator((timestamp) =>
- instance
- .transaction({ transactionName: 'GET /users' })
- .timestamp(timestamp)
- .duration(100)
- .success()
- )
- );
- });
-
- after(() => apmSynthtraceEsClient.clean());
-
- it('returns APM index templates', async () => {
- const { status, body } = await apmApiClient.adminUser({
- endpoint: 'GET /internal/apm/diagnostics',
- });
- expect(status).to.be(200);
-
- const templateNames = body.indexTemplatesByIndexPattern.flatMap(({ indexTemplates }) => {
- return indexTemplates?.map(({ templateName }) => templateName);
- });
-
- expect(templateNames).to.eql([
- 'logs-apm.error',
- 'logs-apm.app',
- 'logs',
- 'metrics-apm.service_transaction.60m',
- 'metrics-apm.service_destination.10m',
- 'metrics-apm.transaction.1m',
- 'metrics-apm.service_destination.1m',
- 'metrics-apm.service_transaction.10m',
- 'metrics-apm.service_transaction.1m',
- 'metrics-apm.transaction.60m',
- 'metrics-apm.service_destination.60m',
- 'metrics-apm.service_summary.1m',
- 'metrics-apm.transaction.10m',
- 'metrics-apm.internal',
- 'metrics-apm.service_summary.10m',
- 'metrics-apm.service_summary.60m',
- 'metrics-apm.app',
- 'metrics',
- 'traces-apm',
- 'traces-apm.rum',
- 'traces-apm.sampled',
- ]);
- });
- });
- });
-}
diff --git a/x-pack/test/apm_api_integration/tests/service_nodes/get_service_nodes.spec.ts b/x-pack/test/apm_api_integration/tests/service_nodes/get_service_nodes.spec.ts
deleted file mode 100644
index 6b24587b6bc1..000000000000
--- a/x-pack/test/apm_api_integration/tests/service_nodes/get_service_nodes.spec.ts
+++ /dev/null
@@ -1,96 +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 expect from '@kbn/expect';
-import { apm, timerange } from '@kbn/apm-synthtrace-client';
-import { FtrProviderContext } from '../../common/ftr_provider_context';
-
-export default function ApiTest({ getService }: FtrProviderContext) {
- const apmApiClient = getService('apmApiClient');
- const registry = getService('registry');
- const apmSynthtraceEsClient = getService('apmSynthtraceEsClient');
-
- const start = new Date('2021-01-01T00:00:00.000Z').getTime();
- const end = new Date('2021-01-01T00:15:00.000Z').getTime() - 1;
- const serviceName = 'synth-go';
- const instanceName = 'instance-a';
-
- async function callApi() {
- return await apmApiClient.readUser({
- endpoint: 'GET /internal/apm/services/{serviceName}/metrics/nodes',
- params: {
- path: { serviceName },
- query: {
- start: new Date(start).toISOString(),
- end: new Date(end).toISOString(),
- kuery: '',
- environment: 'ENVIRONMENT_ALL',
- },
- },
- });
- }
-
- registry.when('Service nodes when data is not loaded', { config: 'basic', archives: [] }, () => {
- it('handles the empty state', async () => {
- const response = await callApi();
-
- expect(response.status).to.be(200);
-
- expectSnapshot(response.body).toMatchInline(`
- Object {
- "serviceNodes": Array [],
- }
- `);
- });
- });
-
- // FLAKY: https://github.com/elastic/kibana/issues/177496
- registry.when('Service nodes when data is loaded', { config: 'basic', archives: [] }, () => {
- before(async () => {
- const instance = apm
- .service({ name: serviceName, environment: 'production', agentName: 'go' })
- .instance(instanceName);
- await apmSynthtraceEsClient.index(
- timerange(start, end)
- .interval('1m')
- .rate(1)
- .generator((timestamp) =>
- instance
- .appMetrics({
- 'system.process.cpu.total.norm.pct': 1,
- 'jvm.memory.heap.used': 1000,
- 'jvm.memory.non_heap.used': 100,
- 'jvm.thread.count': 25,
- })
- .timestamp(timestamp)
- )
- );
- });
- after(() => apmSynthtraceEsClient.clean());
-
- it('returns service nodes', async () => {
- const response = await callApi();
-
- expect(response.status).to.be(200);
-
- expectSnapshot(response.body).toMatchInline(`
- Object {
- "serviceNodes": Array [
- Object {
- "cpu": 1,
- "heapMemory": 1000,
- "hostName": "instance-a",
- "name": "instance-a",
- "nonHeapMemory": 100,
- "threadCount": 25,
- },
- ],
- }
- `);
- });
- });
-}
diff --git a/x-pack/test/observability_ai_assistant_api_integration/tests/knowledge_base/knowledge_base_user_instructions.spec.ts b/x-pack/test/observability_ai_assistant_api_integration/tests/knowledge_base/knowledge_base_user_instructions.spec.ts
index 04791909340e..6ea2b279fd38 100644
--- a/x-pack/test/observability_ai_assistant_api_integration/tests/knowledge_base/knowledge_base_user_instructions.spec.ts
+++ b/x-pack/test/observability_ai_assistant_api_integration/tests/knowledge_base/knowledge_base_user_instructions.spec.ts
@@ -30,6 +30,7 @@ export default function ApiTest({ getService }: FtrProviderContext) {
const es = getService('es');
const ml = getService('ml');
const log = getService('log');
+ const retry = getService('retry');
const getScopedApiClientForUsername = getService('getScopedApiClientForUsername');
describe('Knowledge base user instructions', () => {
@@ -94,62 +95,69 @@ export default function ApiTest({ getService }: FtrProviderContext) {
});
it('"editor" can retrieve their own private instructions and the public instruction', async () => {
- const res = await observabilityAIAssistantAPIClient.editor({
- endpoint: 'GET /internal/observability_ai_assistant/kb/user_instructions',
- });
+ await retry.try(async () => {
+ const res = await observabilityAIAssistantAPIClient.editor({
+ endpoint: 'GET /internal/observability_ai_assistant/kb/user_instructions',
+ });
- const instructions = res.body.userInstructions;
+ const instructions = res.body.userInstructions;
+ expect(instructions).to.have.length(3);
- const sortById = (data: Array) => sortBy(data, 'id');
+ const sortById = (data: Array) => sortBy(data, 'id');
- expect(sortById(instructions)).to.eql(
- sortById([
- {
- id: 'private-doc-from-editor',
- public: false,
- text: 'Private user instruction from "editor"',
- },
- {
- id: 'public-doc-from-editor',
- public: true,
- text: 'Public user instruction from "editor"',
- },
- {
- id: 'public-doc-from-secondary_editor',
- public: true,
- text: 'Public user instruction from "secondary_editor"',
- },
- ])
- );
+ expect(sortById(instructions)).to.eql(
+ sortById([
+ {
+ id: 'private-doc-from-editor',
+ public: false,
+ text: 'Private user instruction from "editor"',
+ },
+ {
+ id: 'public-doc-from-editor',
+ public: true,
+ text: 'Public user instruction from "editor"',
+ },
+ {
+ id: 'public-doc-from-secondary_editor',
+ public: true,
+ text: 'Public user instruction from "secondary_editor"',
+ },
+ ])
+ );
+ });
});
it('"secondaryEditor" can retrieve their own private instructions and the public instruction', async () => {
- const res = await observabilityAIAssistantAPIClient.secondaryEditor({
- endpoint: 'GET /internal/observability_ai_assistant/kb/user_instructions',
- });
- const instructions = res.body.userInstructions;
+ await retry.try(async () => {
+ const res = await observabilityAIAssistantAPIClient.secondaryEditor({
+ endpoint: 'GET /internal/observability_ai_assistant/kb/user_instructions',
+ });
- const sortById = (data: Array) => sortBy(data, 'id');
+ const instructions = res.body.userInstructions;
+ expect(instructions).to.have.length(3);
- expect(sortById(instructions)).to.eql(
- sortById([
- {
- id: 'public-doc-from-editor',
- public: true,
- text: 'Public user instruction from "editor"',
- },
- {
- id: 'public-doc-from-secondary_editor',
- public: true,
- text: 'Public user instruction from "secondary_editor"',
- },
- {
- id: 'private-doc-from-secondary_editor',
- public: false,
- text: 'Private user instruction from "secondary_editor"',
- },
- ])
- );
+ const sortById = (data: Array) => sortBy(data, 'id');
+
+ expect(sortById(instructions)).to.eql(
+ sortById([
+ {
+ id: 'public-doc-from-editor',
+ public: true,
+ text: 'Public user instruction from "editor"',
+ },
+ {
+ id: 'public-doc-from-secondary_editor',
+ public: true,
+ text: 'Public user instruction from "secondary_editor"',
+ },
+ {
+ id: 'private-doc-from-secondary_editor',
+ public: false,
+ text: 'Private user instruction from "secondary_editor"',
+ },
+ ])
+ );
+ });
});
});