diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 01f4bd562a9e07..20081992d725a1 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -227,8 +227,8 @@ /x-pack/test/api_integration/apis/maps/ @elastic/kibana-gis /x-pack/test/functional/apps/maps/ @elastic/kibana-gis /x-pack/test/functional/es_archives/maps/ @elastic/kibana-gis -/x-pack/plugins/stack_alerts/server/alert_types/geo_containment @elastic/kibana-gis -/x-pack/plugins/stack_alerts/public/alert_types/geo_containment @elastic/kibana-gis +/x-pack/plugins/stack_alerts/server/rule_types/geo_containment @elastic/kibana-gis +/x-pack/plugins/stack_alerts/public/rule_types/geo_containment @elastic/kibana-gis #CC# /x-pack/plugins/file_upload @elastic/kibana-gis /x-pack/plugins/file_upload @elastic/kibana-gis @@ -885,12 +885,12 @@ packages/kbn-babel-preset @elastic/kibana-operations packages/kbn-bazel-packages @elastic/kibana-operations packages/kbn-bazel-runner @elastic/kibana-operations packages/kbn-cases-components @elastic/response-ops -packages/kbn-chart-icons @elastic/kibana-vis-editors +packages/kbn-chart-icons @elastic/kibana-visualizations packages/kbn-ci-stats-core @elastic/kibana-operations packages/kbn-ci-stats-performance-metrics @elastic/kibana-operations packages/kbn-ci-stats-reporter @elastic/kibana-operations packages/kbn-cli-dev-mode @elastic/kibana-operations -packages/kbn-coloring @elastic/kibana-vis-editors +packages/kbn-coloring @elastic/kibana-visualizations packages/kbn-config @elastic/kibana-core packages/kbn-config-mocks @elastic/kibana-core packages/kbn-config-schema @elastic/kibana-core @@ -933,7 +933,7 @@ packages/kbn-io-ts-utils @elastic/apm-ui packages/kbn-jest-serializers @elastic/kibana-operations packages/kbn-journeys @elastic/kibana-operations packages/kbn-kibana-manifest-schema @elastic/kibana-operations -packages/kbn-language-documentation-popover @elastic/kibana-vis-editors +packages/kbn-language-documentation-popover @elastic/kibana-visualizations packages/kbn-logging @elastic/kibana-core packages/kbn-logging-mocks @elastic/kibana-core packages/kbn-managed-vscode-config @elastic/kibana-operations @@ -982,8 +982,8 @@ packages/kbn-telemetry-tools @elastic/kibana-core packages/kbn-test @elastic/kibana-operations packages/kbn-test-jest-helpers @elastic/kibana-operations packages/kbn-test-subj-selector @elastic/kibana-operations -packages/kbn-timelion-grammar @elastic/kibana-vis-editors -packages/kbn-tinymath @elastic/kibana-vis-editors +packages/kbn-timelion-grammar @elastic/kibana-visualizations +packages/kbn-tinymath @elastic/kibana-visualizations packages/kbn-tooling-log @elastic/kibana-operations packages/kbn-type-summarizer @elastic/kibana-operations packages/kbn-type-summarizer-cli @elastic/kibana-operations diff --git a/api_docs/actions.mdx b/api_docs/actions.mdx index 66093e7a6b5abe..f286e92da75d0f 100644 --- a/api_docs/actions.mdx +++ b/api_docs/actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/actions title: "actions" image: https://source.unsplash.com/400x175/?github description: API docs for the actions plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'actions'] --- import actionsObj from './actions.devdocs.json'; diff --git a/api_docs/advanced_settings.mdx b/api_docs/advanced_settings.mdx index 672f93fb0919ee..68f8873fda7902 100644 --- a/api_docs/advanced_settings.mdx +++ b/api_docs/advanced_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/advancedSettings title: "advancedSettings" image: https://source.unsplash.com/400x175/?github description: API docs for the advancedSettings plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'advancedSettings'] --- import advancedSettingsObj from './advanced_settings.devdocs.json'; diff --git a/api_docs/aiops.mdx b/api_docs/aiops.mdx index 187ae5f13dbb83..262335a9d896b5 100644 --- a/api_docs/aiops.mdx +++ b/api_docs/aiops.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/aiops title: "aiops" image: https://source.unsplash.com/400x175/?github description: API docs for the aiops plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'aiops'] --- import aiopsObj from './aiops.devdocs.json'; diff --git a/api_docs/alerting.devdocs.json b/api_docs/alerting.devdocs.json index 841e8225d9d8d7..c87ec50c9ab517 100644 --- a/api_docs/alerting.devdocs.json +++ b/api_docs/alerting.devdocs.json @@ -1786,31 +1786,6 @@ "deprecated": false, "trackAdoption": false, "children": [ - { - "parentPluginId": "alerting", - "id": "def-server.RuleExecutorOptions.alertId", - "type": "string", - "tags": [], - "label": "alertId", - "description": [], - "path": "x-pack/plugins/alerting/server/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "alerting", - "id": "def-server.RuleExecutorOptions.createdBy", - "type": "CompoundType", - "tags": [], - "label": "createdBy", - "description": [], - "signature": [ - "string | null" - ], - "path": "x-pack/plugins/alerting/server/types.ts", - "deprecated": false, - "trackAdoption": false - }, { "parentPluginId": "alerting", "id": "def-server.RuleExecutorOptions.executionId", @@ -1842,17 +1817,6 @@ "deprecated": false, "trackAdoption": false }, - { - "parentPluginId": "alerting", - "id": "def-server.RuleExecutorOptions.name", - "type": "string", - "tags": [], - "label": "name", - "description": [], - "path": "x-pack/plugins/alerting/server/types.ts", - "deprecated": false, - "trackAdoption": false - }, { "parentPluginId": "alerting", "id": "def-server.RuleExecutorOptions.params", @@ -1897,7 +1861,7 @@ "section": "def-common.SanitizedRule", "text": "SanitizedRule" }, - ", \"name\" | \"tags\" | \"enabled\" | \"actions\" | \"throttle\" | \"consumer\" | \"schedule\" | \"createdBy\" | \"updatedBy\" | \"createdAt\" | \"updatedAt\" | \"notifyWhen\"> & { producer: string; ruleTypeId: string; ruleTypeName: string; }" + ", \"name\" | \"tags\" | \"id\" | \"enabled\" | \"actions\" | \"throttle\" | \"consumer\" | \"schedule\" | \"createdBy\" | \"updatedBy\" | \"createdAt\" | \"updatedAt\" | \"notifyWhen\"> & { producer: string; ruleTypeId: string; ruleTypeName: string; }" ], "path": "x-pack/plugins/alerting/server/types.ts", "deprecated": false, @@ -1963,34 +1927,6 @@ "deprecated": false, "trackAdoption": false }, - { - "parentPluginId": "alerting", - "id": "def-server.RuleExecutorOptions.tags", - "type": "Array", - "tags": [], - "label": "tags", - "description": [], - "signature": [ - "string[]" - ], - "path": "x-pack/plugins/alerting/server/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "alerting", - "id": "def-server.RuleExecutorOptions.updatedBy", - "type": "CompoundType", - "tags": [], - "label": "updatedBy", - "description": [], - "signature": [ - "string | null" - ], - "path": "x-pack/plugins/alerting/server/types.ts", - "deprecated": false, - "trackAdoption": false - }, { "parentPluginId": "alerting", "id": "def-server.RuleExecutorOptions.namespace", @@ -6516,7 +6452,7 @@ "section": "def-common.SanitizedRule", "text": "SanitizedRule" }, - ", \"name\" | \"tags\" | \"enabled\" | \"actions\" | \"throttle\" | \"consumer\" | \"schedule\" | \"createdBy\" | \"updatedBy\" | \"createdAt\" | \"updatedAt\" | \"notifyWhen\"> & { producer: string; ruleTypeId: string; ruleTypeName: string; }" + ", \"name\" | \"tags\" | \"id\" | \"enabled\" | \"actions\" | \"throttle\" | \"consumer\" | \"schedule\" | \"createdBy\" | \"updatedBy\" | \"createdAt\" | \"updatedAt\" | \"notifyWhen\"> & { producer: string; ruleTypeId: string; ruleTypeName: string; }" ], "path": "x-pack/plugins/alerting/common/rule.ts", "deprecated": false, diff --git a/api_docs/alerting.mdx b/api_docs/alerting.mdx index 5da58c27ab4c3f..6b616aaf98ef68 100644 --- a/api_docs/alerting.mdx +++ b/api_docs/alerting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/alerting title: "alerting" image: https://source.unsplash.com/400x175/?github description: API docs for the alerting plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'alerting'] --- import alertingObj from './alerting.devdocs.json'; @@ -21,7 +21,7 @@ Contact [Response Ops](https://github.com/orgs/elastic/teams/response-ops) for q | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 384 | 0 | 375 | 26 | +| 379 | 0 | 370 | 26 | ## Client diff --git a/api_docs/apm.devdocs.json b/api_docs/apm.devdocs.json index 31dd709c19c753..8eb23ab45ab73b 100644 --- a/api_docs/apm.devdocs.json +++ b/api_docs/apm.devdocs.json @@ -204,9 +204,7 @@ "Observable", "; autoCreateApmDataView: boolean; serviceMapEnabled: boolean; serviceMapFingerprintBucketSize: number; serviceMapTraceIdBucketSize: number; serviceMapFingerprintGlobalBucketSize: number; serviceMapTraceIdGlobalBucketSize: number; serviceMapMaxTracesPerRequest: number; ui: Readonly<{} & { enabled: boolean; transactionGroupBucketSize: number; maxTraceItems: number; }>; searchAggregatedTransactions: ", "SearchAggregatedTransactionSetting", - "; telemetryCollectionEnabled: boolean; metricsInterval: number; agent: Readonly<{} & { migrations: Readonly<{} & { enabled: boolean; }>; }>; forceSyntheticSource: boolean; }>>; getApmIndices: () => Promise<", - "ApmIndicesConfig", - ">; createApmEventClient: ({ request, context, debug, }: { debug?: boolean | undefined; request: ", + "; telemetryCollectionEnabled: boolean; metricsInterval: number; agent: Readonly<{} & { migrations: Readonly<{} & { enabled: boolean; }>; }>; forceSyntheticSource: boolean; }>>; getApmIndices: () => Promise>; createApmEventClient: ({ request, context, debug, }: { debug?: boolean | undefined; request: ", { "pluginId": "@kbn/core-http-server", "scope": "server", @@ -7216,9 +7214,7 @@ "label": "getApmIndices", "description": [], "signature": [ - "() => Promise<", - "ApmIndicesConfig", - ">" + "() => Promise>" ], "path": "x-pack/plugins/apm/server/types.ts", "deprecated": false, diff --git a/api_docs/apm.mdx b/api_docs/apm.mdx index 1e449df65a7ec9..f90f5ac3d6083c 100644 --- a/api_docs/apm.mdx +++ b/api_docs/apm.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/apm title: "apm" image: https://source.unsplash.com/400x175/?github description: API docs for the apm plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apm'] --- import apmObj from './apm.devdocs.json'; diff --git a/api_docs/banners.mdx b/api_docs/banners.mdx index b8074030728dd2..8c24dc07fccfbf 100644 --- a/api_docs/banners.mdx +++ b/api_docs/banners.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/banners title: "banners" image: https://source.unsplash.com/400x175/?github description: API docs for the banners plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'banners'] --- import bannersObj from './banners.devdocs.json'; diff --git a/api_docs/bfetch.mdx b/api_docs/bfetch.mdx index 0b20b32cf640d1..3bd3865c663605 100644 --- a/api_docs/bfetch.mdx +++ b/api_docs/bfetch.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/bfetch title: "bfetch" image: https://source.unsplash.com/400x175/?github description: API docs for the bfetch plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'bfetch'] --- import bfetchObj from './bfetch.devdocs.json'; diff --git a/api_docs/canvas.mdx b/api_docs/canvas.mdx index 6047f152ba2bbf..81f9e2eb72d4aa 100644 --- a/api_docs/canvas.mdx +++ b/api_docs/canvas.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/canvas title: "canvas" image: https://source.unsplash.com/400x175/?github description: API docs for the canvas plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'canvas'] --- import canvasObj from './canvas.devdocs.json'; diff --git a/api_docs/cases.devdocs.json b/api_docs/cases.devdocs.json index 9426f8ab0d0165..e285b8ef93fce3 100644 --- a/api_docs/cases.devdocs.json +++ b/api_docs/cases.devdocs.json @@ -565,7 +565,7 @@ "signature": [ "{ features?: Partial<", "CasesContextFeatures", - "> | undefined; basePath?: string | undefined; onClose?: (() => void) | undefined; owner: string[]; permissions: ", + "> | undefined; onClose?: (() => void) | undefined; basePath?: string | undefined; owner: string[]; permissions: ", { "pluginId": "cases", "scope": "common", @@ -645,7 +645,7 @@ "signature": [ "{ features?: Partial<", "CasesContextFeatures", - "> | undefined; basePath?: string | undefined; onClose?: (() => void) | undefined; owner: string[]; permissions: ", + "> | undefined; onClose?: (() => void) | undefined; basePath?: string | undefined; owner: string[]; permissions: ", { "pluginId": "cases", "scope": "common", diff --git a/api_docs/cases.mdx b/api_docs/cases.mdx index 8ac23e0e22b345..4f49073f3f20fe 100644 --- a/api_docs/cases.mdx +++ b/api_docs/cases.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cases title: "cases" image: https://source.unsplash.com/400x175/?github description: API docs for the cases plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cases'] --- import casesObj from './cases.devdocs.json'; diff --git a/api_docs/charts.mdx b/api_docs/charts.mdx index 7c33895a9db9ee..bd42b8e5c20b73 100644 --- a/api_docs/charts.mdx +++ b/api_docs/charts.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/charts title: "charts" image: https://source.unsplash.com/400x175/?github description: API docs for the charts plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'charts'] --- import chartsObj from './charts.devdocs.json'; diff --git a/api_docs/cloud.mdx b/api_docs/cloud.mdx index 90d45ab5fe6c18..330c3bb9f45821 100644 --- a/api_docs/cloud.mdx +++ b/api_docs/cloud.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloud title: "cloud" image: https://source.unsplash.com/400x175/?github description: API docs for the cloud plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloud'] --- import cloudObj from './cloud.devdocs.json'; diff --git a/api_docs/cloud_chat.mdx b/api_docs/cloud_chat.mdx index ee4b8e728acfaa..364d128261ec99 100644 --- a/api_docs/cloud_chat.mdx +++ b/api_docs/cloud_chat.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudChat title: "cloudChat" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudChat plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudChat'] --- import cloudChatObj from './cloud_chat.devdocs.json'; diff --git a/api_docs/cloud_experiments.mdx b/api_docs/cloud_experiments.mdx index dc5a33367786f3..75d6f7cd184cc1 100644 --- a/api_docs/cloud_experiments.mdx +++ b/api_docs/cloud_experiments.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudExperiments title: "cloudExperiments" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudExperiments plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudExperiments'] --- import cloudExperimentsObj from './cloud_experiments.devdocs.json'; diff --git a/api_docs/cloud_security_posture.mdx b/api_docs/cloud_security_posture.mdx index 805d5958316c30..765c0154d4d88d 100644 --- a/api_docs/cloud_security_posture.mdx +++ b/api_docs/cloud_security_posture.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudSecurityPosture title: "cloudSecurityPosture" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudSecurityPosture plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudSecurityPosture'] --- import cloudSecurityPostureObj from './cloud_security_posture.devdocs.json'; diff --git a/api_docs/console.mdx b/api_docs/console.mdx index 7dbe582fd184e8..167bfaf5fc84fc 100644 --- a/api_docs/console.mdx +++ b/api_docs/console.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/console title: "console" image: https://source.unsplash.com/400x175/?github description: API docs for the console plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'console'] --- import consoleObj from './console.devdocs.json'; diff --git a/api_docs/controls.devdocs.json b/api_docs/controls.devdocs.json index 39adc79d228890..88b49be766ce42 100644 --- a/api_docs/controls.devdocs.json +++ b/api_docs/controls.devdocs.json @@ -3820,6 +3820,20 @@ "deprecated": false, "trackAdoption": false }, + { + "parentPluginId": "controls", + "id": "def-public.OptionsListEmbeddableInput.existsSelected", + "type": "CompoundType", + "tags": [], + "label": "existsSelected", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "src/plugins/controls/common/options_list/types.ts", + "deprecated": false, + "trackAdoption": false + }, { "parentPluginId": "controls", "id": "def-public.OptionsListEmbeddableInput.runPastTimeout", @@ -3862,6 +3876,20 @@ "deprecated": false, "trackAdoption": false }, + { + "parentPluginId": "controls", + "id": "def-public.OptionsListEmbeddableInput.hideExists", + "type": "CompoundType", + "tags": [], + "label": "hideExists", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "src/plugins/controls/common/options_list/types.ts", + "deprecated": false, + "trackAdoption": false + }, { "parentPluginId": "controls", "id": "def-public.OptionsListEmbeddableInput.exclude", @@ -4983,6 +5011,20 @@ "deprecated": false, "trackAdoption": false }, + { + "parentPluginId": "controls", + "id": "def-common.OptionsListEmbeddableInput.existsSelected", + "type": "CompoundType", + "tags": [], + "label": "existsSelected", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "src/plugins/controls/common/options_list/types.ts", + "deprecated": false, + "trackAdoption": false + }, { "parentPluginId": "controls", "id": "def-common.OptionsListEmbeddableInput.runPastTimeout", @@ -5025,6 +5067,20 @@ "deprecated": false, "trackAdoption": false }, + { + "parentPluginId": "controls", + "id": "def-common.OptionsListEmbeddableInput.hideExists", + "type": "CompoundType", + "tags": [], + "label": "hideExists", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "src/plugins/controls/common/options_list/types.ts", + "deprecated": false, + "trackAdoption": false + }, { "parentPluginId": "controls", "id": "def-common.OptionsListEmbeddableInput.exclude", diff --git a/api_docs/controls.mdx b/api_docs/controls.mdx index 2e69859a11dbf0..4cef89724de4db 100644 --- a/api_docs/controls.mdx +++ b/api_docs/controls.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/controls title: "controls" image: https://source.unsplash.com/400x175/?github description: API docs for the controls plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'controls'] --- import controlsObj from './controls.devdocs.json'; @@ -21,7 +21,7 @@ Contact [Kibana Presentation](https://github.com/orgs/elastic/teams/kibana-prese | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 233 | 0 | 224 | 7 | +| 237 | 0 | 228 | 7 | ## Client diff --git a/api_docs/core.mdx b/api_docs/core.mdx index 94defa88a150ae..9050d665c1e665 100644 --- a/api_docs/core.mdx +++ b/api_docs/core.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/core title: "core" image: https://source.unsplash.com/400x175/?github description: API docs for the core plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'core'] --- import coreObj from './core.devdocs.json'; diff --git a/api_docs/custom_integrations.mdx b/api_docs/custom_integrations.mdx index 55995cdb13258d..9606d2119b7ec3 100644 --- a/api_docs/custom_integrations.mdx +++ b/api_docs/custom_integrations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/customIntegrations title: "customIntegrations" image: https://source.unsplash.com/400x175/?github description: API docs for the customIntegrations plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'customIntegrations'] --- import customIntegrationsObj from './custom_integrations.devdocs.json'; diff --git a/api_docs/dashboard.mdx b/api_docs/dashboard.mdx index 436ee1e60c68fa..cb0f4cafa13f93 100644 --- a/api_docs/dashboard.mdx +++ b/api_docs/dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dashboard title: "dashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the dashboard plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dashboard'] --- import dashboardObj from './dashboard.devdocs.json'; diff --git a/api_docs/dashboard_enhanced.mdx b/api_docs/dashboard_enhanced.mdx index 4f182f07cb86e7..7449842a8ff912 100644 --- a/api_docs/dashboard_enhanced.mdx +++ b/api_docs/dashboard_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dashboardEnhanced title: "dashboardEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the dashboardEnhanced plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dashboardEnhanced'] --- import dashboardEnhancedObj from './dashboard_enhanced.devdocs.json'; diff --git a/api_docs/data.devdocs.json b/api_docs/data.devdocs.json index 15181498020c1e..d6a14b54f0608f 100644 --- a/api_docs/data.devdocs.json +++ b/api_docs/data.devdocs.json @@ -3909,7 +3909,7 @@ "references": [ { "plugin": "stackAlerts", - "path": "x-pack/plugins/stack_alerts/server/alert_types/es_query/lib/fetch_search_source_query.ts" + "path": "x-pack/plugins/stack_alerts/server/rule_types/es_query/lib/fetch_search_source_query.ts" }, { "plugin": "alerting", @@ -3941,11 +3941,11 @@ }, { "plugin": "stackAlerts", - "path": "x-pack/plugins/stack_alerts/server/alert_types/es_query/rule_type.test.ts" + "path": "x-pack/plugins/stack_alerts/server/rule_types/es_query/rule_type.test.ts" }, { "plugin": "stackAlerts", - "path": "x-pack/plugins/stack_alerts/server/alert_types/es_query/rule_type.test.ts" + "path": "x-pack/plugins/stack_alerts/server/rule_types/es_query/rule_type.test.ts" }, { "plugin": "securitySolution", @@ -12329,23 +12329,23 @@ }, { "plugin": "stackAlerts", - "path": "x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/expressions/boundary_index_expression.tsx" + "path": "x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/expressions/boundary_index_expression.tsx" }, { "plugin": "stackAlerts", - "path": "x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/expressions/entity_index_expression.tsx" + "path": "x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/expressions/entity_index_expression.tsx" }, { "plugin": "stackAlerts", - "path": "x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/index.tsx" + "path": "x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/index.tsx" }, { "plugin": "stackAlerts", - "path": "x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/index.tsx" + "path": "x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/index.tsx" }, { "plugin": "stackAlerts", - "path": "x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/index.tsx" + "path": "x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/index.tsx" }, { "plugin": "inputControlVis", @@ -12441,7 +12441,7 @@ }, { "plugin": "stackAlerts", - "path": "x-pack/plugins/stack_alerts/public/alert_types/threshold/expression.tsx" + "path": "x-pack/plugins/stack_alerts/public/rule_types/threshold/expression.tsx" }, { "plugin": "expressionPartitionVis", @@ -13461,39 +13461,39 @@ }, { "plugin": "stackAlerts", - "path": "x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/expressions/boundary_index_expression.tsx" + "path": "x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/expressions/boundary_index_expression.tsx" }, { "plugin": "stackAlerts", - "path": "x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/expressions/entity_index_expression.tsx" + "path": "x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/expressions/entity_index_expression.tsx" }, { "plugin": "stackAlerts", - "path": "x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/index.tsx" + "path": "x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/index.tsx" }, { "plugin": "stackAlerts", - "path": "x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/index.tsx" + "path": "x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/index.tsx" }, { "plugin": "stackAlerts", - "path": "x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/index.tsx" + "path": "x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/index.tsx" }, { "plugin": "stackAlerts", - "path": "x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/index.tsx" + "path": "x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/index.tsx" }, { "plugin": "stackAlerts", - "path": "x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/index.tsx" + "path": "x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/index.tsx" }, { "plugin": "stackAlerts", - "path": "x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/index.tsx" + "path": "x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/index.tsx" }, { "plugin": "stackAlerts", - "path": "x-pack/plugins/stack_alerts/public/alert_types/es_query/expression/search_source_expression_form.tsx" + "path": "x-pack/plugins/stack_alerts/public/rule_types/es_query/expression/search_source_expression_form.tsx" }, { "plugin": "synthetics", @@ -21159,39 +21159,39 @@ }, { "plugin": "stackAlerts", - "path": "x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/expressions/boundary_index_expression.tsx" + "path": "x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/expressions/boundary_index_expression.tsx" }, { "plugin": "stackAlerts", - "path": "x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/expressions/entity_index_expression.tsx" + "path": "x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/expressions/entity_index_expression.tsx" }, { "plugin": "stackAlerts", - "path": "x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/index.tsx" + "path": "x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/index.tsx" }, { "plugin": "stackAlerts", - "path": "x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/index.tsx" + "path": "x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/index.tsx" }, { "plugin": "stackAlerts", - "path": "x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/index.tsx" + "path": "x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/index.tsx" }, { "plugin": "stackAlerts", - "path": "x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/index.tsx" + "path": "x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/index.tsx" }, { "plugin": "stackAlerts", - "path": "x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/index.tsx" + "path": "x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/index.tsx" }, { "plugin": "stackAlerts", - "path": "x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/index.tsx" + "path": "x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/index.tsx" }, { "plugin": "stackAlerts", - "path": "x-pack/plugins/stack_alerts/public/alert_types/es_query/expression/search_source_expression_form.tsx" + "path": "x-pack/plugins/stack_alerts/public/rule_types/es_query/expression/search_source_expression_form.tsx" }, { "plugin": "synthetics", diff --git a/api_docs/data.mdx b/api_docs/data.mdx index 4d82afee6ebade..d877def0b83a31 100644 --- a/api_docs/data.mdx +++ b/api_docs/data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data title: "data" image: https://source.unsplash.com/400x175/?github description: API docs for the data plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data'] --- import dataObj from './data.devdocs.json'; diff --git a/api_docs/data_query.mdx b/api_docs/data_query.mdx index 97573ad6cadb49..54ee6cc81baef6 100644 --- a/api_docs/data_query.mdx +++ b/api_docs/data_query.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data-query title: "data.query" image: https://source.unsplash.com/400x175/?github description: API docs for the data.query plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data.query'] --- import dataQueryObj from './data_query.devdocs.json'; diff --git a/api_docs/data_search.devdocs.json b/api_docs/data_search.devdocs.json index 5374d3d4bf2a08..5b91e46b4d394d 100644 --- a/api_docs/data_search.devdocs.json +++ b/api_docs/data_search.devdocs.json @@ -10591,7 +10591,7 @@ "references": [ { "plugin": "stackAlerts", - "path": "x-pack/plugins/stack_alerts/server/alert_types/es_query/lib/fetch_search_source_query.ts" + "path": "x-pack/plugins/stack_alerts/server/rule_types/es_query/lib/fetch_search_source_query.ts" }, { "plugin": "alerting", @@ -10623,11 +10623,11 @@ }, { "plugin": "stackAlerts", - "path": "x-pack/plugins/stack_alerts/server/alert_types/es_query/rule_type.test.ts" + "path": "x-pack/plugins/stack_alerts/server/rule_types/es_query/rule_type.test.ts" }, { "plugin": "stackAlerts", - "path": "x-pack/plugins/stack_alerts/server/alert_types/es_query/rule_type.test.ts" + "path": "x-pack/plugins/stack_alerts/server/rule_types/es_query/rule_type.test.ts" }, { "plugin": "securitySolution", diff --git a/api_docs/data_search.mdx b/api_docs/data_search.mdx index 3fb119d56953b9..3ca9fe49499213 100644 --- a/api_docs/data_search.mdx +++ b/api_docs/data_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data-search title: "data.search" image: https://source.unsplash.com/400x175/?github description: API docs for the data.search plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data.search'] --- import dataSearchObj from './data_search.devdocs.json'; diff --git a/api_docs/data_view_editor.mdx b/api_docs/data_view_editor.mdx index 2051c58870a00c..8729c99d5a92c2 100644 --- a/api_docs/data_view_editor.mdx +++ b/api_docs/data_view_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewEditor title: "dataViewEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewEditor plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViewEditor'] --- import dataViewEditorObj from './data_view_editor.devdocs.json'; diff --git a/api_docs/data_view_field_editor.mdx b/api_docs/data_view_field_editor.mdx index 4f4c913a97173b..7ec5e886b910b0 100644 --- a/api_docs/data_view_field_editor.mdx +++ b/api_docs/data_view_field_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewFieldEditor title: "dataViewFieldEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewFieldEditor plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViewFieldEditor'] --- import dataViewFieldEditorObj from './data_view_field_editor.devdocs.json'; diff --git a/api_docs/data_view_management.mdx b/api_docs/data_view_management.mdx index fc87dfe0a214fa..3a547eba6c843e 100644 --- a/api_docs/data_view_management.mdx +++ b/api_docs/data_view_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewManagement title: "dataViewManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewManagement plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViewManagement'] --- import dataViewManagementObj from './data_view_management.devdocs.json'; diff --git a/api_docs/data_views.devdocs.json b/api_docs/data_views.devdocs.json index dbf671a475ede0..8047f7677001f1 100644 --- a/api_docs/data_views.devdocs.json +++ b/api_docs/data_views.devdocs.json @@ -649,39 +649,39 @@ }, { "plugin": "stackAlerts", - "path": "x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/expressions/boundary_index_expression.tsx" + "path": "x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/expressions/boundary_index_expression.tsx" }, { "plugin": "stackAlerts", - "path": "x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/expressions/entity_index_expression.tsx" + "path": "x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/expressions/entity_index_expression.tsx" }, { "plugin": "stackAlerts", - "path": "x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/index.tsx" + "path": "x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/index.tsx" }, { "plugin": "stackAlerts", - "path": "x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/index.tsx" + "path": "x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/index.tsx" }, { "plugin": "stackAlerts", - "path": "x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/index.tsx" + "path": "x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/index.tsx" }, { "plugin": "stackAlerts", - "path": "x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/index.tsx" + "path": "x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/index.tsx" }, { "plugin": "stackAlerts", - "path": "x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/index.tsx" + "path": "x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/index.tsx" }, { "plugin": "stackAlerts", - "path": "x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/index.tsx" + "path": "x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/index.tsx" }, { "plugin": "stackAlerts", - "path": "x-pack/plugins/stack_alerts/public/alert_types/es_query/expression/search_source_expression_form.tsx" + "path": "x-pack/plugins/stack_alerts/public/rule_types/es_query/expression/search_source_expression_form.tsx" }, { "plugin": "synthetics", @@ -8946,39 +8946,39 @@ }, { "plugin": "stackAlerts", - "path": "x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/expressions/boundary_index_expression.tsx" + "path": "x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/expressions/boundary_index_expression.tsx" }, { "plugin": "stackAlerts", - "path": "x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/expressions/entity_index_expression.tsx" + "path": "x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/expressions/entity_index_expression.tsx" }, { "plugin": "stackAlerts", - "path": "x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/index.tsx" + "path": "x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/index.tsx" }, { "plugin": "stackAlerts", - "path": "x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/index.tsx" + "path": "x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/index.tsx" }, { "plugin": "stackAlerts", - "path": "x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/index.tsx" + "path": "x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/index.tsx" }, { "plugin": "stackAlerts", - "path": "x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/index.tsx" + "path": "x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/index.tsx" }, { "plugin": "stackAlerts", - "path": "x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/index.tsx" + "path": "x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/index.tsx" }, { "plugin": "stackAlerts", - "path": "x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/index.tsx" + "path": "x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/index.tsx" }, { "plugin": "stackAlerts", - "path": "x-pack/plugins/stack_alerts/public/alert_types/es_query/expression/search_source_expression_form.tsx" + "path": "x-pack/plugins/stack_alerts/public/rule_types/es_query/expression/search_source_expression_form.tsx" }, { "plugin": "synthetics", @@ -16324,39 +16324,39 @@ }, { "plugin": "stackAlerts", - "path": "x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/expressions/boundary_index_expression.tsx" + "path": "x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/expressions/boundary_index_expression.tsx" }, { "plugin": "stackAlerts", - "path": "x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/expressions/entity_index_expression.tsx" + "path": "x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/expressions/entity_index_expression.tsx" }, { "plugin": "stackAlerts", - "path": "x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/index.tsx" + "path": "x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/index.tsx" }, { "plugin": "stackAlerts", - "path": "x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/index.tsx" + "path": "x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/index.tsx" }, { "plugin": "stackAlerts", - "path": "x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/index.tsx" + "path": "x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/index.tsx" }, { "plugin": "stackAlerts", - "path": "x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/index.tsx" + "path": "x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/index.tsx" }, { "plugin": "stackAlerts", - "path": "x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/index.tsx" + "path": "x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/index.tsx" }, { "plugin": "stackAlerts", - "path": "x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/index.tsx" + "path": "x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/index.tsx" }, { "plugin": "stackAlerts", - "path": "x-pack/plugins/stack_alerts/public/alert_types/es_query/expression/search_source_expression_form.tsx" + "path": "x-pack/plugins/stack_alerts/public/rule_types/es_query/expression/search_source_expression_form.tsx" }, { "plugin": "synthetics", diff --git a/api_docs/data_views.mdx b/api_docs/data_views.mdx index 10bcb9d197a855..b674ef6ab8ce34 100644 --- a/api_docs/data_views.mdx +++ b/api_docs/data_views.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViews title: "dataViews" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViews plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViews'] --- import dataViewsObj from './data_views.devdocs.json'; diff --git a/api_docs/data_visualizer.mdx b/api_docs/data_visualizer.mdx index cca8d6d78f0fd3..45d04ee1c80495 100644 --- a/api_docs/data_visualizer.mdx +++ b/api_docs/data_visualizer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataVisualizer title: "dataVisualizer" image: https://source.unsplash.com/400x175/?github description: API docs for the dataVisualizer plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataVisualizer'] --- import dataVisualizerObj from './data_visualizer.devdocs.json'; diff --git a/api_docs/deprecations_by_api.mdx b/api_docs/deprecations_by_api.mdx index 92f967d07bbb3b..4a5dfffe501736 100644 --- a/api_docs/deprecations_by_api.mdx +++ b/api_docs/deprecations_by_api.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsByApi slug: /kibana-dev-docs/api-meta/deprecated-api-list-by-api title: Deprecated API usage by API description: A list of deprecated APIs, which plugins are still referencing them, and when they need to be removed by. -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/deprecations_by_plugin.mdx b/api_docs/deprecations_by_plugin.mdx index d9294f0da06997..855a4037d89442 100644 --- a/api_docs/deprecations_by_plugin.mdx +++ b/api_docs/deprecations_by_plugin.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsByPlugin slug: /kibana-dev-docs/api-meta/deprecated-api-list-by-plugin title: Deprecated API usage by plugin description: A list of deprecated APIs, which plugins are still referencing them, and when they need to be removed by. -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -899,13 +899,13 @@ migrates to using the Kibana Privilege model: https://github.com/elastic/kibana/ | Deprecated API | Reference location(s) | Remove By | | ---------------|-----------|-----------| -| | [fetch_search_source_query.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/server/alert_types/es_query/lib/fetch_search_source_query.ts#:~:text=fetch), [rule_type.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/server/alert_types/es_query/rule_type.test.ts#:~:text=fetch), [rule_type.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/server/alert_types/es_query/rule_type.test.ts#:~:text=fetch) | - | -| | [boundary_index_expression.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/expressions/boundary_index_expression.tsx#:~:text=indexPatterns), [entity_index_expression.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/expressions/entity_index_expression.tsx#:~:text=indexPatterns), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/index.tsx#:~:text=indexPatterns), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/index.tsx#:~:text=indexPatterns), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/index.tsx#:~:text=indexPatterns) | - | -| | [expression.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/alert_types/threshold/expression.tsx#:~:text=fieldFormats) | - | -| | [boundary_index_expression.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/expressions/boundary_index_expression.tsx#:~:text=title), [entity_index_expression.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/expressions/entity_index_expression.tsx#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/index.tsx#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/index.tsx#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/index.tsx#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/index.tsx#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/index.tsx#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/index.tsx#:~:text=title), [search_source_expression_form.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/alert_types/es_query/expression/search_source_expression_form.tsx#:~:text=title), [boundary_index_expression.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/expressions/boundary_index_expression.tsx#:~:text=title)+ 8 more | - | -| | [fetch_search_source_query.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/server/alert_types/es_query/lib/fetch_search_source_query.ts#:~:text=fetch), [rule_type.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/server/alert_types/es_query/rule_type.test.ts#:~:text=fetch), [rule_type.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/server/alert_types/es_query/rule_type.test.ts#:~:text=fetch) | - | -| | [boundary_index_expression.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/expressions/boundary_index_expression.tsx#:~:text=title), [entity_index_expression.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/expressions/entity_index_expression.tsx#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/index.tsx#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/index.tsx#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/index.tsx#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/index.tsx#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/index.tsx#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/index.tsx#:~:text=title), [search_source_expression_form.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/alert_types/es_query/expression/search_source_expression_form.tsx#:~:text=title), [boundary_index_expression.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/expressions/boundary_index_expression.tsx#:~:text=title)+ 8 more | - | -| | [boundary_index_expression.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/expressions/boundary_index_expression.tsx#:~:text=title), [entity_index_expression.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/expressions/entity_index_expression.tsx#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/index.tsx#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/index.tsx#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/index.tsx#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/index.tsx#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/index.tsx#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/index.tsx#:~:text=title), [search_source_expression_form.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/alert_types/es_query/expression/search_source_expression_form.tsx#:~:text=title) | - | +| | [fetch_search_source_query.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/server/rule_types/es_query/lib/fetch_search_source_query.ts#:~:text=fetch), [rule_type.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/server/rule_types/es_query/rule_type.test.ts#:~:text=fetch), [rule_type.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/server/rule_types/es_query/rule_type.test.ts#:~:text=fetch) | - | +| | [boundary_index_expression.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/expressions/boundary_index_expression.tsx#:~:text=indexPatterns), [entity_index_expression.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/expressions/entity_index_expression.tsx#:~:text=indexPatterns), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/index.tsx#:~:text=indexPatterns), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/index.tsx#:~:text=indexPatterns), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/index.tsx#:~:text=indexPatterns) | - | +| | [expression.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/rule_types/threshold/expression.tsx#:~:text=fieldFormats) | - | +| | [boundary_index_expression.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/expressions/boundary_index_expression.tsx#:~:text=title), [entity_index_expression.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/expressions/entity_index_expression.tsx#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/index.tsx#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/index.tsx#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/index.tsx#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/index.tsx#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/index.tsx#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/index.tsx#:~:text=title), [search_source_expression_form.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/rule_types/es_query/expression/search_source_expression_form.tsx#:~:text=title), [boundary_index_expression.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/expressions/boundary_index_expression.tsx#:~:text=title)+ 8 more | - | +| | [fetch_search_source_query.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/server/rule_types/es_query/lib/fetch_search_source_query.ts#:~:text=fetch), [rule_type.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/server/rule_types/es_query/rule_type.test.ts#:~:text=fetch), [rule_type.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/server/rule_types/es_query/rule_type.test.ts#:~:text=fetch) | - | +| | [boundary_index_expression.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/expressions/boundary_index_expression.tsx#:~:text=title), [entity_index_expression.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/expressions/entity_index_expression.tsx#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/index.tsx#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/index.tsx#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/index.tsx#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/index.tsx#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/index.tsx#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/index.tsx#:~:text=title), [search_source_expression_form.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/rule_types/es_query/expression/search_source_expression_form.tsx#:~:text=title), [boundary_index_expression.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/expressions/boundary_index_expression.tsx#:~:text=title)+ 8 more | - | +| | [boundary_index_expression.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/expressions/boundary_index_expression.tsx#:~:text=title), [entity_index_expression.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/expressions/entity_index_expression.tsx#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/index.tsx#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/index.tsx#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/index.tsx#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/index.tsx#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/index.tsx#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/index.tsx#:~:text=title), [search_source_expression_form.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/rule_types/es_query/expression/search_source_expression_form.tsx#:~:text=title) | - | diff --git a/api_docs/deprecations_by_team.mdx b/api_docs/deprecations_by_team.mdx index c7311050cdf5e4..83c403b3d04f99 100644 --- a/api_docs/deprecations_by_team.mdx +++ b/api_docs/deprecations_by_team.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsDueByTeam slug: /kibana-dev-docs/api-meta/deprecations-due-by-team title: Deprecated APIs due to be removed, by team description: Lists the teams that are referencing deprecated APIs with a remove by date. -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/dev_tools.mdx b/api_docs/dev_tools.mdx index 016caf397fa15f..09bc7f8d881c33 100644 --- a/api_docs/dev_tools.mdx +++ b/api_docs/dev_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/devTools title: "devTools" image: https://source.unsplash.com/400x175/?github description: API docs for the devTools plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'devTools'] --- import devToolsObj from './dev_tools.devdocs.json'; diff --git a/api_docs/discover.mdx b/api_docs/discover.mdx index a9b6af99dd77e0..3005950d3c3ef1 100644 --- a/api_docs/discover.mdx +++ b/api_docs/discover.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discover title: "discover" image: https://source.unsplash.com/400x175/?github description: API docs for the discover plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discover'] --- import discoverObj from './discover.devdocs.json'; diff --git a/api_docs/discover_enhanced.mdx b/api_docs/discover_enhanced.mdx index 0db95822d49a8b..99561e68b33861 100644 --- a/api_docs/discover_enhanced.mdx +++ b/api_docs/discover_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discoverEnhanced title: "discoverEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the discoverEnhanced plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discoverEnhanced'] --- import discoverEnhancedObj from './discover_enhanced.devdocs.json'; diff --git a/api_docs/embeddable.mdx b/api_docs/embeddable.mdx index a37f160e9856c7..3e14c2b31def89 100644 --- a/api_docs/embeddable.mdx +++ b/api_docs/embeddable.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/embeddable title: "embeddable" image: https://source.unsplash.com/400x175/?github description: API docs for the embeddable plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'embeddable'] --- import embeddableObj from './embeddable.devdocs.json'; diff --git a/api_docs/embeddable_enhanced.mdx b/api_docs/embeddable_enhanced.mdx index 95acf704c066f3..78cb08e6c398dc 100644 --- a/api_docs/embeddable_enhanced.mdx +++ b/api_docs/embeddable_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/embeddableEnhanced title: "embeddableEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the embeddableEnhanced plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'embeddableEnhanced'] --- import embeddableEnhancedObj from './embeddable_enhanced.devdocs.json'; diff --git a/api_docs/encrypted_saved_objects.mdx b/api_docs/encrypted_saved_objects.mdx index 55196daed59f56..78ecec664c1e7e 100644 --- a/api_docs/encrypted_saved_objects.mdx +++ b/api_docs/encrypted_saved_objects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/encryptedSavedObjects title: "encryptedSavedObjects" image: https://source.unsplash.com/400x175/?github description: API docs for the encryptedSavedObjects plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'encryptedSavedObjects'] --- import encryptedSavedObjectsObj from './encrypted_saved_objects.devdocs.json'; diff --git a/api_docs/enterprise_search.mdx b/api_docs/enterprise_search.mdx index b05fe04353180a..665d53f6b55600 100644 --- a/api_docs/enterprise_search.mdx +++ b/api_docs/enterprise_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/enterpriseSearch title: "enterpriseSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the enterpriseSearch plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'enterpriseSearch'] --- import enterpriseSearchObj from './enterprise_search.devdocs.json'; diff --git a/api_docs/es_ui_shared.mdx b/api_docs/es_ui_shared.mdx index c279a171ef789e..da341659105398 100644 --- a/api_docs/es_ui_shared.mdx +++ b/api_docs/es_ui_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/esUiShared title: "esUiShared" image: https://source.unsplash.com/400x175/?github description: API docs for the esUiShared plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'esUiShared'] --- import esUiSharedObj from './es_ui_shared.devdocs.json'; diff --git a/api_docs/event_annotation.mdx b/api_docs/event_annotation.mdx index 6f2a2d753bfc2c..efebe881daba5f 100644 --- a/api_docs/event_annotation.mdx +++ b/api_docs/event_annotation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventAnnotation title: "eventAnnotation" image: https://source.unsplash.com/400x175/?github description: API docs for the eventAnnotation plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventAnnotation'] --- import eventAnnotationObj from './event_annotation.devdocs.json'; diff --git a/api_docs/event_log.mdx b/api_docs/event_log.mdx index ea9b7aa97352ca..33505035f236d0 100644 --- a/api_docs/event_log.mdx +++ b/api_docs/event_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventLog title: "eventLog" image: https://source.unsplash.com/400x175/?github description: API docs for the eventLog plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventLog'] --- import eventLogObj from './event_log.devdocs.json'; diff --git a/api_docs/expression_error.mdx b/api_docs/expression_error.mdx index 6e6f778e96debc..6eed9eb9ad71f2 100644 --- a/api_docs/expression_error.mdx +++ b/api_docs/expression_error.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionError title: "expressionError" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionError plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionError'] --- import expressionErrorObj from './expression_error.devdocs.json'; diff --git a/api_docs/expression_gauge.mdx b/api_docs/expression_gauge.mdx index fb56b758dd6afd..fbd2b3668364cd 100644 --- a/api_docs/expression_gauge.mdx +++ b/api_docs/expression_gauge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionGauge title: "expressionGauge" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionGauge plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionGauge'] --- import expressionGaugeObj from './expression_gauge.devdocs.json'; diff --git a/api_docs/expression_heatmap.mdx b/api_docs/expression_heatmap.mdx index 8541a49468ea5f..8c9f02a605a219 100644 --- a/api_docs/expression_heatmap.mdx +++ b/api_docs/expression_heatmap.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionHeatmap title: "expressionHeatmap" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionHeatmap plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionHeatmap'] --- import expressionHeatmapObj from './expression_heatmap.devdocs.json'; diff --git a/api_docs/expression_image.mdx b/api_docs/expression_image.mdx index 340521a94c01f6..3cf60f5b35f592 100644 --- a/api_docs/expression_image.mdx +++ b/api_docs/expression_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionImage title: "expressionImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionImage plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionImage'] --- import expressionImageObj from './expression_image.devdocs.json'; diff --git a/api_docs/expression_legacy_metric_vis.mdx b/api_docs/expression_legacy_metric_vis.mdx index 3cc007b2f8c704..20265e2fe2b26a 100644 --- a/api_docs/expression_legacy_metric_vis.mdx +++ b/api_docs/expression_legacy_metric_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionLegacyMetricVis title: "expressionLegacyMetricVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionLegacyMetricVis plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionLegacyMetricVis'] --- import expressionLegacyMetricVisObj from './expression_legacy_metric_vis.devdocs.json'; diff --git a/api_docs/expression_metric.mdx b/api_docs/expression_metric.mdx index 455050e452e59f..5721a6fa8b1177 100644 --- a/api_docs/expression_metric.mdx +++ b/api_docs/expression_metric.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionMetric title: "expressionMetric" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionMetric plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionMetric'] --- import expressionMetricObj from './expression_metric.devdocs.json'; diff --git a/api_docs/expression_metric_vis.mdx b/api_docs/expression_metric_vis.mdx index 73f0f7ad1235a8..83401384266b0e 100644 --- a/api_docs/expression_metric_vis.mdx +++ b/api_docs/expression_metric_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionMetricVis title: "expressionMetricVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionMetricVis plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionMetricVis'] --- import expressionMetricVisObj from './expression_metric_vis.devdocs.json'; diff --git a/api_docs/expression_partition_vis.mdx b/api_docs/expression_partition_vis.mdx index ed3632ca4a00fa..5a378b80443336 100644 --- a/api_docs/expression_partition_vis.mdx +++ b/api_docs/expression_partition_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionPartitionVis title: "expressionPartitionVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionPartitionVis plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionPartitionVis'] --- import expressionPartitionVisObj from './expression_partition_vis.devdocs.json'; diff --git a/api_docs/expression_repeat_image.mdx b/api_docs/expression_repeat_image.mdx index 82b7ebb310ed55..4c8cf16e0c1271 100644 --- a/api_docs/expression_repeat_image.mdx +++ b/api_docs/expression_repeat_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionRepeatImage title: "expressionRepeatImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionRepeatImage plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionRepeatImage'] --- import expressionRepeatImageObj from './expression_repeat_image.devdocs.json'; diff --git a/api_docs/expression_reveal_image.mdx b/api_docs/expression_reveal_image.mdx index 931a50523440cd..5d8eda3415f622 100644 --- a/api_docs/expression_reveal_image.mdx +++ b/api_docs/expression_reveal_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionRevealImage title: "expressionRevealImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionRevealImage plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionRevealImage'] --- import expressionRevealImageObj from './expression_reveal_image.devdocs.json'; diff --git a/api_docs/expression_shape.mdx b/api_docs/expression_shape.mdx index d7daa95bff846d..bc6439284a7443 100644 --- a/api_docs/expression_shape.mdx +++ b/api_docs/expression_shape.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionShape title: "expressionShape" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionShape plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionShape'] --- import expressionShapeObj from './expression_shape.devdocs.json'; diff --git a/api_docs/expression_tagcloud.mdx b/api_docs/expression_tagcloud.mdx index e408a004cc33fc..73f9a99cf6b24f 100644 --- a/api_docs/expression_tagcloud.mdx +++ b/api_docs/expression_tagcloud.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionTagcloud title: "expressionTagcloud" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionTagcloud plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionTagcloud'] --- import expressionTagcloudObj from './expression_tagcloud.devdocs.json'; diff --git a/api_docs/expression_x_y.mdx b/api_docs/expression_x_y.mdx index ea2853fff9008e..a1b616c68afbd7 100644 --- a/api_docs/expression_x_y.mdx +++ b/api_docs/expression_x_y.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionXY title: "expressionXY" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionXY plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionXY'] --- import expressionXYObj from './expression_x_y.devdocs.json'; diff --git a/api_docs/expressions.devdocs.json b/api_docs/expressions.devdocs.json index dc286cf76daa66..ac65def6fbf5ac 100644 --- a/api_docs/expressions.devdocs.json +++ b/api_docs/expressions.devdocs.json @@ -32325,6 +32325,42 @@ "path": "src/plugins/expressions/common/service/expressions_services.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "expressions", + "id": "def-common.ExpressionExecutionParams.partial", + "type": "CompoundType", + "tags": [ + "default" + ], + "label": "partial", + "description": [ + "\nToggles the partial results support." + ], + "signature": [ + "boolean | undefined" + ], + "path": "src/plugins/expressions/common/service/expressions_services.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "expressions", + "id": "def-common.ExpressionExecutionParams.throttle", + "type": "number", + "tags": [ + "deafult" + ], + "label": "throttle", + "description": [ + "\nThrottling of partial results in milliseconds. 0 is disabling the throttling." + ], + "signature": [ + "number | undefined" + ], + "path": "src/plugins/expressions/common/service/expressions_services.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false diff --git a/api_docs/expressions.mdx b/api_docs/expressions.mdx index d30e3fe086b66a..19516c804c3b73 100644 --- a/api_docs/expressions.mdx +++ b/api_docs/expressions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressions title: "expressions" image: https://source.unsplash.com/400x175/?github description: API docs for the expressions plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressions'] --- import expressionsObj from './expressions.devdocs.json'; @@ -21,7 +21,7 @@ Contact [App Services](https://github.com/orgs/elastic/teams/kibana-app-services | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 2196 | 74 | 1739 | 5 | +| 2198 | 74 | 1739 | 5 | ## Client diff --git a/api_docs/features.mdx b/api_docs/features.mdx index 21ee873128033d..3850d9b3733b68 100644 --- a/api_docs/features.mdx +++ b/api_docs/features.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/features title: "features" image: https://source.unsplash.com/400x175/?github description: API docs for the features plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'features'] --- import featuresObj from './features.devdocs.json'; diff --git a/api_docs/field_formats.mdx b/api_docs/field_formats.mdx index 420432acec1417..9f1de062147d71 100644 --- a/api_docs/field_formats.mdx +++ b/api_docs/field_formats.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fieldFormats title: "fieldFormats" image: https://source.unsplash.com/400x175/?github description: API docs for the fieldFormats plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fieldFormats'] --- import fieldFormatsObj from './field_formats.devdocs.json'; diff --git a/api_docs/file_upload.mdx b/api_docs/file_upload.mdx index 3345f4652c979b..2c084d24f2eb93 100644 --- a/api_docs/file_upload.mdx +++ b/api_docs/file_upload.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fileUpload title: "fileUpload" image: https://source.unsplash.com/400x175/?github description: API docs for the fileUpload plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fileUpload'] --- import fileUploadObj from './file_upload.devdocs.json'; diff --git a/api_docs/files.mdx b/api_docs/files.mdx index 3843c12d4136fd..f13e476bf87539 100644 --- a/api_docs/files.mdx +++ b/api_docs/files.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/files title: "files" image: https://source.unsplash.com/400x175/?github description: API docs for the files plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'files'] --- import filesObj from './files.devdocs.json'; diff --git a/api_docs/fleet.mdx b/api_docs/fleet.mdx index 6fc456035b9a32..b26e97152a07af 100644 --- a/api_docs/fleet.mdx +++ b/api_docs/fleet.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fleet title: "fleet" image: https://source.unsplash.com/400x175/?github description: API docs for the fleet plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fleet'] --- import fleetObj from './fleet.devdocs.json'; diff --git a/api_docs/global_search.mdx b/api_docs/global_search.mdx index 64e25357c4231a..5e3de858cace24 100644 --- a/api_docs/global_search.mdx +++ b/api_docs/global_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/globalSearch title: "globalSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the globalSearch plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'globalSearch'] --- import globalSearchObj from './global_search.devdocs.json'; diff --git a/api_docs/guided_onboarding.mdx b/api_docs/guided_onboarding.mdx index ae8a5d824ef89d..89d4f61a6d1d2e 100644 --- a/api_docs/guided_onboarding.mdx +++ b/api_docs/guided_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/guidedOnboarding title: "guidedOnboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the guidedOnboarding plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'guidedOnboarding'] --- import guidedOnboardingObj from './guided_onboarding.devdocs.json'; diff --git a/api_docs/home.mdx b/api_docs/home.mdx index 2f01a404aac130..be25a9d9dcc3d1 100644 --- a/api_docs/home.mdx +++ b/api_docs/home.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/home title: "home" image: https://source.unsplash.com/400x175/?github description: API docs for the home plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'home'] --- import homeObj from './home.devdocs.json'; diff --git a/api_docs/index_lifecycle_management.mdx b/api_docs/index_lifecycle_management.mdx index 60edf798cc446d..a9b399905f3f88 100644 --- a/api_docs/index_lifecycle_management.mdx +++ b/api_docs/index_lifecycle_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/indexLifecycleManagement title: "indexLifecycleManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the indexLifecycleManagement plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'indexLifecycleManagement'] --- import indexLifecycleManagementObj from './index_lifecycle_management.devdocs.json'; diff --git a/api_docs/index_management.mdx b/api_docs/index_management.mdx index e320714989ef6a..788290f81080a5 100644 --- a/api_docs/index_management.mdx +++ b/api_docs/index_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/indexManagement title: "indexManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the indexManagement plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'indexManagement'] --- import indexManagementObj from './index_management.devdocs.json'; diff --git a/api_docs/infra.mdx b/api_docs/infra.mdx index 31687ba20fa211..d8d5bbed51a502 100644 --- a/api_docs/infra.mdx +++ b/api_docs/infra.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/infra title: "infra" image: https://source.unsplash.com/400x175/?github description: API docs for the infra plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'infra'] --- import infraObj from './infra.devdocs.json'; diff --git a/api_docs/inspector.mdx b/api_docs/inspector.mdx index 9336a32be05988..bce0984ea99d2a 100644 --- a/api_docs/inspector.mdx +++ b/api_docs/inspector.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/inspector title: "inspector" image: https://source.unsplash.com/400x175/?github description: API docs for the inspector plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'inspector'] --- import inspectorObj from './inspector.devdocs.json'; diff --git a/api_docs/interactive_setup.mdx b/api_docs/interactive_setup.mdx index 629fa3d39a7fb3..e0751b1950f3a3 100644 --- a/api_docs/interactive_setup.mdx +++ b/api_docs/interactive_setup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/interactiveSetup title: "interactiveSetup" image: https://source.unsplash.com/400x175/?github description: API docs for the interactiveSetup plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'interactiveSetup'] --- import interactiveSetupObj from './interactive_setup.devdocs.json'; diff --git a/api_docs/kbn_ace.mdx b/api_docs/kbn_ace.mdx index fb7203c81faa89..543eead3dc1f75 100644 --- a/api_docs/kbn_ace.mdx +++ b/api_docs/kbn_ace.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ace title: "@kbn/ace" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ace plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ace'] --- import kbnAceObj from './kbn_ace.devdocs.json'; diff --git a/api_docs/kbn_aiops_components.mdx b/api_docs/kbn_aiops_components.mdx index b68d2d21a3496f..cf675a0333515c 100644 --- a/api_docs/kbn_aiops_components.mdx +++ b/api_docs/kbn_aiops_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-components title: "@kbn/aiops-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-components plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-components'] --- import kbnAiopsComponentsObj from './kbn_aiops_components.devdocs.json'; diff --git a/api_docs/kbn_aiops_utils.mdx b/api_docs/kbn_aiops_utils.mdx index 89e0b4725b53c8..39f6772366becd 100644 --- a/api_docs/kbn_aiops_utils.mdx +++ b/api_docs/kbn_aiops_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-utils title: "@kbn/aiops-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-utils plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-utils'] --- import kbnAiopsUtilsObj from './kbn_aiops_utils.devdocs.json'; diff --git a/api_docs/kbn_alerts.mdx b/api_docs/kbn_alerts.mdx index 15d7e647bf1115..82ff812d30dc11 100644 --- a/api_docs/kbn_alerts.mdx +++ b/api_docs/kbn_alerts.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts title: "@kbn/alerts" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts'] --- import kbnAlertsObj from './kbn_alerts.devdocs.json'; diff --git a/api_docs/kbn_analytics.mdx b/api_docs/kbn_analytics.mdx index 38a266e59cf94c..441fc6f3a9c7fe 100644 --- a/api_docs/kbn_analytics.mdx +++ b/api_docs/kbn_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics title: "@kbn/analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics'] --- import kbnAnalyticsObj from './kbn_analytics.devdocs.json'; diff --git a/api_docs/kbn_analytics_client.mdx b/api_docs/kbn_analytics_client.mdx index ac32161c59fd1e..56ce36ed77c7c7 100644 --- a/api_docs/kbn_analytics_client.mdx +++ b/api_docs/kbn_analytics_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-client title: "@kbn/analytics-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-client plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-client'] --- import kbnAnalyticsClientObj from './kbn_analytics_client.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx index 325340598ba493..914507d5551776 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-browser title: "@kbn/analytics-shippers-elastic-v3-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-browser plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-elastic-v3-browser'] --- import kbnAnalyticsShippersElasticV3BrowserObj from './kbn_analytics_shippers_elastic_v3_browser.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx index ec055e27289d1d..653331aac51683 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-common title: "@kbn/analytics-shippers-elastic-v3-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-common plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-elastic-v3-common'] --- import kbnAnalyticsShippersElasticV3CommonObj from './kbn_analytics_shippers_elastic_v3_common.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx index 0ed7af3bbe2a6d..7a0d368a5cb5e3 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-server title: "@kbn/analytics-shippers-elastic-v3-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-server plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-elastic-v3-server'] --- import kbnAnalyticsShippersElasticV3ServerObj from './kbn_analytics_shippers_elastic_v3_server.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_fullstory.mdx b/api_docs/kbn_analytics_shippers_fullstory.mdx index f240f890ccdc1e..fe1a1bae957246 100644 --- a/api_docs/kbn_analytics_shippers_fullstory.mdx +++ b/api_docs/kbn_analytics_shippers_fullstory.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-fullstory title: "@kbn/analytics-shippers-fullstory" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-fullstory plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-fullstory'] --- import kbnAnalyticsShippersFullstoryObj from './kbn_analytics_shippers_fullstory.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_gainsight.mdx b/api_docs/kbn_analytics_shippers_gainsight.mdx index b03f239d4c7f94..56aedc3d894d35 100644 --- a/api_docs/kbn_analytics_shippers_gainsight.mdx +++ b/api_docs/kbn_analytics_shippers_gainsight.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-gainsight title: "@kbn/analytics-shippers-gainsight" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-gainsight plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-gainsight'] --- import kbnAnalyticsShippersGainsightObj from './kbn_analytics_shippers_gainsight.devdocs.json'; diff --git a/api_docs/kbn_apm_config_loader.mdx b/api_docs/kbn_apm_config_loader.mdx index e3d4ba2fad3fc7..f9ab1a797fc181 100644 --- a/api_docs/kbn_apm_config_loader.mdx +++ b/api_docs/kbn_apm_config_loader.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-config-loader title: "@kbn/apm-config-loader" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-config-loader plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-config-loader'] --- import kbnApmConfigLoaderObj from './kbn_apm_config_loader.devdocs.json'; diff --git a/api_docs/kbn_apm_synthtrace.mdx b/api_docs/kbn_apm_synthtrace.mdx index 0f2760630787c2..991b08fce024b6 100644 --- a/api_docs/kbn_apm_synthtrace.mdx +++ b/api_docs/kbn_apm_synthtrace.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-synthtrace title: "@kbn/apm-synthtrace" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-synthtrace plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-synthtrace'] --- import kbnApmSynthtraceObj from './kbn_apm_synthtrace.devdocs.json'; diff --git a/api_docs/kbn_apm_utils.mdx b/api_docs/kbn_apm_utils.mdx index e172eb68ba0d11..bfd367e4ea31bd 100644 --- a/api_docs/kbn_apm_utils.mdx +++ b/api_docs/kbn_apm_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-utils title: "@kbn/apm-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-utils plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-utils'] --- import kbnApmUtilsObj from './kbn_apm_utils.devdocs.json'; diff --git a/api_docs/kbn_axe_config.mdx b/api_docs/kbn_axe_config.mdx index 9f070de5b32d5a..e4b3b20f4b49ff 100644 --- a/api_docs/kbn_axe_config.mdx +++ b/api_docs/kbn_axe_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-axe-config title: "@kbn/axe-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/axe-config plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/axe-config'] --- import kbnAxeConfigObj from './kbn_axe_config.devdocs.json'; diff --git a/api_docs/kbn_cases_components.mdx b/api_docs/kbn_cases_components.mdx index 70d459d4a32298..b818d5d05404f8 100644 --- a/api_docs/kbn_cases_components.mdx +++ b/api_docs/kbn_cases_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cases-components title: "@kbn/cases-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cases-components plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cases-components'] --- import kbnCasesComponentsObj from './kbn_cases_components.devdocs.json'; diff --git a/api_docs/kbn_chart_icons.mdx b/api_docs/kbn_chart_icons.mdx index 9bac9d9cb89195..dc53e3d7090c34 100644 --- a/api_docs/kbn_chart_icons.mdx +++ b/api_docs/kbn_chart_icons.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-chart-icons title: "@kbn/chart-icons" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/chart-icons plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/chart-icons'] --- import kbnChartIconsObj from './kbn_chart_icons.devdocs.json'; diff --git a/api_docs/kbn_ci_stats_core.mdx b/api_docs/kbn_ci_stats_core.mdx index 18c73cbe904b57..4802f849f5a886 100644 --- a/api_docs/kbn_ci_stats_core.mdx +++ b/api_docs/kbn_ci_stats_core.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-core title: "@kbn/ci-stats-core" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-core plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ci-stats-core'] --- import kbnCiStatsCoreObj from './kbn_ci_stats_core.devdocs.json'; diff --git a/api_docs/kbn_ci_stats_performance_metrics.mdx b/api_docs/kbn_ci_stats_performance_metrics.mdx index 38981eb15b391f..ca6df929dded0e 100644 --- a/api_docs/kbn_ci_stats_performance_metrics.mdx +++ b/api_docs/kbn_ci_stats_performance_metrics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-performance-metrics title: "@kbn/ci-stats-performance-metrics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-performance-metrics plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ci-stats-performance-metrics'] --- import kbnCiStatsPerformanceMetricsObj from './kbn_ci_stats_performance_metrics.devdocs.json'; diff --git a/api_docs/kbn_ci_stats_reporter.mdx b/api_docs/kbn_ci_stats_reporter.mdx index 28222594047b7d..345d9e4387a202 100644 --- a/api_docs/kbn_ci_stats_reporter.mdx +++ b/api_docs/kbn_ci_stats_reporter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-reporter title: "@kbn/ci-stats-reporter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-reporter plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ci-stats-reporter'] --- import kbnCiStatsReporterObj from './kbn_ci_stats_reporter.devdocs.json'; diff --git a/api_docs/kbn_cli_dev_mode.mdx b/api_docs/kbn_cli_dev_mode.mdx index 8cfe2f8b99aafe..a851abd2702af9 100644 --- a/api_docs/kbn_cli_dev_mode.mdx +++ b/api_docs/kbn_cli_dev_mode.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cli-dev-mode title: "@kbn/cli-dev-mode" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cli-dev-mode plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cli-dev-mode'] --- import kbnCliDevModeObj from './kbn_cli_dev_mode.devdocs.json'; diff --git a/api_docs/kbn_coloring.mdx b/api_docs/kbn_coloring.mdx index 7b14a6c77e7c1e..2d1c1e6429ef98 100644 --- a/api_docs/kbn_coloring.mdx +++ b/api_docs/kbn_coloring.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-coloring title: "@kbn/coloring" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/coloring plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/coloring'] --- import kbnColoringObj from './kbn_coloring.devdocs.json'; diff --git a/api_docs/kbn_config.mdx b/api_docs/kbn_config.mdx index b20e2fdf6f0dd5..be425f51e203c0 100644 --- a/api_docs/kbn_config.mdx +++ b/api_docs/kbn_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config title: "@kbn/config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/config'] --- import kbnConfigObj from './kbn_config.devdocs.json'; diff --git a/api_docs/kbn_config_mocks.mdx b/api_docs/kbn_config_mocks.mdx index bb650a3d835899..7dba887ec2baaf 100644 --- a/api_docs/kbn_config_mocks.mdx +++ b/api_docs/kbn_config_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config-mocks title: "@kbn/config-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config-mocks plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/config-mocks'] --- import kbnConfigMocksObj from './kbn_config_mocks.devdocs.json'; diff --git a/api_docs/kbn_config_schema.mdx b/api_docs/kbn_config_schema.mdx index 85d34b44c8d68c..bda3f15175d2fe 100644 --- a/api_docs/kbn_config_schema.mdx +++ b/api_docs/kbn_config_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config-schema title: "@kbn/config-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config-schema plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/config-schema'] --- import kbnConfigSchemaObj from './kbn_config_schema.devdocs.json'; diff --git a/api_docs/kbn_content_management_table_list.mdx b/api_docs/kbn_content_management_table_list.mdx index 9a669546c3fb0e..2bc8aac5d946a5 100644 --- a/api_docs/kbn_content_management_table_list.mdx +++ b/api_docs/kbn_content_management_table_list.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list title: "@kbn/content-management-table-list" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list'] --- import kbnContentManagementTableListObj from './kbn_content_management_table_list.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_browser.mdx b/api_docs/kbn_core_analytics_browser.mdx index aeaa4aa93cb6ce..213263f558cf08 100644 --- a/api_docs/kbn_core_analytics_browser.mdx +++ b/api_docs/kbn_core_analytics_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser title: "@kbn/core-analytics-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-browser'] --- import kbnCoreAnalyticsBrowserObj from './kbn_core_analytics_browser.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_browser_internal.mdx b/api_docs/kbn_core_analytics_browser_internal.mdx index f4d7180e926752..8d3de0bef1e6d5 100644 --- a/api_docs/kbn_core_analytics_browser_internal.mdx +++ b/api_docs/kbn_core_analytics_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser-internal title: "@kbn/core-analytics-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser-internal plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-browser-internal'] --- import kbnCoreAnalyticsBrowserInternalObj from './kbn_core_analytics_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_browser_mocks.mdx b/api_docs/kbn_core_analytics_browser_mocks.mdx index 366eb4a0efc7d4..2630418b1942d6 100644 --- a/api_docs/kbn_core_analytics_browser_mocks.mdx +++ b/api_docs/kbn_core_analytics_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser-mocks title: "@kbn/core-analytics-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser-mocks plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-browser-mocks'] --- import kbnCoreAnalyticsBrowserMocksObj from './kbn_core_analytics_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_server.mdx b/api_docs/kbn_core_analytics_server.mdx index f11f638fb48337..6fbcdd22652abd 100644 --- a/api_docs/kbn_core_analytics_server.mdx +++ b/api_docs/kbn_core_analytics_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server title: "@kbn/core-analytics-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-server'] --- import kbnCoreAnalyticsServerObj from './kbn_core_analytics_server.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_server_internal.mdx b/api_docs/kbn_core_analytics_server_internal.mdx index c3a05704928e22..4d0f8fa8064103 100644 --- a/api_docs/kbn_core_analytics_server_internal.mdx +++ b/api_docs/kbn_core_analytics_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server-internal title: "@kbn/core-analytics-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server-internal plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-server-internal'] --- import kbnCoreAnalyticsServerInternalObj from './kbn_core_analytics_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_server_mocks.mdx b/api_docs/kbn_core_analytics_server_mocks.mdx index d5dcd89817adc7..d318601854cb55 100644 --- a/api_docs/kbn_core_analytics_server_mocks.mdx +++ b/api_docs/kbn_core_analytics_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server-mocks title: "@kbn/core-analytics-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server-mocks plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-server-mocks'] --- import kbnCoreAnalyticsServerMocksObj from './kbn_core_analytics_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_application_browser.mdx b/api_docs/kbn_core_application_browser.mdx index bbb62d9cf8429e..92b4ee94ba6f33 100644 --- a/api_docs/kbn_core_application_browser.mdx +++ b/api_docs/kbn_core_application_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser title: "@kbn/core-application-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-application-browser'] --- import kbnCoreApplicationBrowserObj from './kbn_core_application_browser.devdocs.json'; diff --git a/api_docs/kbn_core_application_browser_internal.mdx b/api_docs/kbn_core_application_browser_internal.mdx index 85fa3e0d7f9353..fa821529967af6 100644 --- a/api_docs/kbn_core_application_browser_internal.mdx +++ b/api_docs/kbn_core_application_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser-internal title: "@kbn/core-application-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser-internal plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-application-browser-internal'] --- import kbnCoreApplicationBrowserInternalObj from './kbn_core_application_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_application_browser_mocks.mdx b/api_docs/kbn_core_application_browser_mocks.mdx index 160327c3e75a03..b177a6915b6bc3 100644 --- a/api_docs/kbn_core_application_browser_mocks.mdx +++ b/api_docs/kbn_core_application_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser-mocks title: "@kbn/core-application-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser-mocks plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-application-browser-mocks'] --- import kbnCoreApplicationBrowserMocksObj from './kbn_core_application_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_application_common.mdx b/api_docs/kbn_core_application_common.mdx index 5e3a390fb8ae98..4dabbbca244f56 100644 --- a/api_docs/kbn_core_application_common.mdx +++ b/api_docs/kbn_core_application_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-common title: "@kbn/core-application-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-common plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-application-common'] --- import kbnCoreApplicationCommonObj from './kbn_core_application_common.devdocs.json'; diff --git a/api_docs/kbn_core_apps_browser_internal.mdx b/api_docs/kbn_core_apps_browser_internal.mdx index 2d6ffa13a4f6a6..7c2326fd4755b3 100644 --- a/api_docs/kbn_core_apps_browser_internal.mdx +++ b/api_docs/kbn_core_apps_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-browser-internal title: "@kbn/core-apps-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-browser-internal plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-apps-browser-internal'] --- import kbnCoreAppsBrowserInternalObj from './kbn_core_apps_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_apps_browser_mocks.mdx b/api_docs/kbn_core_apps_browser_mocks.mdx index 3ef896542209ec..9a4ea99ac401b6 100644 --- a/api_docs/kbn_core_apps_browser_mocks.mdx +++ b/api_docs/kbn_core_apps_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-browser-mocks title: "@kbn/core-apps-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-browser-mocks plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-apps-browser-mocks'] --- import kbnCoreAppsBrowserMocksObj from './kbn_core_apps_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_apps_server_internal.mdx b/api_docs/kbn_core_apps_server_internal.mdx index 76e75f50f34e14..638dad4906e1bc 100644 --- a/api_docs/kbn_core_apps_server_internal.mdx +++ b/api_docs/kbn_core_apps_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-server-internal title: "@kbn/core-apps-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-server-internal plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-apps-server-internal'] --- import kbnCoreAppsServerInternalObj from './kbn_core_apps_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_base_browser_mocks.mdx b/api_docs/kbn_core_base_browser_mocks.mdx index b349246244e698..c82530e791b77e 100644 --- a/api_docs/kbn_core_base_browser_mocks.mdx +++ b/api_docs/kbn_core_base_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-browser-mocks title: "@kbn/core-base-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-browser-mocks plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-base-browser-mocks'] --- import kbnCoreBaseBrowserMocksObj from './kbn_core_base_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_base_common.mdx b/api_docs/kbn_core_base_common.mdx index a88467df074b6e..1e19682c69f300 100644 --- a/api_docs/kbn_core_base_common.mdx +++ b/api_docs/kbn_core_base_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-common title: "@kbn/core-base-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-common plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-base-common'] --- import kbnCoreBaseCommonObj from './kbn_core_base_common.devdocs.json'; diff --git a/api_docs/kbn_core_base_server_internal.mdx b/api_docs/kbn_core_base_server_internal.mdx index 5df1006cd91c1e..bb39109b75a879 100644 --- a/api_docs/kbn_core_base_server_internal.mdx +++ b/api_docs/kbn_core_base_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-server-internal title: "@kbn/core-base-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-server-internal plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-base-server-internal'] --- import kbnCoreBaseServerInternalObj from './kbn_core_base_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_base_server_mocks.mdx b/api_docs/kbn_core_base_server_mocks.mdx index 9a8a2516299442..95ccabe4a1fcab 100644 --- a/api_docs/kbn_core_base_server_mocks.mdx +++ b/api_docs/kbn_core_base_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-server-mocks title: "@kbn/core-base-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-server-mocks plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-base-server-mocks'] --- import kbnCoreBaseServerMocksObj from './kbn_core_base_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_capabilities_browser_mocks.mdx b/api_docs/kbn_core_capabilities_browser_mocks.mdx index 8dbd52acc2524b..5d4506a759ca18 100644 --- a/api_docs/kbn_core_capabilities_browser_mocks.mdx +++ b/api_docs/kbn_core_capabilities_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-browser-mocks title: "@kbn/core-capabilities-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-browser-mocks plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-capabilities-browser-mocks'] --- import kbnCoreCapabilitiesBrowserMocksObj from './kbn_core_capabilities_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_capabilities_common.mdx b/api_docs/kbn_core_capabilities_common.mdx index ab0ef9ae1a0c55..42200bc82d6230 100644 --- a/api_docs/kbn_core_capabilities_common.mdx +++ b/api_docs/kbn_core_capabilities_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-common title: "@kbn/core-capabilities-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-common plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-capabilities-common'] --- import kbnCoreCapabilitiesCommonObj from './kbn_core_capabilities_common.devdocs.json'; diff --git a/api_docs/kbn_core_capabilities_server.mdx b/api_docs/kbn_core_capabilities_server.mdx index 6d28bd7cf40282..d2afec160b61d8 100644 --- a/api_docs/kbn_core_capabilities_server.mdx +++ b/api_docs/kbn_core_capabilities_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-server title: "@kbn/core-capabilities-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-server plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-capabilities-server'] --- import kbnCoreCapabilitiesServerObj from './kbn_core_capabilities_server.devdocs.json'; diff --git a/api_docs/kbn_core_capabilities_server_mocks.mdx b/api_docs/kbn_core_capabilities_server_mocks.mdx index a24a759643baec..daa88c2ac75381 100644 --- a/api_docs/kbn_core_capabilities_server_mocks.mdx +++ b/api_docs/kbn_core_capabilities_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-server-mocks title: "@kbn/core-capabilities-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-server-mocks plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-capabilities-server-mocks'] --- import kbnCoreCapabilitiesServerMocksObj from './kbn_core_capabilities_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_chrome_browser.mdx b/api_docs/kbn_core_chrome_browser.mdx index f672a2ed5cf292..dbe71119a6f7eb 100644 --- a/api_docs/kbn_core_chrome_browser.mdx +++ b/api_docs/kbn_core_chrome_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-chrome-browser title: "@kbn/core-chrome-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-chrome-browser plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-chrome-browser'] --- import kbnCoreChromeBrowserObj from './kbn_core_chrome_browser.devdocs.json'; diff --git a/api_docs/kbn_core_chrome_browser_mocks.mdx b/api_docs/kbn_core_chrome_browser_mocks.mdx index 8e410c374cd451..4a8c241662f9ea 100644 --- a/api_docs/kbn_core_chrome_browser_mocks.mdx +++ b/api_docs/kbn_core_chrome_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-chrome-browser-mocks title: "@kbn/core-chrome-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-chrome-browser-mocks plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-chrome-browser-mocks'] --- import kbnCoreChromeBrowserMocksObj from './kbn_core_chrome_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_config_server_internal.mdx b/api_docs/kbn_core_config_server_internal.mdx index 293788a5bc40d1..d38fbfcfed45a0 100644 --- a/api_docs/kbn_core_config_server_internal.mdx +++ b/api_docs/kbn_core_config_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-config-server-internal title: "@kbn/core-config-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-config-server-internal plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-config-server-internal'] --- import kbnCoreConfigServerInternalObj from './kbn_core_config_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_browser.mdx b/api_docs/kbn_core_deprecations_browser.mdx index 07036525367494..c2395fe9b271d0 100644 --- a/api_docs/kbn_core_deprecations_browser.mdx +++ b/api_docs/kbn_core_deprecations_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser title: "@kbn/core-deprecations-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-browser'] --- import kbnCoreDeprecationsBrowserObj from './kbn_core_deprecations_browser.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_browser_internal.mdx b/api_docs/kbn_core_deprecations_browser_internal.mdx index 10469e6c2cc5ab..072218c91ef6b7 100644 --- a/api_docs/kbn_core_deprecations_browser_internal.mdx +++ b/api_docs/kbn_core_deprecations_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser-internal title: "@kbn/core-deprecations-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser-internal plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-browser-internal'] --- import kbnCoreDeprecationsBrowserInternalObj from './kbn_core_deprecations_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_browser_mocks.mdx b/api_docs/kbn_core_deprecations_browser_mocks.mdx index f2fd26ce2a2a24..46dc9e237fb8aa 100644 --- a/api_docs/kbn_core_deprecations_browser_mocks.mdx +++ b/api_docs/kbn_core_deprecations_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser-mocks title: "@kbn/core-deprecations-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser-mocks plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-browser-mocks'] --- import kbnCoreDeprecationsBrowserMocksObj from './kbn_core_deprecations_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_common.mdx b/api_docs/kbn_core_deprecations_common.mdx index b61676bfa63728..581958ac5e4682 100644 --- a/api_docs/kbn_core_deprecations_common.mdx +++ b/api_docs/kbn_core_deprecations_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-common title: "@kbn/core-deprecations-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-common plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-common'] --- import kbnCoreDeprecationsCommonObj from './kbn_core_deprecations_common.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_server.mdx b/api_docs/kbn_core_deprecations_server.mdx index 0bc0005f527873..6b39dd86c80f10 100644 --- a/api_docs/kbn_core_deprecations_server.mdx +++ b/api_docs/kbn_core_deprecations_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server title: "@kbn/core-deprecations-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-server'] --- import kbnCoreDeprecationsServerObj from './kbn_core_deprecations_server.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_server_internal.mdx b/api_docs/kbn_core_deprecations_server_internal.mdx index f08477e6c30fd4..9fdb071ab0e7c0 100644 --- a/api_docs/kbn_core_deprecations_server_internal.mdx +++ b/api_docs/kbn_core_deprecations_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server-internal title: "@kbn/core-deprecations-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server-internal plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-server-internal'] --- import kbnCoreDeprecationsServerInternalObj from './kbn_core_deprecations_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_server_mocks.mdx b/api_docs/kbn_core_deprecations_server_mocks.mdx index 1b026808412fa9..1ba0fb21e985ac 100644 --- a/api_docs/kbn_core_deprecations_server_mocks.mdx +++ b/api_docs/kbn_core_deprecations_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server-mocks title: "@kbn/core-deprecations-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server-mocks plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-server-mocks'] --- import kbnCoreDeprecationsServerMocksObj from './kbn_core_deprecations_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_doc_links_browser.mdx b/api_docs/kbn_core_doc_links_browser.mdx index 009a19ea44e56f..5ef6f945d1c558 100644 --- a/api_docs/kbn_core_doc_links_browser.mdx +++ b/api_docs/kbn_core_doc_links_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-browser title: "@kbn/core-doc-links-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-browser plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-doc-links-browser'] --- import kbnCoreDocLinksBrowserObj from './kbn_core_doc_links_browser.devdocs.json'; diff --git a/api_docs/kbn_core_doc_links_browser_mocks.mdx b/api_docs/kbn_core_doc_links_browser_mocks.mdx index 532516320594f3..a7398f296e4b65 100644 --- a/api_docs/kbn_core_doc_links_browser_mocks.mdx +++ b/api_docs/kbn_core_doc_links_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-browser-mocks title: "@kbn/core-doc-links-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-browser-mocks plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-doc-links-browser-mocks'] --- import kbnCoreDocLinksBrowserMocksObj from './kbn_core_doc_links_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_doc_links_server.mdx b/api_docs/kbn_core_doc_links_server.mdx index c81171e491934f..99f3d78ba2f176 100644 --- a/api_docs/kbn_core_doc_links_server.mdx +++ b/api_docs/kbn_core_doc_links_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-server title: "@kbn/core-doc-links-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-server plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-doc-links-server'] --- import kbnCoreDocLinksServerObj from './kbn_core_doc_links_server.devdocs.json'; diff --git a/api_docs/kbn_core_doc_links_server_mocks.mdx b/api_docs/kbn_core_doc_links_server_mocks.mdx index 473fd5bdbd1937..3c66c08f923d47 100644 --- a/api_docs/kbn_core_doc_links_server_mocks.mdx +++ b/api_docs/kbn_core_doc_links_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-server-mocks title: "@kbn/core-doc-links-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-server-mocks plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-doc-links-server-mocks'] --- import kbnCoreDocLinksServerMocksObj from './kbn_core_doc_links_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_elasticsearch_client_server_internal.mdx b/api_docs/kbn_core_elasticsearch_client_server_internal.mdx index b5275e8aa00fb0..33dff066e6169c 100644 --- a/api_docs/kbn_core_elasticsearch_client_server_internal.mdx +++ b/api_docs/kbn_core_elasticsearch_client_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-client-server-internal title: "@kbn/core-elasticsearch-client-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-client-server-internal plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-client-server-internal'] --- import kbnCoreElasticsearchClientServerInternalObj from './kbn_core_elasticsearch_client_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx b/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx index 33bd7088a4f997..d2069e22f42bd6 100644 --- a/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx +++ b/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-client-server-mocks title: "@kbn/core-elasticsearch-client-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-client-server-mocks plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-client-server-mocks'] --- import kbnCoreElasticsearchClientServerMocksObj from './kbn_core_elasticsearch_client_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_elasticsearch_server.mdx b/api_docs/kbn_core_elasticsearch_server.mdx index e212dbecd1747a..22ad5f3a841697 100644 --- a/api_docs/kbn_core_elasticsearch_server.mdx +++ b/api_docs/kbn_core_elasticsearch_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server title: "@kbn/core-elasticsearch-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-server'] --- import kbnCoreElasticsearchServerObj from './kbn_core_elasticsearch_server.devdocs.json'; diff --git a/api_docs/kbn_core_elasticsearch_server_internal.mdx b/api_docs/kbn_core_elasticsearch_server_internal.mdx index 0619ef91465ff9..030d866701a5e9 100644 --- a/api_docs/kbn_core_elasticsearch_server_internal.mdx +++ b/api_docs/kbn_core_elasticsearch_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server-internal title: "@kbn/core-elasticsearch-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server-internal plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-server-internal'] --- import kbnCoreElasticsearchServerInternalObj from './kbn_core_elasticsearch_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_elasticsearch_server_mocks.mdx b/api_docs/kbn_core_elasticsearch_server_mocks.mdx index aae99cc209af12..f4d9679c56b3e3 100644 --- a/api_docs/kbn_core_elasticsearch_server_mocks.mdx +++ b/api_docs/kbn_core_elasticsearch_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server-mocks title: "@kbn/core-elasticsearch-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server-mocks plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-server-mocks'] --- import kbnCoreElasticsearchServerMocksObj from './kbn_core_elasticsearch_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_environment_server_internal.mdx b/api_docs/kbn_core_environment_server_internal.mdx index dda2348e090597..60400becbb5cab 100644 --- a/api_docs/kbn_core_environment_server_internal.mdx +++ b/api_docs/kbn_core_environment_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-environment-server-internal title: "@kbn/core-environment-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-environment-server-internal plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-environment-server-internal'] --- import kbnCoreEnvironmentServerInternalObj from './kbn_core_environment_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_environment_server_mocks.mdx b/api_docs/kbn_core_environment_server_mocks.mdx index d93d428bb6cd8f..ead0459c27cfd1 100644 --- a/api_docs/kbn_core_environment_server_mocks.mdx +++ b/api_docs/kbn_core_environment_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-environment-server-mocks title: "@kbn/core-environment-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-environment-server-mocks plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-environment-server-mocks'] --- import kbnCoreEnvironmentServerMocksObj from './kbn_core_environment_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_browser.mdx b/api_docs/kbn_core_execution_context_browser.mdx index f6816a16cd2c06..14c726b46bbad0 100644 --- a/api_docs/kbn_core_execution_context_browser.mdx +++ b/api_docs/kbn_core_execution_context_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser title: "@kbn/core-execution-context-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-browser'] --- import kbnCoreExecutionContextBrowserObj from './kbn_core_execution_context_browser.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_browser_internal.mdx b/api_docs/kbn_core_execution_context_browser_internal.mdx index f27ba64cbd6e17..7ae467ed44ace3 100644 --- a/api_docs/kbn_core_execution_context_browser_internal.mdx +++ b/api_docs/kbn_core_execution_context_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser-internal title: "@kbn/core-execution-context-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser-internal plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-browser-internal'] --- import kbnCoreExecutionContextBrowserInternalObj from './kbn_core_execution_context_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_browser_mocks.mdx b/api_docs/kbn_core_execution_context_browser_mocks.mdx index 7484b7ada05216..7081ea099fb975 100644 --- a/api_docs/kbn_core_execution_context_browser_mocks.mdx +++ b/api_docs/kbn_core_execution_context_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser-mocks title: "@kbn/core-execution-context-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser-mocks plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-browser-mocks'] --- import kbnCoreExecutionContextBrowserMocksObj from './kbn_core_execution_context_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_common.mdx b/api_docs/kbn_core_execution_context_common.mdx index 41ee6ef9680bf9..bee618b3e54a10 100644 --- a/api_docs/kbn_core_execution_context_common.mdx +++ b/api_docs/kbn_core_execution_context_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-common title: "@kbn/core-execution-context-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-common plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-common'] --- import kbnCoreExecutionContextCommonObj from './kbn_core_execution_context_common.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_server.mdx b/api_docs/kbn_core_execution_context_server.mdx index f5665a2eb87e90..93aace12c01bc6 100644 --- a/api_docs/kbn_core_execution_context_server.mdx +++ b/api_docs/kbn_core_execution_context_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server title: "@kbn/core-execution-context-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-server'] --- import kbnCoreExecutionContextServerObj from './kbn_core_execution_context_server.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_server_internal.mdx b/api_docs/kbn_core_execution_context_server_internal.mdx index c66e9f6c4aa2c6..d3a67f085cc3b0 100644 --- a/api_docs/kbn_core_execution_context_server_internal.mdx +++ b/api_docs/kbn_core_execution_context_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server-internal title: "@kbn/core-execution-context-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server-internal plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-server-internal'] --- import kbnCoreExecutionContextServerInternalObj from './kbn_core_execution_context_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_server_mocks.mdx b/api_docs/kbn_core_execution_context_server_mocks.mdx index d4d3dce50c9aa0..c905ef7c7ae88e 100644 --- a/api_docs/kbn_core_execution_context_server_mocks.mdx +++ b/api_docs/kbn_core_execution_context_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server-mocks title: "@kbn/core-execution-context-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server-mocks plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-server-mocks'] --- import kbnCoreExecutionContextServerMocksObj from './kbn_core_execution_context_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_fatal_errors_browser.mdx b/api_docs/kbn_core_fatal_errors_browser.mdx index b3d43a02ddb436..2fc80ba248fa1b 100644 --- a/api_docs/kbn_core_fatal_errors_browser.mdx +++ b/api_docs/kbn_core_fatal_errors_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-fatal-errors-browser title: "@kbn/core-fatal-errors-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-fatal-errors-browser plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-fatal-errors-browser'] --- import kbnCoreFatalErrorsBrowserObj from './kbn_core_fatal_errors_browser.devdocs.json'; diff --git a/api_docs/kbn_core_fatal_errors_browser_mocks.mdx b/api_docs/kbn_core_fatal_errors_browser_mocks.mdx index 346c050ce131b5..139bdfe8354785 100644 --- a/api_docs/kbn_core_fatal_errors_browser_mocks.mdx +++ b/api_docs/kbn_core_fatal_errors_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-fatal-errors-browser-mocks title: "@kbn/core-fatal-errors-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-fatal-errors-browser-mocks plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-fatal-errors-browser-mocks'] --- import kbnCoreFatalErrorsBrowserMocksObj from './kbn_core_fatal_errors_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_browser.mdx b/api_docs/kbn_core_http_browser.mdx index adc6aec485fadd..a4669a9c4cd34f 100644 --- a/api_docs/kbn_core_http_browser.mdx +++ b/api_docs/kbn_core_http_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser title: "@kbn/core-http-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-browser'] --- import kbnCoreHttpBrowserObj from './kbn_core_http_browser.devdocs.json'; diff --git a/api_docs/kbn_core_http_browser_internal.mdx b/api_docs/kbn_core_http_browser_internal.mdx index 887b04436e344b..1c6365f4f844c2 100644 --- a/api_docs/kbn_core_http_browser_internal.mdx +++ b/api_docs/kbn_core_http_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser-internal title: "@kbn/core-http-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser-internal plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-browser-internal'] --- import kbnCoreHttpBrowserInternalObj from './kbn_core_http_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_http_browser_mocks.mdx b/api_docs/kbn_core_http_browser_mocks.mdx index a8ea881fe65d91..a20c2f18b9309a 100644 --- a/api_docs/kbn_core_http_browser_mocks.mdx +++ b/api_docs/kbn_core_http_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser-mocks title: "@kbn/core-http-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser-mocks plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-browser-mocks'] --- import kbnCoreHttpBrowserMocksObj from './kbn_core_http_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_common.mdx b/api_docs/kbn_core_http_common.mdx index 8eb238f135f8eb..ff81a904c4e89b 100644 --- a/api_docs/kbn_core_http_common.mdx +++ b/api_docs/kbn_core_http_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-common title: "@kbn/core-http-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-common plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-common'] --- import kbnCoreHttpCommonObj from './kbn_core_http_common.devdocs.json'; diff --git a/api_docs/kbn_core_http_context_server_mocks.mdx b/api_docs/kbn_core_http_context_server_mocks.mdx index 8d66471bf2428f..98d62f3227944b 100644 --- a/api_docs/kbn_core_http_context_server_mocks.mdx +++ b/api_docs/kbn_core_http_context_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-context-server-mocks title: "@kbn/core-http-context-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-context-server-mocks plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-context-server-mocks'] --- import kbnCoreHttpContextServerMocksObj from './kbn_core_http_context_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_request_handler_context_server.mdx b/api_docs/kbn_core_http_request_handler_context_server.mdx index df50f32cd64cd9..b5a154dbe0a4be 100644 --- a/api_docs/kbn_core_http_request_handler_context_server.mdx +++ b/api_docs/kbn_core_http_request_handler_context_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-request-handler-context-server title: "@kbn/core-http-request-handler-context-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-request-handler-context-server plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-request-handler-context-server'] --- import kbnCoreHttpRequestHandlerContextServerObj from './kbn_core_http_request_handler_context_server.devdocs.json'; diff --git a/api_docs/kbn_core_http_resources_server.mdx b/api_docs/kbn_core_http_resources_server.mdx index d0a9c57a2f7f96..9398174ce61627 100644 --- a/api_docs/kbn_core_http_resources_server.mdx +++ b/api_docs/kbn_core_http_resources_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server title: "@kbn/core-http-resources-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-resources-server'] --- import kbnCoreHttpResourcesServerObj from './kbn_core_http_resources_server.devdocs.json'; diff --git a/api_docs/kbn_core_http_resources_server_internal.mdx b/api_docs/kbn_core_http_resources_server_internal.mdx index fcfe1776d0629f..d6a80f2fd2c8ae 100644 --- a/api_docs/kbn_core_http_resources_server_internal.mdx +++ b/api_docs/kbn_core_http_resources_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server-internal title: "@kbn/core-http-resources-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server-internal plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-resources-server-internal'] --- import kbnCoreHttpResourcesServerInternalObj from './kbn_core_http_resources_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_http_resources_server_mocks.mdx b/api_docs/kbn_core_http_resources_server_mocks.mdx index b5982fe7e2fb52..7f417ef58e490b 100644 --- a/api_docs/kbn_core_http_resources_server_mocks.mdx +++ b/api_docs/kbn_core_http_resources_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server-mocks title: "@kbn/core-http-resources-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server-mocks plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-resources-server-mocks'] --- import kbnCoreHttpResourcesServerMocksObj from './kbn_core_http_resources_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_router_server_internal.mdx b/api_docs/kbn_core_http_router_server_internal.mdx index 651fa802b5f1bd..0ceed1f90ccbe9 100644 --- a/api_docs/kbn_core_http_router_server_internal.mdx +++ b/api_docs/kbn_core_http_router_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-router-server-internal title: "@kbn/core-http-router-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-router-server-internal plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-router-server-internal'] --- import kbnCoreHttpRouterServerInternalObj from './kbn_core_http_router_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_http_router_server_mocks.mdx b/api_docs/kbn_core_http_router_server_mocks.mdx index ce3c5fd03425bb..7f0e0f4ecfc19a 100644 --- a/api_docs/kbn_core_http_router_server_mocks.mdx +++ b/api_docs/kbn_core_http_router_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-router-server-mocks title: "@kbn/core-http-router-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-router-server-mocks plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-router-server-mocks'] --- import kbnCoreHttpRouterServerMocksObj from './kbn_core_http_router_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_server.mdx b/api_docs/kbn_core_http_server.mdx index b40387f70004c1..95d44095b220e3 100644 --- a/api_docs/kbn_core_http_server.mdx +++ b/api_docs/kbn_core_http_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server title: "@kbn/core-http-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-server'] --- import kbnCoreHttpServerObj from './kbn_core_http_server.devdocs.json'; diff --git a/api_docs/kbn_core_http_server_internal.mdx b/api_docs/kbn_core_http_server_internal.mdx index d4b8d224f4c709..8868de4c906ad1 100644 --- a/api_docs/kbn_core_http_server_internal.mdx +++ b/api_docs/kbn_core_http_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-internal title: "@kbn/core-http-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server-internal plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-server-internal'] --- import kbnCoreHttpServerInternalObj from './kbn_core_http_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_http_server_mocks.devdocs.json b/api_docs/kbn_core_http_server_mocks.devdocs.json index 7068d6b65feaee..7479525ab94e6e 100644 --- a/api_docs/kbn_core_http_server_mocks.devdocs.json +++ b/api_docs/kbn_core_http_server_mocks.devdocs.json @@ -545,7 +545,7 @@ }, ">) => void]>; } & Omit<", "InternalHttpServiceSetup", - ", \"createRouter\" | \"basePath\" | \"auth\" | \"authRequestHeaders\"> & { auth: AuthMocked; basePath: BasePathMocked; createRouter: jest.MockedFunction<(path: string) => ", + ", \"createRouter\" | \"auth\" | \"basePath\" | \"authRequestHeaders\"> & { auth: AuthMocked; basePath: BasePathMocked; createRouter: jest.MockedFunction<(path: string) => ", { "pluginId": "@kbn/core-http-router-server-mocks", "scope": "server", diff --git a/api_docs/kbn_core_http_server_mocks.mdx b/api_docs/kbn_core_http_server_mocks.mdx index f475dd8c34066f..fbbe7589ab5610 100644 --- a/api_docs/kbn_core_http_server_mocks.mdx +++ b/api_docs/kbn_core_http_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-mocks title: "@kbn/core-http-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server-mocks plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-server-mocks'] --- import kbnCoreHttpServerMocksObj from './kbn_core_http_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_i18n_browser.mdx b/api_docs/kbn_core_i18n_browser.mdx index 561f6c658c9798..45b1d43a1f060e 100644 --- a/api_docs/kbn_core_i18n_browser.mdx +++ b/api_docs/kbn_core_i18n_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-browser title: "@kbn/core-i18n-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-browser plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-browser'] --- import kbnCoreI18nBrowserObj from './kbn_core_i18n_browser.devdocs.json'; diff --git a/api_docs/kbn_core_i18n_browser_mocks.mdx b/api_docs/kbn_core_i18n_browser_mocks.mdx index e62002bc377f79..0bbbc25e9b087c 100644 --- a/api_docs/kbn_core_i18n_browser_mocks.mdx +++ b/api_docs/kbn_core_i18n_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-browser-mocks title: "@kbn/core-i18n-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-browser-mocks plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-browser-mocks'] --- import kbnCoreI18nBrowserMocksObj from './kbn_core_i18n_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_i18n_server.mdx b/api_docs/kbn_core_i18n_server.mdx index 317d1f330d9523..ef58f7935b6c19 100644 --- a/api_docs/kbn_core_i18n_server.mdx +++ b/api_docs/kbn_core_i18n_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server title: "@kbn/core-i18n-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-server'] --- import kbnCoreI18nServerObj from './kbn_core_i18n_server.devdocs.json'; diff --git a/api_docs/kbn_core_i18n_server_internal.mdx b/api_docs/kbn_core_i18n_server_internal.mdx index a4238639bbb679..56fc494d54c2bc 100644 --- a/api_docs/kbn_core_i18n_server_internal.mdx +++ b/api_docs/kbn_core_i18n_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server-internal title: "@kbn/core-i18n-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server-internal plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-server-internal'] --- import kbnCoreI18nServerInternalObj from './kbn_core_i18n_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_i18n_server_mocks.mdx b/api_docs/kbn_core_i18n_server_mocks.mdx index db5aca875202f5..91d48115942ff6 100644 --- a/api_docs/kbn_core_i18n_server_mocks.mdx +++ b/api_docs/kbn_core_i18n_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server-mocks title: "@kbn/core-i18n-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server-mocks plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-server-mocks'] --- import kbnCoreI18nServerMocksObj from './kbn_core_i18n_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_injected_metadata_browser.mdx b/api_docs/kbn_core_injected_metadata_browser.mdx index a31e12d7c934e6..6f47cbd60b722e 100644 --- a/api_docs/kbn_core_injected_metadata_browser.mdx +++ b/api_docs/kbn_core_injected_metadata_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-injected-metadata-browser title: "@kbn/core-injected-metadata-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-injected-metadata-browser plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-injected-metadata-browser'] --- import kbnCoreInjectedMetadataBrowserObj from './kbn_core_injected_metadata_browser.devdocs.json'; diff --git a/api_docs/kbn_core_injected_metadata_browser_mocks.mdx b/api_docs/kbn_core_injected_metadata_browser_mocks.mdx index 894a9385c38395..122040075d3863 100644 --- a/api_docs/kbn_core_injected_metadata_browser_mocks.mdx +++ b/api_docs/kbn_core_injected_metadata_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-injected-metadata-browser-mocks title: "@kbn/core-injected-metadata-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-injected-metadata-browser-mocks plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-injected-metadata-browser-mocks'] --- import kbnCoreInjectedMetadataBrowserMocksObj from './kbn_core_injected_metadata_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_integrations_browser_internal.mdx b/api_docs/kbn_core_integrations_browser_internal.mdx index 9095becc0e8792..e5f32a7bfca70b 100644 --- a/api_docs/kbn_core_integrations_browser_internal.mdx +++ b/api_docs/kbn_core_integrations_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-integrations-browser-internal title: "@kbn/core-integrations-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-integrations-browser-internal plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-integrations-browser-internal'] --- import kbnCoreIntegrationsBrowserInternalObj from './kbn_core_integrations_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_integrations_browser_mocks.mdx b/api_docs/kbn_core_integrations_browser_mocks.mdx index de1f712ae8f1b9..68426c2d2a6ed5 100644 --- a/api_docs/kbn_core_integrations_browser_mocks.mdx +++ b/api_docs/kbn_core_integrations_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-integrations-browser-mocks title: "@kbn/core-integrations-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-integrations-browser-mocks plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-integrations-browser-mocks'] --- import kbnCoreIntegrationsBrowserMocksObj from './kbn_core_integrations_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_lifecycle_browser.mdx b/api_docs/kbn_core_lifecycle_browser.mdx index cafc6f20630e75..d404827bda9565 100644 --- a/api_docs/kbn_core_lifecycle_browser.mdx +++ b/api_docs/kbn_core_lifecycle_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-browser title: "@kbn/core-lifecycle-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-browser plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-lifecycle-browser'] --- import kbnCoreLifecycleBrowserObj from './kbn_core_lifecycle_browser.devdocs.json'; diff --git a/api_docs/kbn_core_lifecycle_browser_mocks.mdx b/api_docs/kbn_core_lifecycle_browser_mocks.mdx index 2f7726ffc1bc91..93c090a4981ec4 100644 --- a/api_docs/kbn_core_lifecycle_browser_mocks.mdx +++ b/api_docs/kbn_core_lifecycle_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-browser-mocks title: "@kbn/core-lifecycle-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-browser-mocks plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-lifecycle-browser-mocks'] --- import kbnCoreLifecycleBrowserMocksObj from './kbn_core_lifecycle_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_lifecycle_server.mdx b/api_docs/kbn_core_lifecycle_server.mdx index 31e9b24ead87db..cf4d7f89834f7f 100644 --- a/api_docs/kbn_core_lifecycle_server.mdx +++ b/api_docs/kbn_core_lifecycle_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-server title: "@kbn/core-lifecycle-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-server plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-lifecycle-server'] --- import kbnCoreLifecycleServerObj from './kbn_core_lifecycle_server.devdocs.json'; diff --git a/api_docs/kbn_core_lifecycle_server_mocks.mdx b/api_docs/kbn_core_lifecycle_server_mocks.mdx index 99f55b5b93d0f4..81e80ea8f36ed8 100644 --- a/api_docs/kbn_core_lifecycle_server_mocks.mdx +++ b/api_docs/kbn_core_lifecycle_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-server-mocks title: "@kbn/core-lifecycle-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-server-mocks plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-lifecycle-server-mocks'] --- import kbnCoreLifecycleServerMocksObj from './kbn_core_lifecycle_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_logging_browser_mocks.mdx b/api_docs/kbn_core_logging_browser_mocks.mdx index 142a90ab579bb8..92ec84328f0d4f 100644 --- a/api_docs/kbn_core_logging_browser_mocks.mdx +++ b/api_docs/kbn_core_logging_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-browser-mocks title: "@kbn/core-logging-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-browser-mocks plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-browser-mocks'] --- import kbnCoreLoggingBrowserMocksObj from './kbn_core_logging_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_logging_common_internal.mdx b/api_docs/kbn_core_logging_common_internal.mdx index 663c608fac9794..8fe70bce8f13bd 100644 --- a/api_docs/kbn_core_logging_common_internal.mdx +++ b/api_docs/kbn_core_logging_common_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-common-internal title: "@kbn/core-logging-common-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-common-internal plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-common-internal'] --- import kbnCoreLoggingCommonInternalObj from './kbn_core_logging_common_internal.devdocs.json'; diff --git a/api_docs/kbn_core_logging_server.mdx b/api_docs/kbn_core_logging_server.mdx index deb4fb1b4059f1..9e4f18fe1c359a 100644 --- a/api_docs/kbn_core_logging_server.mdx +++ b/api_docs/kbn_core_logging_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server title: "@kbn/core-logging-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-server'] --- import kbnCoreLoggingServerObj from './kbn_core_logging_server.devdocs.json'; diff --git a/api_docs/kbn_core_logging_server_internal.mdx b/api_docs/kbn_core_logging_server_internal.mdx index 94a15c91bf5e0e..07b91736880395 100644 --- a/api_docs/kbn_core_logging_server_internal.mdx +++ b/api_docs/kbn_core_logging_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server-internal title: "@kbn/core-logging-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server-internal plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-server-internal'] --- import kbnCoreLoggingServerInternalObj from './kbn_core_logging_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_logging_server_mocks.mdx b/api_docs/kbn_core_logging_server_mocks.mdx index 5f689ce204902d..b3b526a5355180 100644 --- a/api_docs/kbn_core_logging_server_mocks.mdx +++ b/api_docs/kbn_core_logging_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server-mocks title: "@kbn/core-logging-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server-mocks plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-server-mocks'] --- import kbnCoreLoggingServerMocksObj from './kbn_core_logging_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_metrics_collectors_server_internal.mdx b/api_docs/kbn_core_metrics_collectors_server_internal.mdx index fafc7916a98809..6ddfa0e7b1f624 100644 --- a/api_docs/kbn_core_metrics_collectors_server_internal.mdx +++ b/api_docs/kbn_core_metrics_collectors_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-collectors-server-internal title: "@kbn/core-metrics-collectors-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-collectors-server-internal plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-collectors-server-internal'] --- import kbnCoreMetricsCollectorsServerInternalObj from './kbn_core_metrics_collectors_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_metrics_collectors_server_mocks.mdx b/api_docs/kbn_core_metrics_collectors_server_mocks.mdx index be01e12a7db97a..dc7b10a71d2aaa 100644 --- a/api_docs/kbn_core_metrics_collectors_server_mocks.mdx +++ b/api_docs/kbn_core_metrics_collectors_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-collectors-server-mocks title: "@kbn/core-metrics-collectors-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-collectors-server-mocks plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-collectors-server-mocks'] --- import kbnCoreMetricsCollectorsServerMocksObj from './kbn_core_metrics_collectors_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_metrics_server.mdx b/api_docs/kbn_core_metrics_server.mdx index 3af95c647d79bf..cf48bb1b81602a 100644 --- a/api_docs/kbn_core_metrics_server.mdx +++ b/api_docs/kbn_core_metrics_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server title: "@kbn/core-metrics-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-server'] --- import kbnCoreMetricsServerObj from './kbn_core_metrics_server.devdocs.json'; diff --git a/api_docs/kbn_core_metrics_server_internal.mdx b/api_docs/kbn_core_metrics_server_internal.mdx index 6761e133765626..4ee1974427229d 100644 --- a/api_docs/kbn_core_metrics_server_internal.mdx +++ b/api_docs/kbn_core_metrics_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server-internal title: "@kbn/core-metrics-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server-internal plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-server-internal'] --- import kbnCoreMetricsServerInternalObj from './kbn_core_metrics_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_metrics_server_mocks.mdx b/api_docs/kbn_core_metrics_server_mocks.mdx index d3877477dde444..a8f81259e59cae 100644 --- a/api_docs/kbn_core_metrics_server_mocks.mdx +++ b/api_docs/kbn_core_metrics_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server-mocks title: "@kbn/core-metrics-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server-mocks plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-server-mocks'] --- import kbnCoreMetricsServerMocksObj from './kbn_core_metrics_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_mount_utils_browser.mdx b/api_docs/kbn_core_mount_utils_browser.mdx index 5b8ec23210d751..f3c7bd1e46894a 100644 --- a/api_docs/kbn_core_mount_utils_browser.mdx +++ b/api_docs/kbn_core_mount_utils_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-mount-utils-browser title: "@kbn/core-mount-utils-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-mount-utils-browser plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-mount-utils-browser'] --- import kbnCoreMountUtilsBrowserObj from './kbn_core_mount_utils_browser.devdocs.json'; diff --git a/api_docs/kbn_core_node_server.mdx b/api_docs/kbn_core_node_server.mdx index 075191f0d15265..02a381d238580c 100644 --- a/api_docs/kbn_core_node_server.mdx +++ b/api_docs/kbn_core_node_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server title: "@kbn/core-node-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-node-server'] --- import kbnCoreNodeServerObj from './kbn_core_node_server.devdocs.json'; diff --git a/api_docs/kbn_core_node_server_internal.mdx b/api_docs/kbn_core_node_server_internal.mdx index cfe7b9124f84cb..2b1f1b9fa8ceed 100644 --- a/api_docs/kbn_core_node_server_internal.mdx +++ b/api_docs/kbn_core_node_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server-internal title: "@kbn/core-node-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server-internal plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-node-server-internal'] --- import kbnCoreNodeServerInternalObj from './kbn_core_node_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_node_server_mocks.mdx b/api_docs/kbn_core_node_server_mocks.mdx index cddfe3e1f18ad1..d3ae8f39a95efe 100644 --- a/api_docs/kbn_core_node_server_mocks.mdx +++ b/api_docs/kbn_core_node_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server-mocks title: "@kbn/core-node-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server-mocks plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-node-server-mocks'] --- import kbnCoreNodeServerMocksObj from './kbn_core_node_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_notifications_browser.mdx b/api_docs/kbn_core_notifications_browser.mdx index bfcf953ccbb5af..3517ebceac0bd3 100644 --- a/api_docs/kbn_core_notifications_browser.mdx +++ b/api_docs/kbn_core_notifications_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser title: "@kbn/core-notifications-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-notifications-browser'] --- import kbnCoreNotificationsBrowserObj from './kbn_core_notifications_browser.devdocs.json'; diff --git a/api_docs/kbn_core_notifications_browser_internal.mdx b/api_docs/kbn_core_notifications_browser_internal.mdx index 8c4996dd77c7f3..57c39142df9790 100644 --- a/api_docs/kbn_core_notifications_browser_internal.mdx +++ b/api_docs/kbn_core_notifications_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser-internal title: "@kbn/core-notifications-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser-internal plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-notifications-browser-internal'] --- import kbnCoreNotificationsBrowserInternalObj from './kbn_core_notifications_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_notifications_browser_mocks.mdx b/api_docs/kbn_core_notifications_browser_mocks.mdx index 69677b4edf7e39..301e8c49072a97 100644 --- a/api_docs/kbn_core_notifications_browser_mocks.mdx +++ b/api_docs/kbn_core_notifications_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser-mocks title: "@kbn/core-notifications-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser-mocks plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-notifications-browser-mocks'] --- import kbnCoreNotificationsBrowserMocksObj from './kbn_core_notifications_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_overlays_browser.mdx b/api_docs/kbn_core_overlays_browser.mdx index 4139544d0b0ef9..4b48b117680198 100644 --- a/api_docs/kbn_core_overlays_browser.mdx +++ b/api_docs/kbn_core_overlays_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser title: "@kbn/core-overlays-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-overlays-browser'] --- import kbnCoreOverlaysBrowserObj from './kbn_core_overlays_browser.devdocs.json'; diff --git a/api_docs/kbn_core_overlays_browser_internal.mdx b/api_docs/kbn_core_overlays_browser_internal.mdx index 24d3119d0a89d6..29ac3179dff84b 100644 --- a/api_docs/kbn_core_overlays_browser_internal.mdx +++ b/api_docs/kbn_core_overlays_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser-internal title: "@kbn/core-overlays-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser-internal plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-overlays-browser-internal'] --- import kbnCoreOverlaysBrowserInternalObj from './kbn_core_overlays_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_overlays_browser_mocks.mdx b/api_docs/kbn_core_overlays_browser_mocks.mdx index 60a97e3ed4127b..9d9ac185bb3f10 100644 --- a/api_docs/kbn_core_overlays_browser_mocks.mdx +++ b/api_docs/kbn_core_overlays_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser-mocks title: "@kbn/core-overlays-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser-mocks plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-overlays-browser-mocks'] --- import kbnCoreOverlaysBrowserMocksObj from './kbn_core_overlays_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_browser.mdx b/api_docs/kbn_core_plugins_browser.mdx index 13a5664d073c60..813c670b84bb42 100644 --- a/api_docs/kbn_core_plugins_browser.mdx +++ b/api_docs/kbn_core_plugins_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-browser title: "@kbn/core-plugins-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-browser plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-browser'] --- import kbnCorePluginsBrowserObj from './kbn_core_plugins_browser.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_browser_mocks.mdx b/api_docs/kbn_core_plugins_browser_mocks.mdx index b571ddf71ef6b9..6b03c34ca22d0a 100644 --- a/api_docs/kbn_core_plugins_browser_mocks.mdx +++ b/api_docs/kbn_core_plugins_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-browser-mocks title: "@kbn/core-plugins-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-browser-mocks plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-browser-mocks'] --- import kbnCorePluginsBrowserMocksObj from './kbn_core_plugins_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_server.mdx b/api_docs/kbn_core_plugins_server.mdx index c71e001357f754..77a5617b786d24 100644 --- a/api_docs/kbn_core_plugins_server.mdx +++ b/api_docs/kbn_core_plugins_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-server title: "@kbn/core-plugins-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-server plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-server'] --- import kbnCorePluginsServerObj from './kbn_core_plugins_server.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_server_mocks.mdx b/api_docs/kbn_core_plugins_server_mocks.mdx index 51990b39a6a996..df6708f692ace7 100644 --- a/api_docs/kbn_core_plugins_server_mocks.mdx +++ b/api_docs/kbn_core_plugins_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-server-mocks title: "@kbn/core-plugins-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-server-mocks plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-server-mocks'] --- import kbnCorePluginsServerMocksObj from './kbn_core_plugins_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_preboot_server.mdx b/api_docs/kbn_core_preboot_server.mdx index 4825a594e637bf..ff781e8e85708c 100644 --- a/api_docs/kbn_core_preboot_server.mdx +++ b/api_docs/kbn_core_preboot_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-preboot-server title: "@kbn/core-preboot-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-preboot-server plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-preboot-server'] --- import kbnCorePrebootServerObj from './kbn_core_preboot_server.devdocs.json'; diff --git a/api_docs/kbn_core_preboot_server_mocks.mdx b/api_docs/kbn_core_preboot_server_mocks.mdx index 7978c224019f0a..c1cdb2c7c31406 100644 --- a/api_docs/kbn_core_preboot_server_mocks.mdx +++ b/api_docs/kbn_core_preboot_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-preboot-server-mocks title: "@kbn/core-preboot-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-preboot-server-mocks plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-preboot-server-mocks'] --- import kbnCorePrebootServerMocksObj from './kbn_core_preboot_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_rendering_browser_mocks.mdx b/api_docs/kbn_core_rendering_browser_mocks.mdx index ed0d1bc0e42606..910e7f99be6f99 100644 --- a/api_docs/kbn_core_rendering_browser_mocks.mdx +++ b/api_docs/kbn_core_rendering_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-browser-mocks title: "@kbn/core-rendering-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-browser-mocks plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-rendering-browser-mocks'] --- import kbnCoreRenderingBrowserMocksObj from './kbn_core_rendering_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_rendering_server_internal.mdx b/api_docs/kbn_core_rendering_server_internal.mdx index e6c13e9a8f95d8..c19818f78c187b 100644 --- a/api_docs/kbn_core_rendering_server_internal.mdx +++ b/api_docs/kbn_core_rendering_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-server-internal title: "@kbn/core-rendering-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-server-internal plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-rendering-server-internal'] --- import kbnCoreRenderingServerInternalObj from './kbn_core_rendering_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_rendering_server_mocks.mdx b/api_docs/kbn_core_rendering_server_mocks.mdx index f7ef09383fd1e6..8a53edcabdb1e8 100644 --- a/api_docs/kbn_core_rendering_server_mocks.mdx +++ b/api_docs/kbn_core_rendering_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-server-mocks title: "@kbn/core-rendering-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-server-mocks plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-rendering-server-mocks'] --- import kbnCoreRenderingServerMocksObj from './kbn_core_rendering_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_api_browser.mdx b/api_docs/kbn_core_saved_objects_api_browser.mdx index 7a6bef562b9615..47773c2219efc7 100644 --- a/api_docs/kbn_core_saved_objects_api_browser.mdx +++ b/api_docs/kbn_core_saved_objects_api_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-browser title: "@kbn/core-saved-objects-api-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-browser plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-api-browser'] --- import kbnCoreSavedObjectsApiBrowserObj from './kbn_core_saved_objects_api_browser.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_api_server.mdx b/api_docs/kbn_core_saved_objects_api_server.mdx index 39838c6c43e723..0de8dfb075a896 100644 --- a/api_docs/kbn_core_saved_objects_api_server.mdx +++ b/api_docs/kbn_core_saved_objects_api_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server title: "@kbn/core-saved-objects-api-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-server plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-api-server'] --- import kbnCoreSavedObjectsApiServerObj from './kbn_core_saved_objects_api_server.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_api_server_internal.mdx b/api_docs/kbn_core_saved_objects_api_server_internal.mdx index 10385c3c18d2a8..c93515ec33f3ad 100644 --- a/api_docs/kbn_core_saved_objects_api_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_api_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server-internal title: "@kbn/core-saved-objects-api-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-server-internal plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-api-server-internal'] --- import kbnCoreSavedObjectsApiServerInternalObj from './kbn_core_saved_objects_api_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_api_server_mocks.mdx b/api_docs/kbn_core_saved_objects_api_server_mocks.mdx index 94a7930fec06ba..ea22f898e9e3fa 100644 --- a/api_docs/kbn_core_saved_objects_api_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_api_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server-mocks title: "@kbn/core-saved-objects-api-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-server-mocks plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-api-server-mocks'] --- import kbnCoreSavedObjectsApiServerMocksObj from './kbn_core_saved_objects_api_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_base_server_internal.mdx b/api_docs/kbn_core_saved_objects_base_server_internal.mdx index d606aafa75e76f..540da6e72eaccf 100644 --- a/api_docs/kbn_core_saved_objects_base_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_base_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-base-server-internal title: "@kbn/core-saved-objects-base-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-base-server-internal plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-base-server-internal'] --- import kbnCoreSavedObjectsBaseServerInternalObj from './kbn_core_saved_objects_base_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_base_server_mocks.mdx b/api_docs/kbn_core_saved_objects_base_server_mocks.mdx index da6f0285c7bc75..d7f8206ee4871e 100644 --- a/api_docs/kbn_core_saved_objects_base_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_base_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-base-server-mocks title: "@kbn/core-saved-objects-base-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-base-server-mocks plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-base-server-mocks'] --- import kbnCoreSavedObjectsBaseServerMocksObj from './kbn_core_saved_objects_base_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_browser.mdx b/api_docs/kbn_core_saved_objects_browser.mdx index 2a456892261ff5..4c5c6641261aa5 100644 --- a/api_docs/kbn_core_saved_objects_browser.mdx +++ b/api_docs/kbn_core_saved_objects_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser title: "@kbn/core-saved-objects-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-browser'] --- import kbnCoreSavedObjectsBrowserObj from './kbn_core_saved_objects_browser.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_browser_internal.mdx b/api_docs/kbn_core_saved_objects_browser_internal.mdx index 51e5f375ae7915..ec89833b186033 100644 --- a/api_docs/kbn_core_saved_objects_browser_internal.mdx +++ b/api_docs/kbn_core_saved_objects_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser-internal title: "@kbn/core-saved-objects-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser-internal plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-browser-internal'] --- import kbnCoreSavedObjectsBrowserInternalObj from './kbn_core_saved_objects_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_browser_mocks.mdx b/api_docs/kbn_core_saved_objects_browser_mocks.mdx index 69a767792f76da..fdb2cfb0b76cd6 100644 --- a/api_docs/kbn_core_saved_objects_browser_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser-mocks title: "@kbn/core-saved-objects-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser-mocks plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-browser-mocks'] --- import kbnCoreSavedObjectsBrowserMocksObj from './kbn_core_saved_objects_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_common.mdx b/api_docs/kbn_core_saved_objects_common.mdx index f9cced1eadf4bc..83af03e3dee398 100644 --- a/api_docs/kbn_core_saved_objects_common.mdx +++ b/api_docs/kbn_core_saved_objects_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-common title: "@kbn/core-saved-objects-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-common plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-common'] --- import kbnCoreSavedObjectsCommonObj from './kbn_core_saved_objects_common.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx b/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx index 9c9a9ccf2bb31f..fe9aac90f90d20 100644 --- a/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-import-export-server-internal title: "@kbn/core-saved-objects-import-export-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-import-export-server-internal plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-import-export-server-internal'] --- import kbnCoreSavedObjectsImportExportServerInternalObj from './kbn_core_saved_objects_import_export_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx b/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx index 04fc4769137334..8a490a7799b0ff 100644 --- a/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-import-export-server-mocks title: "@kbn/core-saved-objects-import-export-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-import-export-server-mocks plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-import-export-server-mocks'] --- import kbnCoreSavedObjectsImportExportServerMocksObj from './kbn_core_saved_objects_import_export_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_migration_server_internal.mdx b/api_docs/kbn_core_saved_objects_migration_server_internal.mdx index 5d6c32533ecbde..d027aad0eaaeae 100644 --- a/api_docs/kbn_core_saved_objects_migration_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_migration_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-migration-server-internal title: "@kbn/core-saved-objects-migration-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-migration-server-internal plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-migration-server-internal'] --- import kbnCoreSavedObjectsMigrationServerInternalObj from './kbn_core_saved_objects_migration_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx b/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx index 39d7c8c3e38f38..fab323db339d8d 100644 --- a/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-migration-server-mocks title: "@kbn/core-saved-objects-migration-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-migration-server-mocks plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-migration-server-mocks'] --- import kbnCoreSavedObjectsMigrationServerMocksObj from './kbn_core_saved_objects_migration_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_server.mdx b/api_docs/kbn_core_saved_objects_server.mdx index 59b04f730ab9b9..39ed2246f16274 100644 --- a/api_docs/kbn_core_saved_objects_server.mdx +++ b/api_docs/kbn_core_saved_objects_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server title: "@kbn/core-saved-objects-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-server'] --- import kbnCoreSavedObjectsServerObj from './kbn_core_saved_objects_server.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_server_internal.mdx b/api_docs/kbn_core_saved_objects_server_internal.mdx index 1370568f1f7b2b..2a8a796d2a1fc5 100644 --- a/api_docs/kbn_core_saved_objects_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server-internal title: "@kbn/core-saved-objects-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server-internal plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-server-internal'] --- import kbnCoreSavedObjectsServerInternalObj from './kbn_core_saved_objects_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_server_mocks.mdx b/api_docs/kbn_core_saved_objects_server_mocks.mdx index d62a9b2621c277..da04b2c68644d3 100644 --- a/api_docs/kbn_core_saved_objects_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server-mocks title: "@kbn/core-saved-objects-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server-mocks plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-server-mocks'] --- import kbnCoreSavedObjectsServerMocksObj from './kbn_core_saved_objects_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_utils_server.mdx b/api_docs/kbn_core_saved_objects_utils_server.mdx index ab50cc4a4ccb32..9a58ae87c796b9 100644 --- a/api_docs/kbn_core_saved_objects_utils_server.mdx +++ b/api_docs/kbn_core_saved_objects_utils_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-utils-server title: "@kbn/core-saved-objects-utils-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-utils-server plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-utils-server'] --- import kbnCoreSavedObjectsUtilsServerObj from './kbn_core_saved_objects_utils_server.devdocs.json'; diff --git a/api_docs/kbn_core_status_common.mdx b/api_docs/kbn_core_status_common.mdx index a6ea3b9a0d4677..becc51befa2351 100644 --- a/api_docs/kbn_core_status_common.mdx +++ b/api_docs/kbn_core_status_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-common title: "@kbn/core-status-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-common plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-common'] --- import kbnCoreStatusCommonObj from './kbn_core_status_common.devdocs.json'; diff --git a/api_docs/kbn_core_status_common_internal.mdx b/api_docs/kbn_core_status_common_internal.mdx index 5dcdc1614ecede..85961902db8a6b 100644 --- a/api_docs/kbn_core_status_common_internal.mdx +++ b/api_docs/kbn_core_status_common_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-common-internal title: "@kbn/core-status-common-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-common-internal plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-common-internal'] --- import kbnCoreStatusCommonInternalObj from './kbn_core_status_common_internal.devdocs.json'; diff --git a/api_docs/kbn_core_status_server.mdx b/api_docs/kbn_core_status_server.mdx index 532bf26fdeb130..bde6a046d5a866 100644 --- a/api_docs/kbn_core_status_server.mdx +++ b/api_docs/kbn_core_status_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server title: "@kbn/core-status-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-server'] --- import kbnCoreStatusServerObj from './kbn_core_status_server.devdocs.json'; diff --git a/api_docs/kbn_core_status_server_internal.mdx b/api_docs/kbn_core_status_server_internal.mdx index ccee2c8aae6c6f..70acb4034bdd3d 100644 --- a/api_docs/kbn_core_status_server_internal.mdx +++ b/api_docs/kbn_core_status_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server-internal title: "@kbn/core-status-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server-internal plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-server-internal'] --- import kbnCoreStatusServerInternalObj from './kbn_core_status_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_status_server_mocks.mdx b/api_docs/kbn_core_status_server_mocks.mdx index d5acf9332bbb30..7a8617b7b995c6 100644 --- a/api_docs/kbn_core_status_server_mocks.mdx +++ b/api_docs/kbn_core_status_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server-mocks title: "@kbn/core-status-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server-mocks plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-server-mocks'] --- import kbnCoreStatusServerMocksObj from './kbn_core_status_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_deprecations_getters.mdx b/api_docs/kbn_core_test_helpers_deprecations_getters.mdx index 4430e455c62dbf..ac9453003186ba 100644 --- a/api_docs/kbn_core_test_helpers_deprecations_getters.mdx +++ b/api_docs/kbn_core_test_helpers_deprecations_getters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-deprecations-getters title: "@kbn/core-test-helpers-deprecations-getters" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-deprecations-getters plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-deprecations-getters'] --- import kbnCoreTestHelpersDeprecationsGettersObj from './kbn_core_test_helpers_deprecations_getters.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_http_setup_browser.mdx b/api_docs/kbn_core_test_helpers_http_setup_browser.mdx index 5d6f3776a5524f..66f0b2272a452a 100644 --- a/api_docs/kbn_core_test_helpers_http_setup_browser.mdx +++ b/api_docs/kbn_core_test_helpers_http_setup_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-http-setup-browser title: "@kbn/core-test-helpers-http-setup-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-http-setup-browser plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-http-setup-browser'] --- import kbnCoreTestHelpersHttpSetupBrowserObj from './kbn_core_test_helpers_http_setup_browser.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_so_type_serializer.mdx b/api_docs/kbn_core_test_helpers_so_type_serializer.mdx index dd1b669134e62f..a5f729553d368f 100644 --- a/api_docs/kbn_core_test_helpers_so_type_serializer.mdx +++ b/api_docs/kbn_core_test_helpers_so_type_serializer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-so-type-serializer title: "@kbn/core-test-helpers-so-type-serializer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-so-type-serializer plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-so-type-serializer'] --- import kbnCoreTestHelpersSoTypeSerializerObj from './kbn_core_test_helpers_so_type_serializer.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_test_utils.mdx b/api_docs/kbn_core_test_helpers_test_utils.mdx index 4885889e561e1b..0a035ffb1a4ad2 100644 --- a/api_docs/kbn_core_test_helpers_test_utils.mdx +++ b/api_docs/kbn_core_test_helpers_test_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-test-utils title: "@kbn/core-test-helpers-test-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-test-utils plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-test-utils'] --- import kbnCoreTestHelpersTestUtilsObj from './kbn_core_test_helpers_test_utils.devdocs.json'; diff --git a/api_docs/kbn_core_theme_browser.mdx b/api_docs/kbn_core_theme_browser.mdx index 023aadb814a446..f639c4bd56bf33 100644 --- a/api_docs/kbn_core_theme_browser.mdx +++ b/api_docs/kbn_core_theme_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser title: "@kbn/core-theme-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-theme-browser plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-theme-browser'] --- import kbnCoreThemeBrowserObj from './kbn_core_theme_browser.devdocs.json'; diff --git a/api_docs/kbn_core_theme_browser_internal.mdx b/api_docs/kbn_core_theme_browser_internal.mdx index 13e0b2fc792f47..b181d848f3c387 100644 --- a/api_docs/kbn_core_theme_browser_internal.mdx +++ b/api_docs/kbn_core_theme_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser-internal title: "@kbn/core-theme-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-theme-browser-internal plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-theme-browser-internal'] --- import kbnCoreThemeBrowserInternalObj from './kbn_core_theme_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_theme_browser_mocks.mdx b/api_docs/kbn_core_theme_browser_mocks.mdx index 06a2332a5d7134..1a397cf70c23b6 100644 --- a/api_docs/kbn_core_theme_browser_mocks.mdx +++ b/api_docs/kbn_core_theme_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser-mocks title: "@kbn/core-theme-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-theme-browser-mocks plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-theme-browser-mocks'] --- import kbnCoreThemeBrowserMocksObj from './kbn_core_theme_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_browser.mdx b/api_docs/kbn_core_ui_settings_browser.mdx index ea4655f88e80cf..b0ebffd5d0669c 100644 --- a/api_docs/kbn_core_ui_settings_browser.mdx +++ b/api_docs/kbn_core_ui_settings_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser title: "@kbn/core-ui-settings-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-browser'] --- import kbnCoreUiSettingsBrowserObj from './kbn_core_ui_settings_browser.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_browser_internal.mdx b/api_docs/kbn_core_ui_settings_browser_internal.mdx index 6e033dd53a2f41..0372da7faf0b1f 100644 --- a/api_docs/kbn_core_ui_settings_browser_internal.mdx +++ b/api_docs/kbn_core_ui_settings_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser-internal title: "@kbn/core-ui-settings-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser-internal plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-browser-internal'] --- import kbnCoreUiSettingsBrowserInternalObj from './kbn_core_ui_settings_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_browser_mocks.mdx b/api_docs/kbn_core_ui_settings_browser_mocks.mdx index a36d2dbf5a0c7d..9cdb710238fb68 100644 --- a/api_docs/kbn_core_ui_settings_browser_mocks.mdx +++ b/api_docs/kbn_core_ui_settings_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser-mocks title: "@kbn/core-ui-settings-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser-mocks plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-browser-mocks'] --- import kbnCoreUiSettingsBrowserMocksObj from './kbn_core_ui_settings_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_common.mdx b/api_docs/kbn_core_ui_settings_common.mdx index 5138d73d828eaa..68ac54f7e542aa 100644 --- a/api_docs/kbn_core_ui_settings_common.mdx +++ b/api_docs/kbn_core_ui_settings_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-common title: "@kbn/core-ui-settings-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-common plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-common'] --- import kbnCoreUiSettingsCommonObj from './kbn_core_ui_settings_common.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_server.mdx b/api_docs/kbn_core_ui_settings_server.mdx index e48cd79faa840e..f94d6ebd9e6447 100644 --- a/api_docs/kbn_core_ui_settings_server.mdx +++ b/api_docs/kbn_core_ui_settings_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server title: "@kbn/core-ui-settings-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-server'] --- import kbnCoreUiSettingsServerObj from './kbn_core_ui_settings_server.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_server_internal.mdx b/api_docs/kbn_core_ui_settings_server_internal.mdx index 619bd7390d9b92..ab7fe5dfc693f2 100644 --- a/api_docs/kbn_core_ui_settings_server_internal.mdx +++ b/api_docs/kbn_core_ui_settings_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server-internal title: "@kbn/core-ui-settings-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server-internal plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-server-internal'] --- import kbnCoreUiSettingsServerInternalObj from './kbn_core_ui_settings_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_server_mocks.mdx b/api_docs/kbn_core_ui_settings_server_mocks.mdx index 62380ad8147908..a8bdd628d90d30 100644 --- a/api_docs/kbn_core_ui_settings_server_mocks.mdx +++ b/api_docs/kbn_core_ui_settings_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server-mocks title: "@kbn/core-ui-settings-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server-mocks plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-server-mocks'] --- import kbnCoreUiSettingsServerMocksObj from './kbn_core_ui_settings_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_usage_data_server.mdx b/api_docs/kbn_core_usage_data_server.mdx index 78de2c22b489ec..d7994e418796a4 100644 --- a/api_docs/kbn_core_usage_data_server.mdx +++ b/api_docs/kbn_core_usage_data_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server title: "@kbn/core-usage-data-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-usage-data-server'] --- import kbnCoreUsageDataServerObj from './kbn_core_usage_data_server.devdocs.json'; diff --git a/api_docs/kbn_core_usage_data_server_internal.mdx b/api_docs/kbn_core_usage_data_server_internal.mdx index 923ad2c17a4e76..6dfc608469b2de 100644 --- a/api_docs/kbn_core_usage_data_server_internal.mdx +++ b/api_docs/kbn_core_usage_data_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server-internal title: "@kbn/core-usage-data-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server-internal plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-usage-data-server-internal'] --- import kbnCoreUsageDataServerInternalObj from './kbn_core_usage_data_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_usage_data_server_mocks.mdx b/api_docs/kbn_core_usage_data_server_mocks.mdx index 81a3ebcfd017a6..91c5c2f02a85e3 100644 --- a/api_docs/kbn_core_usage_data_server_mocks.mdx +++ b/api_docs/kbn_core_usage_data_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server-mocks title: "@kbn/core-usage-data-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server-mocks plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-usage-data-server-mocks'] --- import kbnCoreUsageDataServerMocksObj from './kbn_core_usage_data_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_crypto.mdx b/api_docs/kbn_crypto.mdx index 029b6cea15b4c7..fd0fefb9abaa06 100644 --- a/api_docs/kbn_crypto.mdx +++ b/api_docs/kbn_crypto.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-crypto title: "@kbn/crypto" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/crypto plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/crypto'] --- import kbnCryptoObj from './kbn_crypto.devdocs.json'; diff --git a/api_docs/kbn_crypto_browser.mdx b/api_docs/kbn_crypto_browser.mdx index b19cf2b65f34dd..07cfff6aea1221 100644 --- a/api_docs/kbn_crypto_browser.mdx +++ b/api_docs/kbn_crypto_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-crypto-browser title: "@kbn/crypto-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/crypto-browser plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/crypto-browser'] --- import kbnCryptoBrowserObj from './kbn_crypto_browser.devdocs.json'; diff --git a/api_docs/kbn_datemath.mdx b/api_docs/kbn_datemath.mdx index 51f9fc42dbcddf..2928629d658330 100644 --- a/api_docs/kbn_datemath.mdx +++ b/api_docs/kbn_datemath.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-datemath title: "@kbn/datemath" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/datemath plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/datemath'] --- import kbnDatemathObj from './kbn_datemath.devdocs.json'; diff --git a/api_docs/kbn_dev_cli_errors.mdx b/api_docs/kbn_dev_cli_errors.mdx index 8bc9321ade81ba..f4bbb3509954dc 100644 --- a/api_docs/kbn_dev_cli_errors.mdx +++ b/api_docs/kbn_dev_cli_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-cli-errors title: "@kbn/dev-cli-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-cli-errors plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-cli-errors'] --- import kbnDevCliErrorsObj from './kbn_dev_cli_errors.devdocs.json'; diff --git a/api_docs/kbn_dev_cli_runner.mdx b/api_docs/kbn_dev_cli_runner.mdx index 389629bd44eb9d..3f877c86112398 100644 --- a/api_docs/kbn_dev_cli_runner.mdx +++ b/api_docs/kbn_dev_cli_runner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-cli-runner title: "@kbn/dev-cli-runner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-cli-runner plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-cli-runner'] --- import kbnDevCliRunnerObj from './kbn_dev_cli_runner.devdocs.json'; diff --git a/api_docs/kbn_dev_proc_runner.mdx b/api_docs/kbn_dev_proc_runner.mdx index 34bf867a7c7746..0c027d82196e26 100644 --- a/api_docs/kbn_dev_proc_runner.mdx +++ b/api_docs/kbn_dev_proc_runner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-proc-runner title: "@kbn/dev-proc-runner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-proc-runner plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-proc-runner'] --- import kbnDevProcRunnerObj from './kbn_dev_proc_runner.devdocs.json'; diff --git a/api_docs/kbn_dev_utils.mdx b/api_docs/kbn_dev_utils.mdx index e9bfdac8df31f3..ef0de08185109d 100644 --- a/api_docs/kbn_dev_utils.mdx +++ b/api_docs/kbn_dev_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-utils title: "@kbn/dev-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-utils plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-utils'] --- import kbnDevUtilsObj from './kbn_dev_utils.devdocs.json'; diff --git a/api_docs/kbn_doc_links.mdx b/api_docs/kbn_doc_links.mdx index 51bcfae891fee1..439bb99554d0eb 100644 --- a/api_docs/kbn_doc_links.mdx +++ b/api_docs/kbn_doc_links.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-doc-links title: "@kbn/doc-links" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/doc-links plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/doc-links'] --- import kbnDocLinksObj from './kbn_doc_links.devdocs.json'; diff --git a/api_docs/kbn_docs_utils.mdx b/api_docs/kbn_docs_utils.mdx index 2742de20660a71..063d72d3f5af3c 100644 --- a/api_docs/kbn_docs_utils.mdx +++ b/api_docs/kbn_docs_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-docs-utils title: "@kbn/docs-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/docs-utils plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/docs-utils'] --- import kbnDocsUtilsObj from './kbn_docs_utils.devdocs.json'; diff --git a/api_docs/kbn_ebt_tools.mdx b/api_docs/kbn_ebt_tools.mdx index 2d907a8db72e0c..7a44b64fac2c91 100644 --- a/api_docs/kbn_ebt_tools.mdx +++ b/api_docs/kbn_ebt_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ebt-tools title: "@kbn/ebt-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ebt-tools plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ebt-tools'] --- import kbnEbtToolsObj from './kbn_ebt_tools.devdocs.json'; diff --git a/api_docs/kbn_es.mdx b/api_docs/kbn_es.mdx index 9858f457eda0e7..b7eb1e029bfcc8 100644 --- a/api_docs/kbn_es.mdx +++ b/api_docs/kbn_es.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es title: "@kbn/es" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es'] --- import kbnEsObj from './kbn_es.devdocs.json'; diff --git a/api_docs/kbn_es_archiver.mdx b/api_docs/kbn_es_archiver.mdx index 8bc82110d3d7e5..14024f46baab77 100644 --- a/api_docs/kbn_es_archiver.mdx +++ b/api_docs/kbn_es_archiver.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-archiver title: "@kbn/es-archiver" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-archiver plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-archiver'] --- import kbnEsArchiverObj from './kbn_es_archiver.devdocs.json'; diff --git a/api_docs/kbn_es_errors.mdx b/api_docs/kbn_es_errors.mdx index f96d717e3c166b..6db6ff822b4a9d 100644 --- a/api_docs/kbn_es_errors.mdx +++ b/api_docs/kbn_es_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-errors title: "@kbn/es-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-errors plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-errors'] --- import kbnEsErrorsObj from './kbn_es_errors.devdocs.json'; diff --git a/api_docs/kbn_es_query.mdx b/api_docs/kbn_es_query.mdx index 1bff0299c6a582..dd1cfd61dcf4dd 100644 --- a/api_docs/kbn_es_query.mdx +++ b/api_docs/kbn_es_query.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-query title: "@kbn/es-query" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-query plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-query'] --- import kbnEsQueryObj from './kbn_es_query.devdocs.json'; diff --git a/api_docs/kbn_es_types.mdx b/api_docs/kbn_es_types.mdx index d18029b0d2f517..d5807fb13e5d2f 100644 --- a/api_docs/kbn_es_types.mdx +++ b/api_docs/kbn_es_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-types title: "@kbn/es-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-types plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-types'] --- import kbnEsTypesObj from './kbn_es_types.devdocs.json'; diff --git a/api_docs/kbn_eslint_plugin_imports.mdx b/api_docs/kbn_eslint_plugin_imports.mdx index 9283dfdd4b038e..b8a3e93676b19c 100644 --- a/api_docs/kbn_eslint_plugin_imports.mdx +++ b/api_docs/kbn_eslint_plugin_imports.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-eslint-plugin-imports title: "@kbn/eslint-plugin-imports" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/eslint-plugin-imports plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/eslint-plugin-imports'] --- import kbnEslintPluginImportsObj from './kbn_eslint_plugin_imports.devdocs.json'; diff --git a/api_docs/kbn_field_types.mdx b/api_docs/kbn_field_types.mdx index 92ecfdf507070c..8faa0f83f13c3f 100644 --- a/api_docs/kbn_field_types.mdx +++ b/api_docs/kbn_field_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-field-types title: "@kbn/field-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/field-types plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/field-types'] --- import kbnFieldTypesObj from './kbn_field_types.devdocs.json'; diff --git a/api_docs/kbn_find_used_node_modules.mdx b/api_docs/kbn_find_used_node_modules.mdx index e6ad954273b1dc..21fb60af5ba9ac 100644 --- a/api_docs/kbn_find_used_node_modules.mdx +++ b/api_docs/kbn_find_used_node_modules.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-find-used-node-modules title: "@kbn/find-used-node-modules" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/find-used-node-modules plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/find-used-node-modules'] --- import kbnFindUsedNodeModulesObj from './kbn_find_used_node_modules.devdocs.json'; diff --git a/api_docs/kbn_ftr_common_functional_services.mdx b/api_docs/kbn_ftr_common_functional_services.mdx index 08111dcfb99868..b870876849e09e 100644 --- a/api_docs/kbn_ftr_common_functional_services.mdx +++ b/api_docs/kbn_ftr_common_functional_services.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ftr-common-functional-services title: "@kbn/ftr-common-functional-services" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ftr-common-functional-services plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ftr-common-functional-services'] --- import kbnFtrCommonFunctionalServicesObj from './kbn_ftr_common_functional_services.devdocs.json'; diff --git a/api_docs/kbn_generate.mdx b/api_docs/kbn_generate.mdx index 42ba848e0f9c53..a39b9ee3f6ee32 100644 --- a/api_docs/kbn_generate.mdx +++ b/api_docs/kbn_generate.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate title: "@kbn/generate" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate'] --- import kbnGenerateObj from './kbn_generate.devdocs.json'; diff --git a/api_docs/kbn_get_repo_files.mdx b/api_docs/kbn_get_repo_files.mdx index 6de71207a8992d..4a1d84927646db 100644 --- a/api_docs/kbn_get_repo_files.mdx +++ b/api_docs/kbn_get_repo_files.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-get-repo-files title: "@kbn/get-repo-files" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/get-repo-files plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/get-repo-files'] --- import kbnGetRepoFilesObj from './kbn_get_repo_files.devdocs.json'; diff --git a/api_docs/kbn_guided_onboarding.mdx b/api_docs/kbn_guided_onboarding.mdx index 56165175704aca..091223532460a5 100644 --- a/api_docs/kbn_guided_onboarding.mdx +++ b/api_docs/kbn_guided_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-guided-onboarding title: "@kbn/guided-onboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/guided-onboarding plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/guided-onboarding'] --- import kbnGuidedOnboardingObj from './kbn_guided_onboarding.devdocs.json'; diff --git a/api_docs/kbn_handlebars.mdx b/api_docs/kbn_handlebars.mdx index faa3a8ba7cbe8f..94ca46165f7063 100644 --- a/api_docs/kbn_handlebars.mdx +++ b/api_docs/kbn_handlebars.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-handlebars title: "@kbn/handlebars" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/handlebars plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/handlebars'] --- import kbnHandlebarsObj from './kbn_handlebars.devdocs.json'; diff --git a/api_docs/kbn_hapi_mocks.mdx b/api_docs/kbn_hapi_mocks.mdx index 2e9959306d2a9b..0e91de36b9c056 100644 --- a/api_docs/kbn_hapi_mocks.mdx +++ b/api_docs/kbn_hapi_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-hapi-mocks title: "@kbn/hapi-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/hapi-mocks plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/hapi-mocks'] --- import kbnHapiMocksObj from './kbn_hapi_mocks.devdocs.json'; diff --git a/api_docs/kbn_home_sample_data_card.mdx b/api_docs/kbn_home_sample_data_card.mdx index 0480d63b81ef85..845329c912ff8e 100644 --- a/api_docs/kbn_home_sample_data_card.mdx +++ b/api_docs/kbn_home_sample_data_card.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-home-sample-data-card title: "@kbn/home-sample-data-card" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/home-sample-data-card plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/home-sample-data-card'] --- import kbnHomeSampleDataCardObj from './kbn_home_sample_data_card.devdocs.json'; diff --git a/api_docs/kbn_home_sample_data_tab.mdx b/api_docs/kbn_home_sample_data_tab.mdx index 48a30e95242a24..82a23b48efb727 100644 --- a/api_docs/kbn_home_sample_data_tab.mdx +++ b/api_docs/kbn_home_sample_data_tab.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-home-sample-data-tab title: "@kbn/home-sample-data-tab" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/home-sample-data-tab plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/home-sample-data-tab'] --- import kbnHomeSampleDataTabObj from './kbn_home_sample_data_tab.devdocs.json'; diff --git a/api_docs/kbn_i18n.mdx b/api_docs/kbn_i18n.mdx index 0d35a6f7999753..15e369e03426c5 100644 --- a/api_docs/kbn_i18n.mdx +++ b/api_docs/kbn_i18n.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-i18n title: "@kbn/i18n" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/i18n plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/i18n'] --- import kbnI18nObj from './kbn_i18n.devdocs.json'; diff --git a/api_docs/kbn_i18n_react.mdx b/api_docs/kbn_i18n_react.mdx index 4bdf16a0106032..d726eeccd5b255 100644 --- a/api_docs/kbn_i18n_react.mdx +++ b/api_docs/kbn_i18n_react.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-i18n-react title: "@kbn/i18n-react" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/i18n-react plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/i18n-react'] --- import kbnI18nReactObj from './kbn_i18n_react.devdocs.json'; diff --git a/api_docs/kbn_import_resolver.mdx b/api_docs/kbn_import_resolver.mdx index 5b56f2de746014..f9122fc851e899 100644 --- a/api_docs/kbn_import_resolver.mdx +++ b/api_docs/kbn_import_resolver.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-import-resolver title: "@kbn/import-resolver" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/import-resolver plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/import-resolver'] --- import kbnImportResolverObj from './kbn_import_resolver.devdocs.json'; diff --git a/api_docs/kbn_interpreter.mdx b/api_docs/kbn_interpreter.mdx index 9427c5f7647eca..c6eed3535922a9 100644 --- a/api_docs/kbn_interpreter.mdx +++ b/api_docs/kbn_interpreter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-interpreter title: "@kbn/interpreter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/interpreter plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/interpreter'] --- import kbnInterpreterObj from './kbn_interpreter.devdocs.json'; diff --git a/api_docs/kbn_io_ts_utils.mdx b/api_docs/kbn_io_ts_utils.mdx index 80bed28bf863be..fa4b2f1ddd5c29 100644 --- a/api_docs/kbn_io_ts_utils.mdx +++ b/api_docs/kbn_io_ts_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-io-ts-utils title: "@kbn/io-ts-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/io-ts-utils plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/io-ts-utils'] --- import kbnIoTsUtilsObj from './kbn_io_ts_utils.devdocs.json'; diff --git a/api_docs/kbn_jest_serializers.mdx b/api_docs/kbn_jest_serializers.mdx index 063e75f99c7276..d1e7ff9a36a278 100644 --- a/api_docs/kbn_jest_serializers.mdx +++ b/api_docs/kbn_jest_serializers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-jest-serializers title: "@kbn/jest-serializers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/jest-serializers plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/jest-serializers'] --- import kbnJestSerializersObj from './kbn_jest_serializers.devdocs.json'; diff --git a/api_docs/kbn_journeys.mdx b/api_docs/kbn_journeys.mdx index 4bcc084f61e7eb..725613f282e7a1 100644 --- a/api_docs/kbn_journeys.mdx +++ b/api_docs/kbn_journeys.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-journeys title: "@kbn/journeys" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/journeys plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/journeys'] --- import kbnJourneysObj from './kbn_journeys.devdocs.json'; diff --git a/api_docs/kbn_kibana_manifest_schema.mdx b/api_docs/kbn_kibana_manifest_schema.mdx index dd02776975efbf..a60962a8aa20c2 100644 --- a/api_docs/kbn_kibana_manifest_schema.mdx +++ b/api_docs/kbn_kibana_manifest_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-kibana-manifest-schema title: "@kbn/kibana-manifest-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/kibana-manifest-schema plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/kibana-manifest-schema'] --- import kbnKibanaManifestSchemaObj from './kbn_kibana_manifest_schema.devdocs.json'; diff --git a/api_docs/kbn_language_documentation_popover.mdx b/api_docs/kbn_language_documentation_popover.mdx index 53178b9eb11c40..373eb3584271c9 100644 --- a/api_docs/kbn_language_documentation_popover.mdx +++ b/api_docs/kbn_language_documentation_popover.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-language-documentation-popover title: "@kbn/language-documentation-popover" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/language-documentation-popover plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/language-documentation-popover'] --- import kbnLanguageDocumentationPopoverObj from './kbn_language_documentation_popover.devdocs.json'; diff --git a/api_docs/kbn_logging.mdx b/api_docs/kbn_logging.mdx index 0dd9a1ce39d084..2e852e70f2253c 100644 --- a/api_docs/kbn_logging.mdx +++ b/api_docs/kbn_logging.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-logging title: "@kbn/logging" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/logging plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/logging'] --- import kbnLoggingObj from './kbn_logging.devdocs.json'; diff --git a/api_docs/kbn_logging_mocks.mdx b/api_docs/kbn_logging_mocks.mdx index 32c30478d1658d..65ecbee0d9f35c 100644 --- a/api_docs/kbn_logging_mocks.mdx +++ b/api_docs/kbn_logging_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-logging-mocks title: "@kbn/logging-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/logging-mocks plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/logging-mocks'] --- import kbnLoggingMocksObj from './kbn_logging_mocks.devdocs.json'; diff --git a/api_docs/kbn_managed_vscode_config.mdx b/api_docs/kbn_managed_vscode_config.mdx index 6c94f20ac54739..1d8c85da9d0db4 100644 --- a/api_docs/kbn_managed_vscode_config.mdx +++ b/api_docs/kbn_managed_vscode_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-managed-vscode-config title: "@kbn/managed-vscode-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/managed-vscode-config plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/managed-vscode-config'] --- import kbnManagedVscodeConfigObj from './kbn_managed_vscode_config.devdocs.json'; diff --git a/api_docs/kbn_mapbox_gl.mdx b/api_docs/kbn_mapbox_gl.mdx index a4421418dc22f4..aa327afad2eccd 100644 --- a/api_docs/kbn_mapbox_gl.mdx +++ b/api_docs/kbn_mapbox_gl.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-mapbox-gl title: "@kbn/mapbox-gl" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/mapbox-gl plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/mapbox-gl'] --- import kbnMapboxGlObj from './kbn_mapbox_gl.devdocs.json'; diff --git a/api_docs/kbn_ml_agg_utils.mdx b/api_docs/kbn_ml_agg_utils.mdx index 7ec4e30da83ad2..c5c46f030e1fc3 100644 --- a/api_docs/kbn_ml_agg_utils.mdx +++ b/api_docs/kbn_ml_agg_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-agg-utils title: "@kbn/ml-agg-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-agg-utils plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-agg-utils'] --- import kbnMlAggUtilsObj from './kbn_ml_agg_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_is_populated_object.mdx b/api_docs/kbn_ml_is_populated_object.mdx index 5e658542fe0815..05b06fc8cbbe83 100644 --- a/api_docs/kbn_ml_is_populated_object.mdx +++ b/api_docs/kbn_ml_is_populated_object.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-is-populated-object title: "@kbn/ml-is-populated-object" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-is-populated-object plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-is-populated-object'] --- import kbnMlIsPopulatedObjectObj from './kbn_ml_is_populated_object.devdocs.json'; diff --git a/api_docs/kbn_ml_string_hash.mdx b/api_docs/kbn_ml_string_hash.mdx index 932c3bdaec1c42..59d50ca76adf13 100644 --- a/api_docs/kbn_ml_string_hash.mdx +++ b/api_docs/kbn_ml_string_hash.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-string-hash title: "@kbn/ml-string-hash" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-string-hash plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-string-hash'] --- import kbnMlStringHashObj from './kbn_ml_string_hash.devdocs.json'; diff --git a/api_docs/kbn_monaco.mdx b/api_docs/kbn_monaco.mdx index afcd51b0741931..666613884ae1d8 100644 --- a/api_docs/kbn_monaco.mdx +++ b/api_docs/kbn_monaco.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-monaco title: "@kbn/monaco" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/monaco plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/monaco'] --- import kbnMonacoObj from './kbn_monaco.devdocs.json'; diff --git a/api_docs/kbn_optimizer.mdx b/api_docs/kbn_optimizer.mdx index 08c25292886a9b..c404d899b041fa 100644 --- a/api_docs/kbn_optimizer.mdx +++ b/api_docs/kbn_optimizer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-optimizer title: "@kbn/optimizer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/optimizer plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/optimizer'] --- import kbnOptimizerObj from './kbn_optimizer.devdocs.json'; diff --git a/api_docs/kbn_optimizer_webpack_helpers.mdx b/api_docs/kbn_optimizer_webpack_helpers.mdx index f29d7b1eca0dbb..010eb89d8946f5 100644 --- a/api_docs/kbn_optimizer_webpack_helpers.mdx +++ b/api_docs/kbn_optimizer_webpack_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-optimizer-webpack-helpers title: "@kbn/optimizer-webpack-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/optimizer-webpack-helpers plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/optimizer-webpack-helpers'] --- import kbnOptimizerWebpackHelpersObj from './kbn_optimizer_webpack_helpers.devdocs.json'; diff --git a/api_docs/kbn_osquery_io_ts_types.mdx b/api_docs/kbn_osquery_io_ts_types.mdx index 402c9d0a958bed..88ac60fb5262bd 100644 --- a/api_docs/kbn_osquery_io_ts_types.mdx +++ b/api_docs/kbn_osquery_io_ts_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-osquery-io-ts-types title: "@kbn/osquery-io-ts-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/osquery-io-ts-types plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/osquery-io-ts-types'] --- import kbnOsqueryIoTsTypesObj from './kbn_osquery_io_ts_types.devdocs.json'; diff --git a/api_docs/kbn_performance_testing_dataset_extractor.mdx b/api_docs/kbn_performance_testing_dataset_extractor.mdx index e8ed20274ef119..7782e0548c5c30 100644 --- a/api_docs/kbn_performance_testing_dataset_extractor.mdx +++ b/api_docs/kbn_performance_testing_dataset_extractor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-performance-testing-dataset-extractor title: "@kbn/performance-testing-dataset-extractor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/performance-testing-dataset-extractor plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/performance-testing-dataset-extractor'] --- import kbnPerformanceTestingDatasetExtractorObj from './kbn_performance_testing_dataset_extractor.devdocs.json'; diff --git a/api_docs/kbn_plugin_generator.mdx b/api_docs/kbn_plugin_generator.mdx index 7275cba70f24fa..68d49c8df4ce54 100644 --- a/api_docs/kbn_plugin_generator.mdx +++ b/api_docs/kbn_plugin_generator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-generator title: "@kbn/plugin-generator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-generator plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-generator'] --- import kbnPluginGeneratorObj from './kbn_plugin_generator.devdocs.json'; diff --git a/api_docs/kbn_plugin_helpers.mdx b/api_docs/kbn_plugin_helpers.mdx index 9b9b4ca1f9a4e6..cdd00324f42556 100644 --- a/api_docs/kbn_plugin_helpers.mdx +++ b/api_docs/kbn_plugin_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-helpers title: "@kbn/plugin-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-helpers plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-helpers'] --- import kbnPluginHelpersObj from './kbn_plugin_helpers.devdocs.json'; diff --git a/api_docs/kbn_react_field.mdx b/api_docs/kbn_react_field.mdx index 3f0ab220126a78..d4a43c0250a64f 100644 --- a/api_docs/kbn_react_field.mdx +++ b/api_docs/kbn_react_field.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-field title: "@kbn/react-field" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-field plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-field'] --- import kbnReactFieldObj from './kbn_react_field.devdocs.json'; diff --git a/api_docs/kbn_repo_source_classifier.mdx b/api_docs/kbn_repo_source_classifier.mdx index 9341eff6ea9121..ac8a30684523de 100644 --- a/api_docs/kbn_repo_source_classifier.mdx +++ b/api_docs/kbn_repo_source_classifier.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-source-classifier title: "@kbn/repo-source-classifier" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-source-classifier plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/repo-source-classifier'] --- import kbnRepoSourceClassifierObj from './kbn_repo_source_classifier.devdocs.json'; diff --git a/api_docs/kbn_rule_data_utils.mdx b/api_docs/kbn_rule_data_utils.mdx index eedea9c6404a2c..617743697447e0 100644 --- a/api_docs/kbn_rule_data_utils.mdx +++ b/api_docs/kbn_rule_data_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rule-data-utils title: "@kbn/rule-data-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rule-data-utils plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rule-data-utils'] --- import kbnRuleDataUtilsObj from './kbn_rule_data_utils.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_autocomplete.mdx b/api_docs/kbn_securitysolution_autocomplete.mdx index 112cec83335a90..dc6661e847f1fa 100644 --- a/api_docs/kbn_securitysolution_autocomplete.mdx +++ b/api_docs/kbn_securitysolution_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-autocomplete title: "@kbn/securitysolution-autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-autocomplete plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-autocomplete'] --- import kbnSecuritysolutionAutocompleteObj from './kbn_securitysolution_autocomplete.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_es_utils.mdx b/api_docs/kbn_securitysolution_es_utils.mdx index ac0977ee48be32..6804f617acd3de 100644 --- a/api_docs/kbn_securitysolution_es_utils.mdx +++ b/api_docs/kbn_securitysolution_es_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-es-utils title: "@kbn/securitysolution-es-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-es-utils plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-es-utils'] --- import kbnSecuritysolutionEsUtilsObj from './kbn_securitysolution_es_utils.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_exception_list_components.devdocs.json b/api_docs/kbn_securitysolution_exception_list_components.devdocs.json index cb66bc6e0fd6b0..c68daa8df88364 100644 --- a/api_docs/kbn_securitysolution_exception_list_components.devdocs.json +++ b/api_docs/kbn_securitysolution_exception_list_components.devdocs.json @@ -1247,13 +1247,13 @@ }, { "parentPluginId": "@kbn/securitysolution-exception-list-components", - "id": "def-common.Rule.exception_lists", + "id": "def-common.Rule.exception_list", "type": "Array", "tags": [], - "label": "exception_lists", + "label": "exception_list", "description": [], "signature": [ - "{ id: string; list_id: string; type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; namespace_type: \"single\" | \"agnostic\"; }[]" + "{ id: string; list_id: string; type: \"endpoint\" | \"detection\" | \"rule_default\" | \"endpoint_trusted_apps\" | \"endpoint_events\" | \"endpoint_host_isolation_exceptions\" | \"endpoint_blocklists\"; namespace_type: \"single\" | \"agnostic\"; }[] | undefined" ], "path": "packages/kbn-securitysolution-exception-list-components/src/types/index.ts", "deprecated": false, diff --git a/api_docs/kbn_securitysolution_exception_list_components.mdx b/api_docs/kbn_securitysolution_exception_list_components.mdx index efadd56695fe0a..8e895ffcbcbd7e 100644 --- a/api_docs/kbn_securitysolution_exception_list_components.mdx +++ b/api_docs/kbn_securitysolution_exception_list_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-exception-list-components title: "@kbn/securitysolution-exception-list-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-exception-list-components plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-exception-list-components'] --- import kbnSecuritysolutionExceptionListComponentsObj from './kbn_securitysolution_exception_list_components.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_hook_utils.mdx b/api_docs/kbn_securitysolution_hook_utils.mdx index fb78d31b3c675e..28161d64f2e8a5 100644 --- a/api_docs/kbn_securitysolution_hook_utils.mdx +++ b/api_docs/kbn_securitysolution_hook_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-hook-utils title: "@kbn/securitysolution-hook-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-hook-utils plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-hook-utils'] --- import kbnSecuritysolutionHookUtilsObj from './kbn_securitysolution_hook_utils.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx b/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx index c74f638ccb9afe..6eb5e2f44c8f40 100644 --- a/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-alerting-types title: "@kbn/securitysolution-io-ts-alerting-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-alerting-types plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-io-ts-alerting-types'] --- import kbnSecuritysolutionIoTsAlertingTypesObj from './kbn_securitysolution_io_ts_alerting_types.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_io_ts_list_types.mdx b/api_docs/kbn_securitysolution_io_ts_list_types.mdx index 98f5f6faa9653a..63cc311e4ac95b 100644 --- a/api_docs/kbn_securitysolution_io_ts_list_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_list_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-list-types title: "@kbn/securitysolution-io-ts-list-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-list-types plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-io-ts-list-types'] --- import kbnSecuritysolutionIoTsListTypesObj from './kbn_securitysolution_io_ts_list_types.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_io_ts_types.mdx b/api_docs/kbn_securitysolution_io_ts_types.mdx index 9199c484b35f8c..bff0417ed11c03 100644 --- a/api_docs/kbn_securitysolution_io_ts_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-types title: "@kbn/securitysolution-io-ts-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-types plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-io-ts-types'] --- import kbnSecuritysolutionIoTsTypesObj from './kbn_securitysolution_io_ts_types.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_io_ts_utils.mdx b/api_docs/kbn_securitysolution_io_ts_utils.mdx index 7718129f3884eb..35a7ef627b799e 100644 --- a/api_docs/kbn_securitysolution_io_ts_utils.mdx +++ b/api_docs/kbn_securitysolution_io_ts_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-utils title: "@kbn/securitysolution-io-ts-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-utils plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-io-ts-utils'] --- import kbnSecuritysolutionIoTsUtilsObj from './kbn_securitysolution_io_ts_utils.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_list_api.mdx b/api_docs/kbn_securitysolution_list_api.mdx index 7cf8c073f66504..16ed3244e02dd4 100644 --- a/api_docs/kbn_securitysolution_list_api.mdx +++ b/api_docs/kbn_securitysolution_list_api.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-api title: "@kbn/securitysolution-list-api" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-api plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-list-api'] --- import kbnSecuritysolutionListApiObj from './kbn_securitysolution_list_api.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_list_constants.mdx b/api_docs/kbn_securitysolution_list_constants.mdx index 1a6633eb180154..0654eedb607c02 100644 --- a/api_docs/kbn_securitysolution_list_constants.mdx +++ b/api_docs/kbn_securitysolution_list_constants.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-constants title: "@kbn/securitysolution-list-constants" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-constants plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-list-constants'] --- import kbnSecuritysolutionListConstantsObj from './kbn_securitysolution_list_constants.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_list_hooks.mdx b/api_docs/kbn_securitysolution_list_hooks.mdx index 25d12cea27ad21..23fa4adc34f4a1 100644 --- a/api_docs/kbn_securitysolution_list_hooks.mdx +++ b/api_docs/kbn_securitysolution_list_hooks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-hooks title: "@kbn/securitysolution-list-hooks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-hooks plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-list-hooks'] --- import kbnSecuritysolutionListHooksObj from './kbn_securitysolution_list_hooks.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_list_utils.mdx b/api_docs/kbn_securitysolution_list_utils.mdx index 000c155a3c917d..d2872879e76ef5 100644 --- a/api_docs/kbn_securitysolution_list_utils.mdx +++ b/api_docs/kbn_securitysolution_list_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-utils title: "@kbn/securitysolution-list-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-utils plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-list-utils'] --- import kbnSecuritysolutionListUtilsObj from './kbn_securitysolution_list_utils.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_rules.mdx b/api_docs/kbn_securitysolution_rules.mdx index a5d39a95a0a056..7d6d8e51bcf1c5 100644 --- a/api_docs/kbn_securitysolution_rules.mdx +++ b/api_docs/kbn_securitysolution_rules.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-rules title: "@kbn/securitysolution-rules" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-rules plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-rules'] --- import kbnSecuritysolutionRulesObj from './kbn_securitysolution_rules.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_t_grid.mdx b/api_docs/kbn_securitysolution_t_grid.mdx index 5447f4359262e9..6b89708e0423a8 100644 --- a/api_docs/kbn_securitysolution_t_grid.mdx +++ b/api_docs/kbn_securitysolution_t_grid.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-t-grid title: "@kbn/securitysolution-t-grid" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-t-grid plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-t-grid'] --- import kbnSecuritysolutionTGridObj from './kbn_securitysolution_t_grid.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_utils.mdx b/api_docs/kbn_securitysolution_utils.mdx index 60b71a497165cc..48f1455927ec01 100644 --- a/api_docs/kbn_securitysolution_utils.mdx +++ b/api_docs/kbn_securitysolution_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-utils title: "@kbn/securitysolution-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-utils plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-utils'] --- import kbnSecuritysolutionUtilsObj from './kbn_securitysolution_utils.devdocs.json'; diff --git a/api_docs/kbn_server_http_tools.mdx b/api_docs/kbn_server_http_tools.mdx index 2a6683c3deeaec..b851ad432c64d7 100644 --- a/api_docs/kbn_server_http_tools.mdx +++ b/api_docs/kbn_server_http_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-http-tools title: "@kbn/server-http-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-http-tools plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-http-tools'] --- import kbnServerHttpToolsObj from './kbn_server_http_tools.devdocs.json'; diff --git a/api_docs/kbn_server_route_repository.mdx b/api_docs/kbn_server_route_repository.mdx index e7168e4341f78e..eb609357df9df4 100644 --- a/api_docs/kbn_server_route_repository.mdx +++ b/api_docs/kbn_server_route_repository.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-route-repository title: "@kbn/server-route-repository" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-route-repository plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository'] --- import kbnServerRouteRepositoryObj from './kbn_server_route_repository.devdocs.json'; diff --git a/api_docs/kbn_shared_svg.mdx b/api_docs/kbn_shared_svg.mdx index 1cc302abf32a39..235811e8855640 100644 --- a/api_docs/kbn_shared_svg.mdx +++ b/api_docs/kbn_shared_svg.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-svg title: "@kbn/shared-svg" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-svg plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-svg'] --- import kbnSharedSvgObj from './kbn_shared_svg.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_avatar_solution.mdx b/api_docs/kbn_shared_ux_avatar_solution.mdx index 470a14f2a9eaed..35b25ef223e098 100644 --- a/api_docs/kbn_shared_ux_avatar_solution.mdx +++ b/api_docs/kbn_shared_ux_avatar_solution.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-avatar-solution title: "@kbn/shared-ux-avatar-solution" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-avatar-solution plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-avatar-solution'] --- import kbnSharedUxAvatarSolutionObj from './kbn_shared_ux_avatar_solution.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx b/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx index 9c899661f1e838..3523af0423a316 100644 --- a/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx +++ b/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-avatar-user-profile-components title: "@kbn/shared-ux-avatar-user-profile-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-avatar-user-profile-components plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-avatar-user-profile-components'] --- import kbnSharedUxAvatarUserProfileComponentsObj from './kbn_shared_ux_avatar_user_profile_components.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_button_exit_full_screen.mdx b/api_docs/kbn_shared_ux_button_exit_full_screen.mdx index 49eb0f4b54440c..ac35b66dba9e39 100644 --- a/api_docs/kbn_shared_ux_button_exit_full_screen.mdx +++ b/api_docs/kbn_shared_ux_button_exit_full_screen.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-exit-full-screen title: "@kbn/shared-ux-button-exit-full-screen" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-exit-full-screen plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-button-exit-full-screen'] --- import kbnSharedUxButtonExitFullScreenObj from './kbn_shared_ux_button_exit_full_screen.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx b/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx index b447edc1794466..fa359d7e5f6824 100644 --- a/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx +++ b/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-exit-full-screen-mocks title: "@kbn/shared-ux-button-exit-full-screen-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-exit-full-screen-mocks plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-button-exit-full-screen-mocks'] --- import kbnSharedUxButtonExitFullScreenMocksObj from './kbn_shared_ux_button_exit_full_screen_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_button_toolbar.mdx b/api_docs/kbn_shared_ux_button_toolbar.mdx index 4187890ebea422..491afe431c0fe4 100644 --- a/api_docs/kbn_shared_ux_button_toolbar.mdx +++ b/api_docs/kbn_shared_ux_button_toolbar.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-toolbar title: "@kbn/shared-ux-button-toolbar" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-toolbar plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-button-toolbar'] --- import kbnSharedUxButtonToolbarObj from './kbn_shared_ux_button_toolbar.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_card_no_data.mdx b/api_docs/kbn_shared_ux_card_no_data.mdx index 2528aaa0483b14..a058105433ac12 100644 --- a/api_docs/kbn_shared_ux_card_no_data.mdx +++ b/api_docs/kbn_shared_ux_card_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-card-no-data title: "@kbn/shared-ux-card-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-card-no-data plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-card-no-data'] --- import kbnSharedUxCardNoDataObj from './kbn_shared_ux_card_no_data.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_card_no_data_mocks.mdx b/api_docs/kbn_shared_ux_card_no_data_mocks.mdx index 9761cee4caa2d2..8e9eb40d392553 100644 --- a/api_docs/kbn_shared_ux_card_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_card_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-card-no-data-mocks title: "@kbn/shared-ux-card-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-card-no-data-mocks plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-card-no-data-mocks'] --- import kbnSharedUxCardNoDataMocksObj from './kbn_shared_ux_card_no_data_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_link_redirect_app.mdx b/api_docs/kbn_shared_ux_link_redirect_app.mdx index 7301c277be2f25..aa9d98e0ae6911 100644 --- a/api_docs/kbn_shared_ux_link_redirect_app.mdx +++ b/api_docs/kbn_shared_ux_link_redirect_app.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-link-redirect-app title: "@kbn/shared-ux-link-redirect-app" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-link-redirect-app plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-link-redirect-app'] --- import kbnSharedUxLinkRedirectAppObj from './kbn_shared_ux_link_redirect_app.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx b/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx index 828fe690e0f9a7..317ffa8b9f1dba 100644 --- a/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx +++ b/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-link-redirect-app-mocks title: "@kbn/shared-ux-link-redirect-app-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-link-redirect-app-mocks plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-link-redirect-app-mocks'] --- import kbnSharedUxLinkRedirectAppMocksObj from './kbn_shared_ux_link_redirect_app_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_markdown.mdx b/api_docs/kbn_shared_ux_markdown.mdx index c5e66a9b54c492..2c3c305c748de7 100644 --- a/api_docs/kbn_shared_ux_markdown.mdx +++ b/api_docs/kbn_shared_ux_markdown.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-markdown title: "@kbn/shared-ux-markdown" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-markdown plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-markdown'] --- import kbnSharedUxMarkdownObj from './kbn_shared_ux_markdown.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_markdown_mocks.mdx b/api_docs/kbn_shared_ux_markdown_mocks.mdx index c219c206979fde..9a2826e70a1b68 100644 --- a/api_docs/kbn_shared_ux_markdown_mocks.mdx +++ b/api_docs/kbn_shared_ux_markdown_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-markdown-mocks title: "@kbn/shared-ux-markdown-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-markdown-mocks plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-markdown-mocks'] --- import kbnSharedUxMarkdownMocksObj from './kbn_shared_ux_markdown_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_analytics_no_data.mdx b/api_docs/kbn_shared_ux_page_analytics_no_data.mdx index 2274c9565bb78f..5e4b256d61e2b4 100644 --- a/api_docs/kbn_shared_ux_page_analytics_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_analytics_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-analytics-no-data title: "@kbn/shared-ux-page-analytics-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-analytics-no-data plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-analytics-no-data'] --- import kbnSharedUxPageAnalyticsNoDataObj from './kbn_shared_ux_page_analytics_no_data.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx b/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx index ac3ba812dd1e49..6316911db7171e 100644 --- a/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-analytics-no-data-mocks title: "@kbn/shared-ux-page-analytics-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-analytics-no-data-mocks plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-analytics-no-data-mocks'] --- import kbnSharedUxPageAnalyticsNoDataMocksObj from './kbn_shared_ux_page_analytics_no_data_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_kibana_no_data.mdx b/api_docs/kbn_shared_ux_page_kibana_no_data.mdx index d82cb4d0f29576..798cf561c7f885 100644 --- a/api_docs/kbn_shared_ux_page_kibana_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-no-data title: "@kbn/shared-ux-page-kibana-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-no-data plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-kibana-no-data'] --- import kbnSharedUxPageKibanaNoDataObj from './kbn_shared_ux_page_kibana_no_data.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx b/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx index 9f850e4e6ad417..3bde4022a10614 100644 --- a/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-no-data-mocks title: "@kbn/shared-ux-page-kibana-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-no-data-mocks plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-kibana-no-data-mocks'] --- import kbnSharedUxPageKibanaNoDataMocksObj from './kbn_shared_ux_page_kibana_no_data_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_kibana_template.mdx b/api_docs/kbn_shared_ux_page_kibana_template.mdx index 10553bceee471f..eb1cba1376e697 100644 --- a/api_docs/kbn_shared_ux_page_kibana_template.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_template.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-template title: "@kbn/shared-ux-page-kibana-template" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-template plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-kibana-template'] --- import kbnSharedUxPageKibanaTemplateObj from './kbn_shared_ux_page_kibana_template.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx b/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx index 2dc6ce10bcaf8f..a197ddf1e4ac9e 100644 --- a/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-template-mocks title: "@kbn/shared-ux-page-kibana-template-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-template-mocks plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-kibana-template-mocks'] --- import kbnSharedUxPageKibanaTemplateMocksObj from './kbn_shared_ux_page_kibana_template_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_no_data.mdx b/api_docs/kbn_shared_ux_page_no_data.mdx index b21a0649ca1393..a584b825ca5e43 100644 --- a/api_docs/kbn_shared_ux_page_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data title: "@kbn/shared-ux-page-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-no-data'] --- import kbnSharedUxPageNoDataObj from './kbn_shared_ux_page_no_data.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_no_data_config.mdx b/api_docs/kbn_shared_ux_page_no_data_config.mdx index 7815666829e595..247d00bbeeb40c 100644 --- a/api_docs/kbn_shared_ux_page_no_data_config.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-config title: "@kbn/shared-ux-page-no-data-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-config plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-no-data-config'] --- import kbnSharedUxPageNoDataConfigObj from './kbn_shared_ux_page_no_data_config.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx b/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx index cf2bc05d674699..c0da8c7e45988e 100644 --- a/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-config-mocks title: "@kbn/shared-ux-page-no-data-config-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-config-mocks plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-no-data-config-mocks'] --- import kbnSharedUxPageNoDataConfigMocksObj from './kbn_shared_ux_page_no_data_config_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_no_data_mocks.mdx b/api_docs/kbn_shared_ux_page_no_data_mocks.mdx index 4b49f9b3e11fd8..cb7a5d49cf74f0 100644 --- a/api_docs/kbn_shared_ux_page_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-mocks title: "@kbn/shared-ux-page-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-mocks plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-no-data-mocks'] --- import kbnSharedUxPageNoDataMocksObj from './kbn_shared_ux_page_no_data_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_solution_nav.mdx b/api_docs/kbn_shared_ux_page_solution_nav.mdx index d3b992d5bcd8e4..bfc446ac80b3a1 100644 --- a/api_docs/kbn_shared_ux_page_solution_nav.mdx +++ b/api_docs/kbn_shared_ux_page_solution_nav.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-solution-nav title: "@kbn/shared-ux-page-solution-nav" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-solution-nav plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-solution-nav'] --- import kbnSharedUxPageSolutionNavObj from './kbn_shared_ux_page_solution_nav.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_prompt_no_data_views.mdx b/api_docs/kbn_shared_ux_prompt_no_data_views.mdx index e07da5cc2d9d91..3b44e194dd96ff 100644 --- a/api_docs/kbn_shared_ux_prompt_no_data_views.mdx +++ b/api_docs/kbn_shared_ux_prompt_no_data_views.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-no-data-views title: "@kbn/shared-ux-prompt-no-data-views" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-no-data-views plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-prompt-no-data-views'] --- import kbnSharedUxPromptNoDataViewsObj from './kbn_shared_ux_prompt_no_data_views.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx b/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx index 226a58c0aaa8f1..31d06d1f4069b3 100644 --- a/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx +++ b/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-no-data-views-mocks title: "@kbn/shared-ux-prompt-no-data-views-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-no-data-views-mocks plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-prompt-no-data-views-mocks'] --- import kbnSharedUxPromptNoDataViewsMocksObj from './kbn_shared_ux_prompt_no_data_views_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_router.mdx b/api_docs/kbn_shared_ux_router.mdx index 864eee155833ce..a0c134f6259bd0 100644 --- a/api_docs/kbn_shared_ux_router.mdx +++ b/api_docs/kbn_shared_ux_router.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-router title: "@kbn/shared-ux-router" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-router plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-router'] --- import kbnSharedUxRouterObj from './kbn_shared_ux_router.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_router_mocks.mdx b/api_docs/kbn_shared_ux_router_mocks.mdx index d4b343fe1fa0a1..bab2339ce1a738 100644 --- a/api_docs/kbn_shared_ux_router_mocks.mdx +++ b/api_docs/kbn_shared_ux_router_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-router-mocks title: "@kbn/shared-ux-router-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-router-mocks plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-router-mocks'] --- import kbnSharedUxRouterMocksObj from './kbn_shared_ux_router_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_storybook_config.mdx b/api_docs/kbn_shared_ux_storybook_config.mdx index 898856285f77da..8bcaaf9410ec9f 100644 --- a/api_docs/kbn_shared_ux_storybook_config.mdx +++ b/api_docs/kbn_shared_ux_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-storybook-config title: "@kbn/shared-ux-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-storybook-config plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-storybook-config'] --- import kbnSharedUxStorybookConfigObj from './kbn_shared_ux_storybook_config.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_storybook_mock.mdx b/api_docs/kbn_shared_ux_storybook_mock.mdx index 74866474a3c71a..e980e40ea0616e 100644 --- a/api_docs/kbn_shared_ux_storybook_mock.mdx +++ b/api_docs/kbn_shared_ux_storybook_mock.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-storybook-mock title: "@kbn/shared-ux-storybook-mock" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-storybook-mock plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-storybook-mock'] --- import kbnSharedUxStorybookMockObj from './kbn_shared_ux_storybook_mock.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_utility.mdx b/api_docs/kbn_shared_ux_utility.mdx index 4e6ff7fc7c8500..c0a56ea44f2bc2 100644 --- a/api_docs/kbn_shared_ux_utility.mdx +++ b/api_docs/kbn_shared_ux_utility.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-utility title: "@kbn/shared-ux-utility" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-utility plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-utility'] --- import kbnSharedUxUtilityObj from './kbn_shared_ux_utility.devdocs.json'; diff --git a/api_docs/kbn_some_dev_log.mdx b/api_docs/kbn_some_dev_log.mdx index fa8650096202a0..eae60b96687f9e 100644 --- a/api_docs/kbn_some_dev_log.mdx +++ b/api_docs/kbn_some_dev_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-some-dev-log title: "@kbn/some-dev-log" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/some-dev-log plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/some-dev-log'] --- import kbnSomeDevLogObj from './kbn_some_dev_log.devdocs.json'; diff --git a/api_docs/kbn_sort_package_json.mdx b/api_docs/kbn_sort_package_json.mdx index d1e4f20ee5f2f0..2c054eaf5a98fa 100644 --- a/api_docs/kbn_sort_package_json.mdx +++ b/api_docs/kbn_sort_package_json.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-sort-package-json title: "@kbn/sort-package-json" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/sort-package-json plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/sort-package-json'] --- import kbnSortPackageJsonObj from './kbn_sort_package_json.devdocs.json'; diff --git a/api_docs/kbn_std.mdx b/api_docs/kbn_std.mdx index 7b45a362084e25..f4921e92b529ce 100644 --- a/api_docs/kbn_std.mdx +++ b/api_docs/kbn_std.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-std title: "@kbn/std" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/std plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/std'] --- import kbnStdObj from './kbn_std.devdocs.json'; diff --git a/api_docs/kbn_stdio_dev_helpers.mdx b/api_docs/kbn_stdio_dev_helpers.mdx index 70d789c67d885f..4df7e7f97168bf 100644 --- a/api_docs/kbn_stdio_dev_helpers.mdx +++ b/api_docs/kbn_stdio_dev_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-stdio-dev-helpers title: "@kbn/stdio-dev-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/stdio-dev-helpers plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/stdio-dev-helpers'] --- import kbnStdioDevHelpersObj from './kbn_stdio_dev_helpers.devdocs.json'; diff --git a/api_docs/kbn_storybook.mdx b/api_docs/kbn_storybook.mdx index 0a6efa67f2837b..7b20676a4f708a 100644 --- a/api_docs/kbn_storybook.mdx +++ b/api_docs/kbn_storybook.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-storybook title: "@kbn/storybook" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/storybook plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/storybook'] --- import kbnStorybookObj from './kbn_storybook.devdocs.json'; diff --git a/api_docs/kbn_telemetry_tools.mdx b/api_docs/kbn_telemetry_tools.mdx index e971f2d17208cf..0dd73f13bf6e5b 100644 --- a/api_docs/kbn_telemetry_tools.mdx +++ b/api_docs/kbn_telemetry_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-telemetry-tools title: "@kbn/telemetry-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/telemetry-tools plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/telemetry-tools'] --- import kbnTelemetryToolsObj from './kbn_telemetry_tools.devdocs.json'; diff --git a/api_docs/kbn_test.mdx b/api_docs/kbn_test.mdx index 68d0ba52e9823c..fd6660f8c4e7c0 100644 --- a/api_docs/kbn_test.mdx +++ b/api_docs/kbn_test.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test title: "@kbn/test" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test'] --- import kbnTestObj from './kbn_test.devdocs.json'; diff --git a/api_docs/kbn_test_jest_helpers.mdx b/api_docs/kbn_test_jest_helpers.mdx index 7c87588c287d31..c4d73a9b009a9a 100644 --- a/api_docs/kbn_test_jest_helpers.mdx +++ b/api_docs/kbn_test_jest_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-jest-helpers title: "@kbn/test-jest-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-jest-helpers plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test-jest-helpers'] --- import kbnTestJestHelpersObj from './kbn_test_jest_helpers.devdocs.json'; diff --git a/api_docs/kbn_test_subj_selector.mdx b/api_docs/kbn_test_subj_selector.mdx index 42cf10ecaafcaf..7e049fc7b0b201 100644 --- a/api_docs/kbn_test_subj_selector.mdx +++ b/api_docs/kbn_test_subj_selector.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-subj-selector title: "@kbn/test-subj-selector" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-subj-selector plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test-subj-selector'] --- import kbnTestSubjSelectorObj from './kbn_test_subj_selector.devdocs.json'; diff --git a/api_docs/kbn_tooling_log.mdx b/api_docs/kbn_tooling_log.mdx index 48f1d165cd73c2..130154db7bcf21 100644 --- a/api_docs/kbn_tooling_log.mdx +++ b/api_docs/kbn_tooling_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-tooling-log title: "@kbn/tooling-log" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/tooling-log plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/tooling-log'] --- import kbnToolingLogObj from './kbn_tooling_log.devdocs.json'; diff --git a/api_docs/kbn_type_summarizer.mdx b/api_docs/kbn_type_summarizer.mdx index 75cd1b7819eab1..129482b02ee2d8 100644 --- a/api_docs/kbn_type_summarizer.mdx +++ b/api_docs/kbn_type_summarizer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-type-summarizer title: "@kbn/type-summarizer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/type-summarizer plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/type-summarizer'] --- import kbnTypeSummarizerObj from './kbn_type_summarizer.devdocs.json'; diff --git a/api_docs/kbn_type_summarizer_core.mdx b/api_docs/kbn_type_summarizer_core.mdx index 3bfc170fb8c877..3900124997474d 100644 --- a/api_docs/kbn_type_summarizer_core.mdx +++ b/api_docs/kbn_type_summarizer_core.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-type-summarizer-core title: "@kbn/type-summarizer-core" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/type-summarizer-core plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/type-summarizer-core'] --- import kbnTypeSummarizerCoreObj from './kbn_type_summarizer_core.devdocs.json'; diff --git a/api_docs/kbn_typed_react_router_config.mdx b/api_docs/kbn_typed_react_router_config.mdx index 671755c80ea4d9..c5a859bdb1e16e 100644 --- a/api_docs/kbn_typed_react_router_config.mdx +++ b/api_docs/kbn_typed_react_router_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-typed-react-router-config title: "@kbn/typed-react-router-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/typed-react-router-config plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/typed-react-router-config'] --- import kbnTypedReactRouterConfigObj from './kbn_typed_react_router_config.devdocs.json'; diff --git a/api_docs/kbn_ui_shared_deps_src.mdx b/api_docs/kbn_ui_shared_deps_src.mdx index 139e07985d675d..f15e06bde4e5d6 100644 --- a/api_docs/kbn_ui_shared_deps_src.mdx +++ b/api_docs/kbn_ui_shared_deps_src.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-shared-deps-src title: "@kbn/ui-shared-deps-src" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-shared-deps-src plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ui-shared-deps-src'] --- import kbnUiSharedDepsSrcObj from './kbn_ui_shared_deps_src.devdocs.json'; diff --git a/api_docs/kbn_ui_theme.mdx b/api_docs/kbn_ui_theme.mdx index 7a58697489db9d..ed30add9550538 100644 --- a/api_docs/kbn_ui_theme.mdx +++ b/api_docs/kbn_ui_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-theme title: "@kbn/ui-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-theme plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ui-theme'] --- import kbnUiThemeObj from './kbn_ui_theme.devdocs.json'; diff --git a/api_docs/kbn_user_profile_components.mdx b/api_docs/kbn_user_profile_components.mdx index 727447a9c5ddcb..5d8ac79d661f1e 100644 --- a/api_docs/kbn_user_profile_components.mdx +++ b/api_docs/kbn_user_profile_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-user-profile-components title: "@kbn/user-profile-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/user-profile-components plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/user-profile-components'] --- import kbnUserProfileComponentsObj from './kbn_user_profile_components.devdocs.json'; diff --git a/api_docs/kbn_utility_types.mdx b/api_docs/kbn_utility_types.mdx index ff9958a2cce129..89607d89f97a7b 100644 --- a/api_docs/kbn_utility_types.mdx +++ b/api_docs/kbn_utility_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utility-types title: "@kbn/utility-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utility-types plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/utility-types'] --- import kbnUtilityTypesObj from './kbn_utility_types.devdocs.json'; diff --git a/api_docs/kbn_utility_types_jest.mdx b/api_docs/kbn_utility_types_jest.mdx index 995f198c7e0e63..52accc918cca87 100644 --- a/api_docs/kbn_utility_types_jest.mdx +++ b/api_docs/kbn_utility_types_jest.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utility-types-jest title: "@kbn/utility-types-jest" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utility-types-jest plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/utility-types-jest'] --- import kbnUtilityTypesJestObj from './kbn_utility_types_jest.devdocs.json'; diff --git a/api_docs/kbn_utils.mdx b/api_docs/kbn_utils.mdx index ac1156d4b26455..2125b4df766cb6 100644 --- a/api_docs/kbn_utils.mdx +++ b/api_docs/kbn_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utils title: "@kbn/utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utils plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/utils'] --- import kbnUtilsObj from './kbn_utils.devdocs.json'; diff --git a/api_docs/kbn_yarn_lock_validator.mdx b/api_docs/kbn_yarn_lock_validator.mdx index cad5009c10027b..a22ced74684d11 100644 --- a/api_docs/kbn_yarn_lock_validator.mdx +++ b/api_docs/kbn_yarn_lock_validator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-yarn-lock-validator title: "@kbn/yarn-lock-validator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/yarn-lock-validator plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/yarn-lock-validator'] --- import kbnYarnLockValidatorObj from './kbn_yarn_lock_validator.devdocs.json'; diff --git a/api_docs/kibana_overview.mdx b/api_docs/kibana_overview.mdx index 9d30d3b8cdf5cb..4ae1cd6e239492 100644 --- a/api_docs/kibana_overview.mdx +++ b/api_docs/kibana_overview.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaOverview title: "kibanaOverview" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaOverview plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaOverview'] --- import kibanaOverviewObj from './kibana_overview.devdocs.json'; diff --git a/api_docs/kibana_react.mdx b/api_docs/kibana_react.mdx index e957e84fc1155e..faa800c6cf49d4 100644 --- a/api_docs/kibana_react.mdx +++ b/api_docs/kibana_react.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaReact title: "kibanaReact" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaReact plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaReact'] --- import kibanaReactObj from './kibana_react.devdocs.json'; diff --git a/api_docs/kibana_utils.mdx b/api_docs/kibana_utils.mdx index e1a8d4f7ff2538..de8376057f3166 100644 --- a/api_docs/kibana_utils.mdx +++ b/api_docs/kibana_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaUtils title: "kibanaUtils" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaUtils plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaUtils'] --- import kibanaUtilsObj from './kibana_utils.devdocs.json'; diff --git a/api_docs/kubernetes_security.mdx b/api_docs/kubernetes_security.mdx index 5fae2e27224a63..331382f992b929 100644 --- a/api_docs/kubernetes_security.mdx +++ b/api_docs/kubernetes_security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kubernetesSecurity title: "kubernetesSecurity" image: https://source.unsplash.com/400x175/?github description: API docs for the kubernetesSecurity plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kubernetesSecurity'] --- import kubernetesSecurityObj from './kubernetes_security.devdocs.json'; diff --git a/api_docs/lens.mdx b/api_docs/lens.mdx index 7f6625427ca183..35a77602d9ff25 100644 --- a/api_docs/lens.mdx +++ b/api_docs/lens.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/lens title: "lens" image: https://source.unsplash.com/400x175/?github description: API docs for the lens plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lens'] --- import lensObj from './lens.devdocs.json'; diff --git a/api_docs/license_api_guard.mdx b/api_docs/license_api_guard.mdx index 6ee555a03335cf..773e3686a3be35 100644 --- a/api_docs/license_api_guard.mdx +++ b/api_docs/license_api_guard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licenseApiGuard title: "licenseApiGuard" image: https://source.unsplash.com/400x175/?github description: API docs for the licenseApiGuard plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'licenseApiGuard'] --- import licenseApiGuardObj from './license_api_guard.devdocs.json'; diff --git a/api_docs/license_management.mdx b/api_docs/license_management.mdx index 52237d3e8e9423..7c90600126ebf3 100644 --- a/api_docs/license_management.mdx +++ b/api_docs/license_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licenseManagement title: "licenseManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the licenseManagement plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'licenseManagement'] --- import licenseManagementObj from './license_management.devdocs.json'; diff --git a/api_docs/licensing.mdx b/api_docs/licensing.mdx index f7d88b5e77eb66..1190900162aa5d 100644 --- a/api_docs/licensing.mdx +++ b/api_docs/licensing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licensing title: "licensing" image: https://source.unsplash.com/400x175/?github description: API docs for the licensing plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'licensing'] --- import licensingObj from './licensing.devdocs.json'; diff --git a/api_docs/lists.mdx b/api_docs/lists.mdx index 011c07bd2f2ec2..09968a61744629 100644 --- a/api_docs/lists.mdx +++ b/api_docs/lists.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/lists title: "lists" image: https://source.unsplash.com/400x175/?github description: API docs for the lists plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lists'] --- import listsObj from './lists.devdocs.json'; diff --git a/api_docs/management.mdx b/api_docs/management.mdx index 961e47eaa46226..d04c989914d6e2 100644 --- a/api_docs/management.mdx +++ b/api_docs/management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/management title: "management" image: https://source.unsplash.com/400x175/?github description: API docs for the management plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'management'] --- import managementObj from './management.devdocs.json'; diff --git a/api_docs/maps.mdx b/api_docs/maps.mdx index 3cef004e7a0636..c79f4d3fb95542 100644 --- a/api_docs/maps.mdx +++ b/api_docs/maps.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/maps title: "maps" image: https://source.unsplash.com/400x175/?github description: API docs for the maps plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'maps'] --- import mapsObj from './maps.devdocs.json'; diff --git a/api_docs/maps_ems.mdx b/api_docs/maps_ems.mdx index b7f85931462006..37af6a9f532c99 100644 --- a/api_docs/maps_ems.mdx +++ b/api_docs/maps_ems.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/mapsEms title: "mapsEms" image: https://source.unsplash.com/400x175/?github description: API docs for the mapsEms plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'mapsEms'] --- import mapsEmsObj from './maps_ems.devdocs.json'; diff --git a/api_docs/ml.mdx b/api_docs/ml.mdx index 71c2c88639b17a..1ece9945e5aee4 100644 --- a/api_docs/ml.mdx +++ b/api_docs/ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ml title: "ml" image: https://source.unsplash.com/400x175/?github description: API docs for the ml plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ml'] --- import mlObj from './ml.devdocs.json'; diff --git a/api_docs/monitoring.mdx b/api_docs/monitoring.mdx index 65b7983715e276..1e046d10824e3b 100644 --- a/api_docs/monitoring.mdx +++ b/api_docs/monitoring.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/monitoring title: "monitoring" image: https://source.unsplash.com/400x175/?github description: API docs for the monitoring plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'monitoring'] --- import monitoringObj from './monitoring.devdocs.json'; diff --git a/api_docs/monitoring_collection.mdx b/api_docs/monitoring_collection.mdx index af2b90f6ae2e12..d8830ab535d233 100644 --- a/api_docs/monitoring_collection.mdx +++ b/api_docs/monitoring_collection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/monitoringCollection title: "monitoringCollection" image: https://source.unsplash.com/400x175/?github description: API docs for the monitoringCollection plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'monitoringCollection'] --- import monitoringCollectionObj from './monitoring_collection.devdocs.json'; diff --git a/api_docs/navigation.mdx b/api_docs/navigation.mdx index a71fe908dea038..c774be10d02fc5 100644 --- a/api_docs/navigation.mdx +++ b/api_docs/navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/navigation title: "navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the navigation plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'navigation'] --- import navigationObj from './navigation.devdocs.json'; diff --git a/api_docs/newsfeed.mdx b/api_docs/newsfeed.mdx index e4e2db741c1dd1..35dcc79b5c7095 100644 --- a/api_docs/newsfeed.mdx +++ b/api_docs/newsfeed.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/newsfeed title: "newsfeed" image: https://source.unsplash.com/400x175/?github description: API docs for the newsfeed plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'newsfeed'] --- import newsfeedObj from './newsfeed.devdocs.json'; diff --git a/api_docs/notifications.mdx b/api_docs/notifications.mdx index 91d0c2b7b83e33..8e1c56c7a9212c 100644 --- a/api_docs/notifications.mdx +++ b/api_docs/notifications.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/notifications title: "notifications" image: https://source.unsplash.com/400x175/?github description: API docs for the notifications plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'notifications'] --- import notificationsObj from './notifications.devdocs.json'; diff --git a/api_docs/observability.devdocs.json b/api_docs/observability.devdocs.json index 17f16cddf29166..ef4ea7a445c966 100644 --- a/api_docs/observability.devdocs.json +++ b/api_docs/observability.devdocs.json @@ -762,6 +762,41 @@ ], "initialIsOpen": false }, + { + "parentPluginId": "observability", + "id": "def-public.LoadWhenInView", + "type": "Function", + "tags": [], + "label": "LoadWhenInView", + "description": [], + "signature": [ + "(props: ", + "LoadWhenInViewProps", + ") => JSX.Element" + ], + "path": "x-pack/plugins/observability/public/components/shared/index.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "observability", + "id": "def-public.LoadWhenInView.$1", + "type": "Object", + "tags": [], + "label": "props", + "description": [], + "signature": [ + "LoadWhenInViewProps" + ], + "path": "x-pack/plugins/observability/public/components/shared/index.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, { "parentPluginId": "observability", "id": "def-public.NavigationWarningPromptProvider", diff --git a/api_docs/observability.mdx b/api_docs/observability.mdx index 485dc98f067cc3..3e90bc191e646f 100644 --- a/api_docs/observability.mdx +++ b/api_docs/observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observability title: "observability" image: https://source.unsplash.com/400x175/?github description: API docs for the observability plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observability'] --- import observabilityObj from './observability.devdocs.json'; @@ -21,7 +21,7 @@ Contact [Observability UI](https://github.com/orgs/elastic/teams/observability-u | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 556 | 40 | 553 | 31 | +| 558 | 40 | 555 | 32 | ## Client diff --git a/api_docs/osquery.mdx b/api_docs/osquery.mdx index cf6bbb81c6163d..bb11f3e4fa19e0 100644 --- a/api_docs/osquery.mdx +++ b/api_docs/osquery.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/osquery title: "osquery" image: https://source.unsplash.com/400x175/?github description: API docs for the osquery plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'osquery'] --- import osqueryObj from './osquery.devdocs.json'; diff --git a/api_docs/plugin_directory.mdx b/api_docs/plugin_directory.mdx index af68a3b19f4fea..e18ac5bd850fd5 100644 --- a/api_docs/plugin_directory.mdx +++ b/api_docs/plugin_directory.mdx @@ -7,7 +7,7 @@ id: kibDevDocsPluginDirectory slug: /kibana-dev-docs/api-meta/plugin-api-directory title: Directory description: Directory of public APIs available through plugins or packages. -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -21,7 +21,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | API Count | Any Count | Missing comments | Missing exports | |--------------|----------|-----------------|--------| -| 33253 | 515 | 23583 | 1105 | +| 33254 | 515 | 23582 | 1106 | ## Plugin Directory @@ -30,7 +30,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [Response Ops](https://github.com/orgs/elastic/teams/response-ops) | - | 225 | 8 | 220 | 24 | | | [Kibana Core](https://github.com/orgs/elastic/teams/kibana-core) | - | 36 | 1 | 32 | 2 | | | [Machine Learning UI](https://github.com/orgs/elastic/teams/ml-ui) | AIOps plugin maintained by ML team. | 9 | 0 | 0 | 2 | -| | [Response Ops](https://github.com/orgs/elastic/teams/response-ops) | - | 384 | 0 | 375 | 26 | +| | [Response Ops](https://github.com/orgs/elastic/teams/response-ops) | - | 379 | 0 | 370 | 26 | | | [APM UI](https://github.com/orgs/elastic/teams/apm-ui) | The user interface for Elastic APM | 41 | 0 | 41 | 58 | | | [Kibana Core](https://github.com/orgs/elastic/teams/kibana-core) | - | 9 | 0 | 9 | 0 | | | [App Services](https://github.com/orgs/elastic/teams/kibana-app-services) | Considering using bfetch capabilities when fetching large amounts of data. This services supports batching HTTP requests and streaming responses back. | 81 | 1 | 72 | 2 | @@ -45,7 +45,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | cloudLinks | [Kibana Core](https://github.com/orgs/elastic/teams/@kibana-core) | Adds the links to the Elastic Cloud console | 0 | 0 | 0 | 0 | | | [Cloud Security Posture](https://github.com/orgs/elastic/teams/cloud-posture-security) | The cloud security posture plugin | 18 | 0 | 2 | 3 | | | [Stack Management](https://github.com/orgs/elastic/teams/kibana-stack-management) | - | 13 | 0 | 13 | 1 | -| | [Kibana Presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | The Controls Plugin contains embeddable components intended to create a simple query interface for end users, and a powerful editing suite that allows dashboard authors to build controls | 233 | 0 | 224 | 7 | +| | [Kibana Presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | The Controls Plugin contains embeddable components intended to create a simple query interface for end users, and a powerful editing suite that allows dashboard authors to build controls | 237 | 0 | 228 | 7 | | | [Kibana Core](https://github.com/orgs/elastic/teams/kibana-core) | - | 2704 | 17 | 1202 | 0 | | crossClusterReplication | [Stack Management](https://github.com/orgs/elastic/teams/kibana-stack-management) | - | 0 | 0 | 0 | 0 | | | [Fleet](https://github.com/orgs/elastic/teams/fleet) | Add custom data integrations so they can be displayed in the Fleet integrations app | 107 | 0 | 88 | 1 | @@ -80,7 +80,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [Kibana Presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Adds 'shape' function and renderer to expressions | 148 | 0 | 146 | 0 | | | [Vis Editors](https://github.com/orgs/elastic/teams/kibana-vis-editors) | Expression Tagcloud plugin adds a `tagcloud` renderer and function to the expression plugin. The renderer will display the `Wordcloud` chart. | 7 | 0 | 7 | 0 | | | [Vis Editors](https://github.com/orgs/elastic/teams/kibana-vis-editors) | Expression XY plugin adds a `xy` renderer and function to the expression plugin. The renderer will display the `xy` chart. | 159 | 0 | 149 | 9 | -| | [App Services](https://github.com/orgs/elastic/teams/kibana-app-services) | Adds expression runtime to Kibana | 2196 | 74 | 1739 | 5 | +| | [App Services](https://github.com/orgs/elastic/teams/kibana-app-services) | Adds expression runtime to Kibana | 2198 | 74 | 1739 | 5 | | | [Kibana Core](https://github.com/orgs/elastic/teams/kibana-core) | - | 227 | 0 | 96 | 2 | | | [App Services](https://github.com/orgs/elastic/teams/kibana-app-services) | Index pattern fields and ambiguous values formatters | 288 | 26 | 249 | 3 | | | [Machine Learning UI](https://github.com/orgs/elastic/teams/ml-ui) | The file upload plugin contains components and services for uploading a file, analyzing its data, and then importing the data into an Elasticsearch index. Supported file types include CSV, TSV, newline-delimited JSON and GeoJSON. | 62 | 0 | 62 | 2 | @@ -120,7 +120,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [App Services](https://github.com/orgs/elastic/teams/kibana-app-services) | - | 34 | 0 | 34 | 2 | | | [Kibana Core](https://github.com/orgs/elastic/teams/kibana-core) | - | 17 | 0 | 17 | 0 | | | [App Services](https://github.com/orgs/elastic/teams/kibana-app-services) | - | 2 | 0 | 2 | 1 | -| | [Observability UI](https://github.com/orgs/elastic/teams/observability-ui) | - | 556 | 40 | 553 | 31 | +| | [Observability UI](https://github.com/orgs/elastic/teams/observability-ui) | - | 558 | 40 | 555 | 32 | | | [Security asset management](https://github.com/orgs/elastic/teams/security-asset-management) | - | 21 | 0 | 21 | 4 | | painlessLab | [Stack Management](https://github.com/orgs/elastic/teams/kibana-stack-management) | - | 0 | 0 | 0 | 0 | | | [Kibana Presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | The Presentation Utility Plugin is a set of common, shared components and toolkits for solutions within the Presentation space, (e.g. Dashboards, Canvas). | 243 | 8 | 187 | 12 | @@ -181,7 +181,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [Vis Editors](https://github.com/orgs/elastic/teams/kibana-vis-editors) | Registers the vega visualization. Is the elastic version of vega and vega-lite libraries. | 2 | 0 | 2 | 0 | | | [Vis Editors](https://github.com/orgs/elastic/teams/kibana-vis-editors) | Contains the vislib visualizations. These are the classical area/line/bar, pie, gauge/goal and heatmap charts. We want to replace them with elastic-charts. | 26 | 0 | 25 | 1 | | | [Vis Editors](https://github.com/orgs/elastic/teams/kibana-vis-editors) | Contains the new xy-axis chart using the elastic-charts library, which will eventually replace the vislib xy-axis charts including bar, area, and line. | 53 | 0 | 50 | 5 | -| | [Vis Editors](https://github.com/orgs/elastic/teams/kibana-vis-editors) | Contains the shared architecture among all the legacy visualizations, e.g. the visualization type registry or the visualization embeddable. | 798 | 12 | 768 | 18 | +| | [Vis Editors](https://github.com/orgs/elastic/teams/kibana-vis-editors) | Contains the shared architecture among all the legacy visualizations, e.g. the visualization type registry or the visualization embeddable. | 796 | 12 | 766 | 18 | | watcher | [Stack Management](https://github.com/orgs/elastic/teams/kibana-stack-management) | - | 0 | 0 | 0 | 0 | ## Package Directory diff --git a/api_docs/presentation_util.mdx b/api_docs/presentation_util.mdx index f7accac2d65c0e..69fb7abf1f8e7f 100644 --- a/api_docs/presentation_util.mdx +++ b/api_docs/presentation_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/presentationUtil title: "presentationUtil" image: https://source.unsplash.com/400x175/?github description: API docs for the presentationUtil plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'presentationUtil'] --- import presentationUtilObj from './presentation_util.devdocs.json'; diff --git a/api_docs/profiling.mdx b/api_docs/profiling.mdx index 235e1d82f2f32f..f34bb830590d6f 100644 --- a/api_docs/profiling.mdx +++ b/api_docs/profiling.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/profiling title: "profiling" image: https://source.unsplash.com/400x175/?github description: API docs for the profiling plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'profiling'] --- import profilingObj from './profiling.devdocs.json'; diff --git a/api_docs/remote_clusters.mdx b/api_docs/remote_clusters.mdx index 0f8f8acc8a8bdf..108ad3bdb4ba67 100644 --- a/api_docs/remote_clusters.mdx +++ b/api_docs/remote_clusters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/remoteClusters title: "remoteClusters" image: https://source.unsplash.com/400x175/?github description: API docs for the remoteClusters plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'remoteClusters'] --- import remoteClustersObj from './remote_clusters.devdocs.json'; diff --git a/api_docs/reporting.mdx b/api_docs/reporting.mdx index cf058a5b0072b9..19bf6a84d9649d 100644 --- a/api_docs/reporting.mdx +++ b/api_docs/reporting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/reporting title: "reporting" image: https://source.unsplash.com/400x175/?github description: API docs for the reporting plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'reporting'] --- import reportingObj from './reporting.devdocs.json'; diff --git a/api_docs/rollup.mdx b/api_docs/rollup.mdx index 05b079b13b2557..c9a0ca1e4300c0 100644 --- a/api_docs/rollup.mdx +++ b/api_docs/rollup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/rollup title: "rollup" image: https://source.unsplash.com/400x175/?github description: API docs for the rollup plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'rollup'] --- import rollupObj from './rollup.devdocs.json'; diff --git a/api_docs/rule_registry.mdx b/api_docs/rule_registry.mdx index e563e3f6eb9e6e..8336dda8814eca 100644 --- a/api_docs/rule_registry.mdx +++ b/api_docs/rule_registry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ruleRegistry title: "ruleRegistry" image: https://source.unsplash.com/400x175/?github description: API docs for the ruleRegistry plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ruleRegistry'] --- import ruleRegistryObj from './rule_registry.devdocs.json'; diff --git a/api_docs/runtime_fields.mdx b/api_docs/runtime_fields.mdx index 8913498cdae2b2..75055bf41c9314 100644 --- a/api_docs/runtime_fields.mdx +++ b/api_docs/runtime_fields.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/runtimeFields title: "runtimeFields" image: https://source.unsplash.com/400x175/?github description: API docs for the runtimeFields plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'runtimeFields'] --- import runtimeFieldsObj from './runtime_fields.devdocs.json'; diff --git a/api_docs/saved_objects.mdx b/api_docs/saved_objects.mdx index 8dc7faff262254..6a0c1f59535e00 100644 --- a/api_docs/saved_objects.mdx +++ b/api_docs/saved_objects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjects title: "savedObjects" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjects plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjects'] --- import savedObjectsObj from './saved_objects.devdocs.json'; diff --git a/api_docs/saved_objects_finder.mdx b/api_docs/saved_objects_finder.mdx index 43722301fa8cd8..5d98d29e5cdb0f 100644 --- a/api_docs/saved_objects_finder.mdx +++ b/api_docs/saved_objects_finder.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsFinder title: "savedObjectsFinder" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsFinder plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsFinder'] --- import savedObjectsFinderObj from './saved_objects_finder.devdocs.json'; diff --git a/api_docs/saved_objects_management.mdx b/api_docs/saved_objects_management.mdx index a2059e1decd481..2e830614b13cfa 100644 --- a/api_docs/saved_objects_management.mdx +++ b/api_docs/saved_objects_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsManagement title: "savedObjectsManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsManagement plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsManagement'] --- import savedObjectsManagementObj from './saved_objects_management.devdocs.json'; diff --git a/api_docs/saved_objects_tagging.mdx b/api_docs/saved_objects_tagging.mdx index abbda4fe4183d7..e6f40901778600 100644 --- a/api_docs/saved_objects_tagging.mdx +++ b/api_docs/saved_objects_tagging.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsTagging title: "savedObjectsTagging" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsTagging plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsTagging'] --- import savedObjectsTaggingObj from './saved_objects_tagging.devdocs.json'; diff --git a/api_docs/saved_objects_tagging_oss.mdx b/api_docs/saved_objects_tagging_oss.mdx index 613dfb32911c6c..c31fbd78efb73f 100644 --- a/api_docs/saved_objects_tagging_oss.mdx +++ b/api_docs/saved_objects_tagging_oss.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsTaggingOss title: "savedObjectsTaggingOss" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsTaggingOss plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsTaggingOss'] --- import savedObjectsTaggingOssObj from './saved_objects_tagging_oss.devdocs.json'; diff --git a/api_docs/saved_search.mdx b/api_docs/saved_search.mdx index 70710966c4e181..e3a6c5a1b30bd1 100644 --- a/api_docs/saved_search.mdx +++ b/api_docs/saved_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedSearch title: "savedSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the savedSearch plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedSearch'] --- import savedSearchObj from './saved_search.devdocs.json'; diff --git a/api_docs/screenshot_mode.mdx b/api_docs/screenshot_mode.mdx index 8c2e6709336cd6..8cc6c61de0ea30 100644 --- a/api_docs/screenshot_mode.mdx +++ b/api_docs/screenshot_mode.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/screenshotMode title: "screenshotMode" image: https://source.unsplash.com/400x175/?github description: API docs for the screenshotMode plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'screenshotMode'] --- import screenshotModeObj from './screenshot_mode.devdocs.json'; diff --git a/api_docs/screenshotting.mdx b/api_docs/screenshotting.mdx index a6893ea5bd4d35..fe202ca72c15c2 100644 --- a/api_docs/screenshotting.mdx +++ b/api_docs/screenshotting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/screenshotting title: "screenshotting" image: https://source.unsplash.com/400x175/?github description: API docs for the screenshotting plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'screenshotting'] --- import screenshottingObj from './screenshotting.devdocs.json'; diff --git a/api_docs/security.mdx b/api_docs/security.mdx index dc9d350bb721a9..a0560f54cd8b64 100644 --- a/api_docs/security.mdx +++ b/api_docs/security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/security title: "security" image: https://source.unsplash.com/400x175/?github description: API docs for the security plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'security'] --- import securityObj from './security.devdocs.json'; diff --git a/api_docs/security_solution.mdx b/api_docs/security_solution.mdx index fca79f7451d2de..8d85afe4ad7a4a 100644 --- a/api_docs/security_solution.mdx +++ b/api_docs/security_solution.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolution title: "securitySolution" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolution plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'securitySolution'] --- import securitySolutionObj from './security_solution.devdocs.json'; diff --git a/api_docs/session_view.mdx b/api_docs/session_view.mdx index b6222fcad49e70..6450fa228e2294 100644 --- a/api_docs/session_view.mdx +++ b/api_docs/session_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/sessionView title: "sessionView" image: https://source.unsplash.com/400x175/?github description: API docs for the sessionView plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'sessionView'] --- import sessionViewObj from './session_view.devdocs.json'; diff --git a/api_docs/share.mdx b/api_docs/share.mdx index ad86cfd78a34f0..080561a527ac1c 100644 --- a/api_docs/share.mdx +++ b/api_docs/share.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/share title: "share" image: https://source.unsplash.com/400x175/?github description: API docs for the share plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'share'] --- import shareObj from './share.devdocs.json'; diff --git a/api_docs/snapshot_restore.mdx b/api_docs/snapshot_restore.mdx index 5ce804043e037a..56a5391ccc2992 100644 --- a/api_docs/snapshot_restore.mdx +++ b/api_docs/snapshot_restore.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/snapshotRestore title: "snapshotRestore" image: https://source.unsplash.com/400x175/?github description: API docs for the snapshotRestore plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'snapshotRestore'] --- import snapshotRestoreObj from './snapshot_restore.devdocs.json'; diff --git a/api_docs/spaces.mdx b/api_docs/spaces.mdx index a1137bd6123e27..a9fd9fd41cf8a8 100644 --- a/api_docs/spaces.mdx +++ b/api_docs/spaces.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/spaces title: "spaces" image: https://source.unsplash.com/400x175/?github description: API docs for the spaces plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'spaces'] --- import spacesObj from './spaces.devdocs.json'; diff --git a/api_docs/stack_alerts.devdocs.json b/api_docs/stack_alerts.devdocs.json index f5cac92fc8c2a8..3487776da8cd7c 100644 --- a/api_docs/stack_alerts.devdocs.json +++ b/api_docs/stack_alerts.devdocs.json @@ -24,7 +24,7 @@ "signature": [ "\".index-threshold\"" ], - "path": "x-pack/plugins/stack_alerts/server/alert_types/index_threshold/rule_type.ts", + "path": "x-pack/plugins/stack_alerts/server/rule_types/index_threshold/rule_type.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false diff --git a/api_docs/stack_alerts.mdx b/api_docs/stack_alerts.mdx index b8c38cb7f3ac2a..3d7caf56a549f8 100644 --- a/api_docs/stack_alerts.mdx +++ b/api_docs/stack_alerts.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/stackAlerts title: "stackAlerts" image: https://source.unsplash.com/400x175/?github description: API docs for the stackAlerts plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'stackAlerts'] --- import stackAlertsObj from './stack_alerts.devdocs.json'; diff --git a/api_docs/stack_connectors.mdx b/api_docs/stack_connectors.mdx index 9fbdfa4d4f6881..cb370996d76f31 100644 --- a/api_docs/stack_connectors.mdx +++ b/api_docs/stack_connectors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/stackConnectors title: "stackConnectors" image: https://source.unsplash.com/400x175/?github description: API docs for the stackConnectors plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'stackConnectors'] --- import stackConnectorsObj from './stack_connectors.devdocs.json'; diff --git a/api_docs/task_manager.mdx b/api_docs/task_manager.mdx index 6eb6e15a37f39a..bdd4a1d1b8c446 100644 --- a/api_docs/task_manager.mdx +++ b/api_docs/task_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/taskManager title: "taskManager" image: https://source.unsplash.com/400x175/?github description: API docs for the taskManager plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'taskManager'] --- import taskManagerObj from './task_manager.devdocs.json'; diff --git a/api_docs/telemetry.mdx b/api_docs/telemetry.mdx index 9b0e1c55aec492..d89332168c3ff4 100644 --- a/api_docs/telemetry.mdx +++ b/api_docs/telemetry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetry title: "telemetry" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetry plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetry'] --- import telemetryObj from './telemetry.devdocs.json'; diff --git a/api_docs/telemetry_collection_manager.mdx b/api_docs/telemetry_collection_manager.mdx index 0baf2016d4baed..a489bff97eccce 100644 --- a/api_docs/telemetry_collection_manager.mdx +++ b/api_docs/telemetry_collection_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryCollectionManager title: "telemetryCollectionManager" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryCollectionManager plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryCollectionManager'] --- import telemetryCollectionManagerObj from './telemetry_collection_manager.devdocs.json'; diff --git a/api_docs/telemetry_collection_xpack.mdx b/api_docs/telemetry_collection_xpack.mdx index 1d30642a5cdf53..9a274223c80d73 100644 --- a/api_docs/telemetry_collection_xpack.mdx +++ b/api_docs/telemetry_collection_xpack.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryCollectionXpack title: "telemetryCollectionXpack" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryCollectionXpack plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryCollectionXpack'] --- import telemetryCollectionXpackObj from './telemetry_collection_xpack.devdocs.json'; diff --git a/api_docs/telemetry_management_section.mdx b/api_docs/telemetry_management_section.mdx index 7efd884126fe5a..fcd70d4cd19d22 100644 --- a/api_docs/telemetry_management_section.mdx +++ b/api_docs/telemetry_management_section.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryManagementSection title: "telemetryManagementSection" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryManagementSection plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryManagementSection'] --- import telemetryManagementSectionObj from './telemetry_management_section.devdocs.json'; diff --git a/api_docs/threat_intelligence.mdx b/api_docs/threat_intelligence.mdx index 187d403ca3b0bd..e4ada063927756 100644 --- a/api_docs/threat_intelligence.mdx +++ b/api_docs/threat_intelligence.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/threatIntelligence title: "threatIntelligence" image: https://source.unsplash.com/400x175/?github description: API docs for the threatIntelligence plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'threatIntelligence'] --- import threatIntelligenceObj from './threat_intelligence.devdocs.json'; diff --git a/api_docs/timelines.mdx b/api_docs/timelines.mdx index 58a2354c86333d..0748d3cda9a696 100644 --- a/api_docs/timelines.mdx +++ b/api_docs/timelines.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/timelines title: "timelines" image: https://source.unsplash.com/400x175/?github description: API docs for the timelines plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'timelines'] --- import timelinesObj from './timelines.devdocs.json'; diff --git a/api_docs/transform.mdx b/api_docs/transform.mdx index 76a13137515b87..5226ef04b7c0a5 100644 --- a/api_docs/transform.mdx +++ b/api_docs/transform.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/transform title: "transform" image: https://source.unsplash.com/400x175/?github description: API docs for the transform plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'transform'] --- import transformObj from './transform.devdocs.json'; diff --git a/api_docs/triggers_actions_ui.mdx b/api_docs/triggers_actions_ui.mdx index 012ebfab0b991c..02fc27b9051e24 100644 --- a/api_docs/triggers_actions_ui.mdx +++ b/api_docs/triggers_actions_ui.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/triggersActionsUi title: "triggersActionsUi" image: https://source.unsplash.com/400x175/?github description: API docs for the triggersActionsUi plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'triggersActionsUi'] --- import triggersActionsUiObj from './triggers_actions_ui.devdocs.json'; diff --git a/api_docs/ui_actions.mdx b/api_docs/ui_actions.mdx index 8cc97cdd36e828..f0f7aefbdc685c 100644 --- a/api_docs/ui_actions.mdx +++ b/api_docs/ui_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uiActions title: "uiActions" image: https://source.unsplash.com/400x175/?github description: API docs for the uiActions plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uiActions'] --- import uiActionsObj from './ui_actions.devdocs.json'; diff --git a/api_docs/ui_actions_enhanced.mdx b/api_docs/ui_actions_enhanced.mdx index 6871b38a55d233..3cc8b9ca6aa209 100644 --- a/api_docs/ui_actions_enhanced.mdx +++ b/api_docs/ui_actions_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uiActionsEnhanced title: "uiActionsEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the uiActionsEnhanced plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uiActionsEnhanced'] --- import uiActionsEnhancedObj from './ui_actions_enhanced.devdocs.json'; diff --git a/api_docs/unified_field_list.mdx b/api_docs/unified_field_list.mdx index b6e2a92bfd494c..e1db5c0dfa6626 100644 --- a/api_docs/unified_field_list.mdx +++ b/api_docs/unified_field_list.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedFieldList title: "unifiedFieldList" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedFieldList plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedFieldList'] --- import unifiedFieldListObj from './unified_field_list.devdocs.json'; diff --git a/api_docs/unified_histogram.mdx b/api_docs/unified_histogram.mdx index 2f72f8fa10dbe4..a2d4d97f311b99 100644 --- a/api_docs/unified_histogram.mdx +++ b/api_docs/unified_histogram.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedHistogram title: "unifiedHistogram" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedHistogram plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedHistogram'] --- import unifiedHistogramObj from './unified_histogram.devdocs.json'; diff --git a/api_docs/unified_search.mdx b/api_docs/unified_search.mdx index dddb414e475a97..039ea37bc05260 100644 --- a/api_docs/unified_search.mdx +++ b/api_docs/unified_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedSearch title: "unifiedSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedSearch plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedSearch'] --- import unifiedSearchObj from './unified_search.devdocs.json'; diff --git a/api_docs/unified_search_autocomplete.mdx b/api_docs/unified_search_autocomplete.mdx index c8211171d6c84f..30681010dfdcf0 100644 --- a/api_docs/unified_search_autocomplete.mdx +++ b/api_docs/unified_search_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedSearch-autocomplete title: "unifiedSearch.autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedSearch.autocomplete plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedSearch.autocomplete'] --- import unifiedSearchAutocompleteObj from './unified_search_autocomplete.devdocs.json'; diff --git a/api_docs/url_forwarding.mdx b/api_docs/url_forwarding.mdx index aca6a51537862a..609c33cf0b92ae 100644 --- a/api_docs/url_forwarding.mdx +++ b/api_docs/url_forwarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/urlForwarding title: "urlForwarding" image: https://source.unsplash.com/400x175/?github description: API docs for the urlForwarding plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'urlForwarding'] --- import urlForwardingObj from './url_forwarding.devdocs.json'; diff --git a/api_docs/usage_collection.devdocs.json b/api_docs/usage_collection.devdocs.json index 873b092e9cdb5d..bee493bb1fa8fb 100644 --- a/api_docs/usage_collection.devdocs.json +++ b/api_docs/usage_collection.devdocs.json @@ -1918,7 +1918,7 @@ "tags": [], "label": "CollectorFetchMethod", "description": [ - "\nThe fetch method has the context of the Collector itself\n(this has access to all the properties of the collector like the logger)\nand the the first parameter is {@link CollectorFetchContext}." + "\nThe fetch method has the context of the Collector itself\n(this has access to all the properties of the collector like the logger)\nand the first parameter is {@link CollectorFetchContext}." ], "signature": [ "(this: ", diff --git a/api_docs/usage_collection.mdx b/api_docs/usage_collection.mdx index 8622066fd26626..b05681af27196b 100644 --- a/api_docs/usage_collection.mdx +++ b/api_docs/usage_collection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/usageCollection title: "usageCollection" image: https://source.unsplash.com/400x175/?github description: API docs for the usageCollection plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'usageCollection'] --- import usageCollectionObj from './usage_collection.devdocs.json'; diff --git a/api_docs/ux.mdx b/api_docs/ux.mdx index f50a0dc12c7db0..43594d08db13c5 100644 --- a/api_docs/ux.mdx +++ b/api_docs/ux.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ux title: "ux" image: https://source.unsplash.com/400x175/?github description: API docs for the ux plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ux'] --- import uxObj from './ux.devdocs.json'; diff --git a/api_docs/vis_default_editor.mdx b/api_docs/vis_default_editor.mdx index 8f64ae0ff9a398..dfa609f66acb09 100644 --- a/api_docs/vis_default_editor.mdx +++ b/api_docs/vis_default_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visDefaultEditor title: "visDefaultEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the visDefaultEditor plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visDefaultEditor'] --- import visDefaultEditorObj from './vis_default_editor.devdocs.json'; diff --git a/api_docs/vis_type_gauge.mdx b/api_docs/vis_type_gauge.mdx index 0960b60a539d01..e145f44e3562dc 100644 --- a/api_docs/vis_type_gauge.mdx +++ b/api_docs/vis_type_gauge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeGauge title: "visTypeGauge" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeGauge plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeGauge'] --- import visTypeGaugeObj from './vis_type_gauge.devdocs.json'; diff --git a/api_docs/vis_type_heatmap.mdx b/api_docs/vis_type_heatmap.mdx index cbca7e52fa5bd7..5a10d17cb8f99c 100644 --- a/api_docs/vis_type_heatmap.mdx +++ b/api_docs/vis_type_heatmap.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeHeatmap title: "visTypeHeatmap" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeHeatmap plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeHeatmap'] --- import visTypeHeatmapObj from './vis_type_heatmap.devdocs.json'; diff --git a/api_docs/vis_type_pie.mdx b/api_docs/vis_type_pie.mdx index d2e5b5ca3e2873..35bce7eeadef2a 100644 --- a/api_docs/vis_type_pie.mdx +++ b/api_docs/vis_type_pie.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypePie title: "visTypePie" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypePie plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypePie'] --- import visTypePieObj from './vis_type_pie.devdocs.json'; diff --git a/api_docs/vis_type_table.mdx b/api_docs/vis_type_table.mdx index fbd9ee0072abbe..97adad7522bdf1 100644 --- a/api_docs/vis_type_table.mdx +++ b/api_docs/vis_type_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTable title: "visTypeTable" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTable plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeTable'] --- import visTypeTableObj from './vis_type_table.devdocs.json'; diff --git a/api_docs/vis_type_timelion.mdx b/api_docs/vis_type_timelion.mdx index 6155c8e51027e1..56d0810e4ec286 100644 --- a/api_docs/vis_type_timelion.mdx +++ b/api_docs/vis_type_timelion.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTimelion title: "visTypeTimelion" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTimelion plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeTimelion'] --- import visTypeTimelionObj from './vis_type_timelion.devdocs.json'; diff --git a/api_docs/vis_type_timeseries.mdx b/api_docs/vis_type_timeseries.mdx index 2ac66a942b436d..47df05c0d80f50 100644 --- a/api_docs/vis_type_timeseries.mdx +++ b/api_docs/vis_type_timeseries.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTimeseries title: "visTypeTimeseries" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTimeseries plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeTimeseries'] --- import visTypeTimeseriesObj from './vis_type_timeseries.devdocs.json'; diff --git a/api_docs/vis_type_vega.mdx b/api_docs/vis_type_vega.mdx index 8cb417e14e9fa9..1b21b844977331 100644 --- a/api_docs/vis_type_vega.mdx +++ b/api_docs/vis_type_vega.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeVega title: "visTypeVega" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeVega plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeVega'] --- import visTypeVegaObj from './vis_type_vega.devdocs.json'; diff --git a/api_docs/vis_type_vislib.mdx b/api_docs/vis_type_vislib.mdx index d9b6fface318ac..dd6300902357c3 100644 --- a/api_docs/vis_type_vislib.mdx +++ b/api_docs/vis_type_vislib.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeVislib title: "visTypeVislib" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeVislib plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeVislib'] --- import visTypeVislibObj from './vis_type_vislib.devdocs.json'; diff --git a/api_docs/vis_type_xy.mdx b/api_docs/vis_type_xy.mdx index 8c5c6fa6e7d30e..639d24b9661754 100644 --- a/api_docs/vis_type_xy.mdx +++ b/api_docs/vis_type_xy.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeXy title: "visTypeXy" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeXy plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeXy'] --- import visTypeXyObj from './vis_type_xy.devdocs.json'; diff --git a/api_docs/visualizations.devdocs.json b/api_docs/visualizations.devdocs.json index 8ec07af6904d0e..4a853779ad631f 100644 --- a/api_docs/visualizations.devdocs.json +++ b/api_docs/visualizations.devdocs.json @@ -1837,53 +1837,6 @@ ], "returnComment": [] }, - { - "parentPluginId": "visualizations", - "id": "def-public.VisualizeEmbeddable.catchError", - "type": "Function", - "tags": [], - "label": "catchError", - "description": [], - "signature": [ - "(error: string | ", - { - "pluginId": "expressions", - "scope": "common", - "docId": "kibExpressionsPluginApi", - "section": "def-common.ErrorLike", - "text": "ErrorLike" - }, - ") => JSX.Element" - ], - "path": "src/plugins/visualizations/public/embeddable/visualize_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "visualizations", - "id": "def-public.VisualizeEmbeddable.catchError.$1", - "type": "CompoundType", - "tags": [], - "label": "error", - "description": [], - "signature": [ - "string | ", - { - "pluginId": "expressions", - "scope": "common", - "docId": "kibExpressionsPluginApi", - "section": "def-common.ErrorLike", - "text": "ErrorLike" - } - ], - "path": "src/plugins/visualizations/public/embeddable/visualize_embeddable.tsx", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], - "returnComment": [] - }, { "parentPluginId": "visualizations", "id": "def-public.VisualizeEmbeddable.destroy", @@ -6405,15 +6358,7 @@ "section": "def-public.ExpressionRenderError", "text": "ExpressionRenderError" }, - ") => void; catchError: (error: string | ", - { - "pluginId": "expressions", - "scope": "common", - "docId": "kibExpressionsPluginApi", - "section": "def-common.ErrorLike", - "text": "ErrorLike" - }, - ") => JSX.Element; reload: () => Promise; supportedTriggers: () => string[]; inputIsRefType: (input: ", + ") => void; reload: () => Promise; supportedTriggers: () => string[]; inputIsRefType: (input: ", { "pluginId": "visualizations", "scope": "public", @@ -6427,7 +6372,15 @@ "VisualizeByValueInput", ">; getInputAsRefType: () => Promise<", "VisualizeByReferenceInput", - ">; readonly runtimeId: number; readonly isContainer: boolean; readonly deferEmbeddableLoad: boolean; fatalError?: Error | undefined; refreshInputFromParent: () => void; getIsContainer: () => this is ", + ">; readonly runtimeId: number; readonly isContainer: boolean; readonly deferEmbeddableLoad: boolean; catchError?: ((error: ", + { + "pluginId": "expressions", + "scope": "common", + "docId": "kibExpressionsPluginApi", + "section": "def-common.ErrorLike", + "text": "ErrorLike" + }, + ", domNode: Element | HTMLElement) => any) | undefined; fatalError?: Error | undefined; refreshInputFromParent: () => void; getIsContainer: () => this is ", { "pluginId": "embeddable", "scope": "public", diff --git a/api_docs/visualizations.mdx b/api_docs/visualizations.mdx index 7e5bf18aa19e02..2d442adc0889a0 100644 --- a/api_docs/visualizations.mdx +++ b/api_docs/visualizations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visualizations title: "visualizations" image: https://source.unsplash.com/400x175/?github description: API docs for the visualizations plugin -date: 2022-11-04 +date: 2022-11-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visualizations'] --- import visualizationsObj from './visualizations.devdocs.json'; @@ -21,7 +21,7 @@ Contact [Vis Editors](https://github.com/orgs/elastic/teams/kibana-vis-editors) | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 798 | 12 | 768 | 18 | +| 796 | 12 | 766 | 18 | ## Client diff --git a/dev_docs/key_concepts/building_blocks.mdx b/dev_docs/key_concepts/building_blocks.mdx index 5a7b79b93debf2..29cf2df7a764fa 100644 --- a/dev_docs/key_concepts/building_blocks.mdx +++ b/dev_docs/key_concepts/building_blocks.mdx @@ -52,7 +52,7 @@ The Dashboard Embeddable is one of the highest-level UI components you can add t Check out the Lens Embeddable if you wish to show users visualizations based on Elasticsearch data without worrying about query building and chart rendering. It's built on top of the , and integrates with and . Using the same configuration, it's also possible to link to a prefilled Lens editor, allowing the user to drill deeper and explore their data. -**Github labels**: `Team:VisEditors`, `Feature:Lens` +**Github labels**: `Team:Visualizations`, `Feature:Lens` ### Map Embeddable diff --git a/docs/index-custom-title-page.html b/docs/index-custom-title-page.html index 7935a110ac40ab..f605cfce3dee96 100644 --- a/docs/index-custom-title-page.html +++ b/docs/index-custom-title-page.html @@ -102,7 +102,7 @@

- + Protect my environment

Learn how to defend against threats across your environment.

diff --git a/package.json b/package.json index c9553e2bcf5017..fd6aa612d0feab 100644 --- a/package.json +++ b/package.json @@ -459,6 +459,7 @@ "adm-zip": "^0.5.9", "antlr4ts": "^0.5.0-alpha.3", "archiver": "^5.3.1", + "async": "^3.2.3", "axios": "^0.27.2", "base64-js": "^1.3.1", "bitmap-sdf": "^1.0.3", @@ -707,7 +708,7 @@ "@cypress/webpack-preprocessor": "^5.12.2", "@elastic/eslint-plugin-eui": "0.0.2", "@elastic/makelogs": "^6.1.1", - "@elastic/synthetics": "^1.0.0-beta.22", + "@elastic/synthetics": "^1.0.0-beta.23", "@emotion/babel-preset-css-prop": "^11.10.0", "@emotion/jest": "^11.10.0", "@istanbuljs/nyc-config-typescript": "^1.0.2", @@ -804,6 +805,7 @@ "@testing-library/user-event": "^13.5.0", "@types/apidoc": "^0.22.3", "@types/archiver": "^5.3.1", + "@types/async": "^3.2.3", "@types/babel__core": "^7.1.19", "@types/babel__generator": "^7.6.4", "@types/babel__helper-plugin-utils": "^7.10.0", @@ -1087,7 +1089,7 @@ "pirates": "^4.0.1", "piscina": "^3.2.0", "pixelmatch": "^5.3.0", - "playwright": "^1.17.1", + "playwright": "^1.26.0", "pngjs": "^3.4.0", "postcss": "^8.4.14", "postcss-loader": "^4.2.0", diff --git a/packages/core/apps/core-apps-server-internal/BUILD.bazel b/packages/core/apps/core-apps-server-internal/BUILD.bazel index adf8562deb1aa9..94f52482c27d4a 100644 --- a/packages/core/apps/core-apps-server-internal/BUILD.bazel +++ b/packages/core/apps/core-apps-server-internal/BUILD.bazel @@ -8,13 +8,6 @@ PKG_REQUIRE_NAME = "@kbn/core-apps-server-internal" SOURCE_FILES = glob( [ "**/*.ts", - "src/**/*.css", - "src/**/*.ttf", - "src/**/*.woff", - "src/**/*.woff2", - "src/**/*.ico", - "src/**/*.png", - "src/**/*.svg", ], exclude = [ "**/*.config.js", @@ -38,8 +31,16 @@ filegroup( srcs = SRCS, ) +ASSETS = glob(["assets/**/*"]) + +filegroup( + name = "assets", + srcs = ASSETS, +) + NPM_MODULE_EXTRA_FILES = [ "package.json", + ":assets" ] RUNTIME_DEPS = [ diff --git a/packages/core/apps/core-apps-server-internal/src/assets/favicons/favicon.distribution.ico b/packages/core/apps/core-apps-server-internal/assets/favicons/favicon.distribution.ico similarity index 100% rename from packages/core/apps/core-apps-server-internal/src/assets/favicons/favicon.distribution.ico rename to packages/core/apps/core-apps-server-internal/assets/favicons/favicon.distribution.ico diff --git a/packages/core/apps/core-apps-server-internal/src/assets/favicons/favicon.distribution.png b/packages/core/apps/core-apps-server-internal/assets/favicons/favicon.distribution.png similarity index 100% rename from packages/core/apps/core-apps-server-internal/src/assets/favicons/favicon.distribution.png rename to packages/core/apps/core-apps-server-internal/assets/favicons/favicon.distribution.png diff --git a/packages/core/apps/core-apps-server-internal/src/assets/favicons/favicon.distribution.svg b/packages/core/apps/core-apps-server-internal/assets/favicons/favicon.distribution.svg similarity index 100% rename from packages/core/apps/core-apps-server-internal/src/assets/favicons/favicon.distribution.svg rename to packages/core/apps/core-apps-server-internal/assets/favicons/favicon.distribution.svg diff --git a/packages/core/apps/core-apps-server-internal/src/assets/favicons/favicon.ico b/packages/core/apps/core-apps-server-internal/assets/favicons/favicon.ico similarity index 100% rename from packages/core/apps/core-apps-server-internal/src/assets/favicons/favicon.ico rename to packages/core/apps/core-apps-server-internal/assets/favicons/favicon.ico diff --git a/packages/core/apps/core-apps-server-internal/src/assets/favicons/favicon.png b/packages/core/apps/core-apps-server-internal/assets/favicons/favicon.png similarity index 100% rename from packages/core/apps/core-apps-server-internal/src/assets/favicons/favicon.png rename to packages/core/apps/core-apps-server-internal/assets/favicons/favicon.png diff --git a/packages/core/apps/core-apps-server-internal/src/assets/favicons/favicon.svg b/packages/core/apps/core-apps-server-internal/assets/favicons/favicon.svg similarity index 100% rename from packages/core/apps/core-apps-server-internal/src/assets/favicons/favicon.svg rename to packages/core/apps/core-apps-server-internal/assets/favicons/favicon.svg diff --git a/packages/core/apps/core-apps-server-internal/src/assets/fonts/inter/Inter-Black.woff b/packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-Black.woff similarity index 100% rename from packages/core/apps/core-apps-server-internal/src/assets/fonts/inter/Inter-Black.woff rename to packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-Black.woff diff --git a/packages/core/apps/core-apps-server-internal/src/assets/fonts/inter/Inter-Black.woff2 b/packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-Black.woff2 similarity index 100% rename from packages/core/apps/core-apps-server-internal/src/assets/fonts/inter/Inter-Black.woff2 rename to packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-Black.woff2 diff --git a/packages/core/apps/core-apps-server-internal/src/assets/fonts/inter/Inter-BlackItalic.woff b/packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-BlackItalic.woff similarity index 100% rename from packages/core/apps/core-apps-server-internal/src/assets/fonts/inter/Inter-BlackItalic.woff rename to packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-BlackItalic.woff diff --git a/packages/core/apps/core-apps-server-internal/src/assets/fonts/inter/Inter-BlackItalic.woff2 b/packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-BlackItalic.woff2 similarity index 100% rename from packages/core/apps/core-apps-server-internal/src/assets/fonts/inter/Inter-BlackItalic.woff2 rename to packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-BlackItalic.woff2 diff --git a/packages/core/apps/core-apps-server-internal/src/assets/fonts/inter/Inter-Bold.woff b/packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-Bold.woff similarity index 100% rename from packages/core/apps/core-apps-server-internal/src/assets/fonts/inter/Inter-Bold.woff rename to packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-Bold.woff diff --git a/packages/core/apps/core-apps-server-internal/src/assets/fonts/inter/Inter-Bold.woff2 b/packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-Bold.woff2 similarity index 100% rename from packages/core/apps/core-apps-server-internal/src/assets/fonts/inter/Inter-Bold.woff2 rename to packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-Bold.woff2 diff --git a/packages/core/apps/core-apps-server-internal/src/assets/fonts/inter/Inter-BoldItalic.woff b/packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-BoldItalic.woff similarity index 100% rename from packages/core/apps/core-apps-server-internal/src/assets/fonts/inter/Inter-BoldItalic.woff rename to packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-BoldItalic.woff diff --git a/packages/core/apps/core-apps-server-internal/src/assets/fonts/inter/Inter-BoldItalic.woff2 b/packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-BoldItalic.woff2 similarity index 100% rename from packages/core/apps/core-apps-server-internal/src/assets/fonts/inter/Inter-BoldItalic.woff2 rename to packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-BoldItalic.woff2 diff --git a/packages/core/apps/core-apps-server-internal/src/assets/fonts/inter/Inter-ExtraBold.woff b/packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-ExtraBold.woff similarity index 100% rename from packages/core/apps/core-apps-server-internal/src/assets/fonts/inter/Inter-ExtraBold.woff rename to packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-ExtraBold.woff diff --git a/packages/core/apps/core-apps-server-internal/src/assets/fonts/inter/Inter-ExtraBold.woff2 b/packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-ExtraBold.woff2 similarity index 100% rename from packages/core/apps/core-apps-server-internal/src/assets/fonts/inter/Inter-ExtraBold.woff2 rename to packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-ExtraBold.woff2 diff --git a/packages/core/apps/core-apps-server-internal/src/assets/fonts/inter/Inter-ExtraBoldItalic.woff b/packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-ExtraBoldItalic.woff similarity index 100% rename from packages/core/apps/core-apps-server-internal/src/assets/fonts/inter/Inter-ExtraBoldItalic.woff rename to packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-ExtraBoldItalic.woff diff --git a/packages/core/apps/core-apps-server-internal/src/assets/fonts/inter/Inter-ExtraBoldItalic.woff2 b/packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-ExtraBoldItalic.woff2 similarity index 100% rename from packages/core/apps/core-apps-server-internal/src/assets/fonts/inter/Inter-ExtraBoldItalic.woff2 rename to packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-ExtraBoldItalic.woff2 diff --git a/packages/core/apps/core-apps-server-internal/src/assets/fonts/inter/Inter-ExtraLight.woff b/packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-ExtraLight.woff similarity index 100% rename from packages/core/apps/core-apps-server-internal/src/assets/fonts/inter/Inter-ExtraLight.woff rename to packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-ExtraLight.woff diff --git a/packages/core/apps/core-apps-server-internal/src/assets/fonts/inter/Inter-ExtraLight.woff2 b/packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-ExtraLight.woff2 similarity index 100% rename from packages/core/apps/core-apps-server-internal/src/assets/fonts/inter/Inter-ExtraLight.woff2 rename to packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-ExtraLight.woff2 diff --git a/packages/core/apps/core-apps-server-internal/src/assets/fonts/inter/Inter-ExtraLightItalic.woff b/packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-ExtraLightItalic.woff similarity index 100% rename from packages/core/apps/core-apps-server-internal/src/assets/fonts/inter/Inter-ExtraLightItalic.woff rename to packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-ExtraLightItalic.woff diff --git a/packages/core/apps/core-apps-server-internal/src/assets/fonts/inter/Inter-ExtraLightItalic.woff2 b/packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-ExtraLightItalic.woff2 similarity index 100% rename from packages/core/apps/core-apps-server-internal/src/assets/fonts/inter/Inter-ExtraLightItalic.woff2 rename to packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-ExtraLightItalic.woff2 diff --git a/packages/core/apps/core-apps-server-internal/src/assets/fonts/inter/Inter-Italic.woff b/packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-Italic.woff similarity index 100% rename from packages/core/apps/core-apps-server-internal/src/assets/fonts/inter/Inter-Italic.woff rename to packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-Italic.woff diff --git a/packages/core/apps/core-apps-server-internal/src/assets/fonts/inter/Inter-Italic.woff2 b/packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-Italic.woff2 similarity index 100% rename from packages/core/apps/core-apps-server-internal/src/assets/fonts/inter/Inter-Italic.woff2 rename to packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-Italic.woff2 diff --git a/packages/core/apps/core-apps-server-internal/src/assets/fonts/inter/Inter-Light.woff b/packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-Light.woff similarity index 100% rename from packages/core/apps/core-apps-server-internal/src/assets/fonts/inter/Inter-Light.woff rename to packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-Light.woff diff --git a/packages/core/apps/core-apps-server-internal/src/assets/fonts/inter/Inter-Light.woff2 b/packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-Light.woff2 similarity index 100% rename from packages/core/apps/core-apps-server-internal/src/assets/fonts/inter/Inter-Light.woff2 rename to packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-Light.woff2 diff --git a/packages/core/apps/core-apps-server-internal/src/assets/fonts/inter/Inter-LightItalic.woff b/packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-LightItalic.woff similarity index 100% rename from packages/core/apps/core-apps-server-internal/src/assets/fonts/inter/Inter-LightItalic.woff rename to packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-LightItalic.woff diff --git a/packages/core/apps/core-apps-server-internal/src/assets/fonts/inter/Inter-LightItalic.woff2 b/packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-LightItalic.woff2 similarity index 100% rename from packages/core/apps/core-apps-server-internal/src/assets/fonts/inter/Inter-LightItalic.woff2 rename to packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-LightItalic.woff2 diff --git a/packages/core/apps/core-apps-server-internal/src/assets/fonts/inter/Inter-Medium.woff b/packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-Medium.woff similarity index 100% rename from packages/core/apps/core-apps-server-internal/src/assets/fonts/inter/Inter-Medium.woff rename to packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-Medium.woff diff --git a/packages/core/apps/core-apps-server-internal/src/assets/fonts/inter/Inter-Medium.woff2 b/packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-Medium.woff2 similarity index 100% rename from packages/core/apps/core-apps-server-internal/src/assets/fonts/inter/Inter-Medium.woff2 rename to packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-Medium.woff2 diff --git a/packages/core/apps/core-apps-server-internal/src/assets/fonts/inter/Inter-MediumItalic.woff b/packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-MediumItalic.woff similarity index 100% rename from packages/core/apps/core-apps-server-internal/src/assets/fonts/inter/Inter-MediumItalic.woff rename to packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-MediumItalic.woff diff --git a/packages/core/apps/core-apps-server-internal/src/assets/fonts/inter/Inter-MediumItalic.woff2 b/packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-MediumItalic.woff2 similarity index 100% rename from packages/core/apps/core-apps-server-internal/src/assets/fonts/inter/Inter-MediumItalic.woff2 rename to packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-MediumItalic.woff2 diff --git a/packages/core/apps/core-apps-server-internal/src/assets/fonts/inter/Inter-Regular.woff b/packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-Regular.woff similarity index 100% rename from packages/core/apps/core-apps-server-internal/src/assets/fonts/inter/Inter-Regular.woff rename to packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-Regular.woff diff --git a/packages/core/apps/core-apps-server-internal/src/assets/fonts/inter/Inter-Regular.woff2 b/packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-Regular.woff2 similarity index 100% rename from packages/core/apps/core-apps-server-internal/src/assets/fonts/inter/Inter-Regular.woff2 rename to packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-Regular.woff2 diff --git a/packages/core/apps/core-apps-server-internal/src/assets/fonts/inter/Inter-SemiBold.woff b/packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-SemiBold.woff similarity index 100% rename from packages/core/apps/core-apps-server-internal/src/assets/fonts/inter/Inter-SemiBold.woff rename to packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-SemiBold.woff diff --git a/packages/core/apps/core-apps-server-internal/src/assets/fonts/inter/Inter-SemiBold.woff2 b/packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-SemiBold.woff2 similarity index 100% rename from packages/core/apps/core-apps-server-internal/src/assets/fonts/inter/Inter-SemiBold.woff2 rename to packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-SemiBold.woff2 diff --git a/packages/core/apps/core-apps-server-internal/src/assets/fonts/inter/Inter-SemiBoldItalic.woff b/packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-SemiBoldItalic.woff similarity index 100% rename from packages/core/apps/core-apps-server-internal/src/assets/fonts/inter/Inter-SemiBoldItalic.woff rename to packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-SemiBoldItalic.woff diff --git a/packages/core/apps/core-apps-server-internal/src/assets/fonts/inter/Inter-SemiBoldItalic.woff2 b/packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-SemiBoldItalic.woff2 similarity index 100% rename from packages/core/apps/core-apps-server-internal/src/assets/fonts/inter/Inter-SemiBoldItalic.woff2 rename to packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-SemiBoldItalic.woff2 diff --git a/packages/core/apps/core-apps-server-internal/src/assets/fonts/inter/Inter-Thin.woff b/packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-Thin.woff similarity index 100% rename from packages/core/apps/core-apps-server-internal/src/assets/fonts/inter/Inter-Thin.woff rename to packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-Thin.woff diff --git a/packages/core/apps/core-apps-server-internal/src/assets/fonts/inter/Inter-Thin.woff2 b/packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-Thin.woff2 similarity index 100% rename from packages/core/apps/core-apps-server-internal/src/assets/fonts/inter/Inter-Thin.woff2 rename to packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-Thin.woff2 diff --git a/packages/core/apps/core-apps-server-internal/src/assets/fonts/inter/Inter-ThinItalic.woff b/packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-ThinItalic.woff similarity index 100% rename from packages/core/apps/core-apps-server-internal/src/assets/fonts/inter/Inter-ThinItalic.woff rename to packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-ThinItalic.woff diff --git a/packages/core/apps/core-apps-server-internal/src/assets/fonts/inter/Inter-ThinItalic.woff2 b/packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-ThinItalic.woff2 similarity index 100% rename from packages/core/apps/core-apps-server-internal/src/assets/fonts/inter/Inter-ThinItalic.woff2 rename to packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-ThinItalic.woff2 diff --git a/packages/core/apps/core-apps-server-internal/src/assets/fonts/inter/Inter-italic.var.woff2 b/packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-italic.var.woff2 similarity index 100% rename from packages/core/apps/core-apps-server-internal/src/assets/fonts/inter/Inter-italic.var.woff2 rename to packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-italic.var.woff2 diff --git a/packages/core/apps/core-apps-server-internal/src/assets/fonts/inter/Inter-roman.var.woff2 b/packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-roman.var.woff2 similarity index 100% rename from packages/core/apps/core-apps-server-internal/src/assets/fonts/inter/Inter-roman.var.woff2 rename to packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter-roman.var.woff2 diff --git a/packages/core/apps/core-apps-server-internal/src/assets/fonts/inter/Inter.var.woff2 b/packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter.var.woff2 similarity index 100% rename from packages/core/apps/core-apps-server-internal/src/assets/fonts/inter/Inter.var.woff2 rename to packages/core/apps/core-apps-server-internal/assets/fonts/inter/Inter.var.woff2 diff --git a/packages/core/apps/core-apps-server-internal/src/assets/fonts/inter/LICENSE.txt b/packages/core/apps/core-apps-server-internal/assets/fonts/inter/LICENSE.txt similarity index 100% rename from packages/core/apps/core-apps-server-internal/src/assets/fonts/inter/LICENSE.txt rename to packages/core/apps/core-apps-server-internal/assets/fonts/inter/LICENSE.txt diff --git a/packages/core/apps/core-apps-server-internal/src/assets/fonts/readme.md b/packages/core/apps/core-apps-server-internal/assets/fonts/readme.md similarity index 100% rename from packages/core/apps/core-apps-server-internal/src/assets/fonts/readme.md rename to packages/core/apps/core-apps-server-internal/assets/fonts/readme.md diff --git a/packages/core/apps/core-apps-server-internal/src/assets/fonts/roboto_mono/LICENSE.txt b/packages/core/apps/core-apps-server-internal/assets/fonts/roboto_mono/LICENSE.txt similarity index 100% rename from packages/core/apps/core-apps-server-internal/src/assets/fonts/roboto_mono/LICENSE.txt rename to packages/core/apps/core-apps-server-internal/assets/fonts/roboto_mono/LICENSE.txt diff --git a/packages/core/apps/core-apps-server-internal/src/assets/fonts/roboto_mono/RobotoMono-Bold.ttf b/packages/core/apps/core-apps-server-internal/assets/fonts/roboto_mono/RobotoMono-Bold.ttf similarity index 100% rename from packages/core/apps/core-apps-server-internal/src/assets/fonts/roboto_mono/RobotoMono-Bold.ttf rename to packages/core/apps/core-apps-server-internal/assets/fonts/roboto_mono/RobotoMono-Bold.ttf diff --git a/packages/core/apps/core-apps-server-internal/src/assets/fonts/roboto_mono/RobotoMono-BoldItalic.ttf b/packages/core/apps/core-apps-server-internal/assets/fonts/roboto_mono/RobotoMono-BoldItalic.ttf similarity index 100% rename from packages/core/apps/core-apps-server-internal/src/assets/fonts/roboto_mono/RobotoMono-BoldItalic.ttf rename to packages/core/apps/core-apps-server-internal/assets/fonts/roboto_mono/RobotoMono-BoldItalic.ttf diff --git a/packages/core/apps/core-apps-server-internal/src/assets/fonts/roboto_mono/RobotoMono-Italic.ttf b/packages/core/apps/core-apps-server-internal/assets/fonts/roboto_mono/RobotoMono-Italic.ttf similarity index 100% rename from packages/core/apps/core-apps-server-internal/src/assets/fonts/roboto_mono/RobotoMono-Italic.ttf rename to packages/core/apps/core-apps-server-internal/assets/fonts/roboto_mono/RobotoMono-Italic.ttf diff --git a/packages/core/apps/core-apps-server-internal/src/assets/fonts/roboto_mono/RobotoMono-Light.ttf b/packages/core/apps/core-apps-server-internal/assets/fonts/roboto_mono/RobotoMono-Light.ttf similarity index 100% rename from packages/core/apps/core-apps-server-internal/src/assets/fonts/roboto_mono/RobotoMono-Light.ttf rename to packages/core/apps/core-apps-server-internal/assets/fonts/roboto_mono/RobotoMono-Light.ttf diff --git a/packages/core/apps/core-apps-server-internal/src/assets/fonts/roboto_mono/RobotoMono-LightItalic.ttf b/packages/core/apps/core-apps-server-internal/assets/fonts/roboto_mono/RobotoMono-LightItalic.ttf similarity index 100% rename from packages/core/apps/core-apps-server-internal/src/assets/fonts/roboto_mono/RobotoMono-LightItalic.ttf rename to packages/core/apps/core-apps-server-internal/assets/fonts/roboto_mono/RobotoMono-LightItalic.ttf diff --git a/packages/core/apps/core-apps-server-internal/src/assets/fonts/roboto_mono/RobotoMono-Medium.ttf b/packages/core/apps/core-apps-server-internal/assets/fonts/roboto_mono/RobotoMono-Medium.ttf similarity index 100% rename from packages/core/apps/core-apps-server-internal/src/assets/fonts/roboto_mono/RobotoMono-Medium.ttf rename to packages/core/apps/core-apps-server-internal/assets/fonts/roboto_mono/RobotoMono-Medium.ttf diff --git a/packages/core/apps/core-apps-server-internal/src/assets/fonts/roboto_mono/RobotoMono-MediumItalic.ttf b/packages/core/apps/core-apps-server-internal/assets/fonts/roboto_mono/RobotoMono-MediumItalic.ttf similarity index 100% rename from packages/core/apps/core-apps-server-internal/src/assets/fonts/roboto_mono/RobotoMono-MediumItalic.ttf rename to packages/core/apps/core-apps-server-internal/assets/fonts/roboto_mono/RobotoMono-MediumItalic.ttf diff --git a/packages/core/apps/core-apps-server-internal/src/assets/fonts/roboto_mono/RobotoMono-Regular.ttf b/packages/core/apps/core-apps-server-internal/assets/fonts/roboto_mono/RobotoMono-Regular.ttf similarity index 100% rename from packages/core/apps/core-apps-server-internal/src/assets/fonts/roboto_mono/RobotoMono-Regular.ttf rename to packages/core/apps/core-apps-server-internal/assets/fonts/roboto_mono/RobotoMono-Regular.ttf diff --git a/packages/core/apps/core-apps-server-internal/src/assets/fonts/roboto_mono/RobotoMono-Thin.ttf b/packages/core/apps/core-apps-server-internal/assets/fonts/roboto_mono/RobotoMono-Thin.ttf similarity index 100% rename from packages/core/apps/core-apps-server-internal/src/assets/fonts/roboto_mono/RobotoMono-Thin.ttf rename to packages/core/apps/core-apps-server-internal/assets/fonts/roboto_mono/RobotoMono-Thin.ttf diff --git a/packages/core/apps/core-apps-server-internal/src/assets/fonts/roboto_mono/RobotoMono-ThinItalic.ttf b/packages/core/apps/core-apps-server-internal/assets/fonts/roboto_mono/RobotoMono-ThinItalic.ttf similarity index 100% rename from packages/core/apps/core-apps-server-internal/src/assets/fonts/roboto_mono/RobotoMono-ThinItalic.ttf rename to packages/core/apps/core-apps-server-internal/assets/fonts/roboto_mono/RobotoMono-ThinItalic.ttf diff --git a/packages/core/apps/core-apps-server-internal/src/assets/legacy_dark_theme.css b/packages/core/apps/core-apps-server-internal/assets/legacy_dark_theme.css similarity index 100% rename from packages/core/apps/core-apps-server-internal/src/assets/legacy_dark_theme.css rename to packages/core/apps/core-apps-server-internal/assets/legacy_dark_theme.css diff --git a/packages/core/apps/core-apps-server-internal/src/assets/legacy_dark_theme.min.css b/packages/core/apps/core-apps-server-internal/assets/legacy_dark_theme.min.css similarity index 100% rename from packages/core/apps/core-apps-server-internal/src/assets/legacy_dark_theme.min.css rename to packages/core/apps/core-apps-server-internal/assets/legacy_dark_theme.min.css diff --git a/packages/core/apps/core-apps-server-internal/src/assets/legacy_light_theme.css b/packages/core/apps/core-apps-server-internal/assets/legacy_light_theme.css similarity index 100% rename from packages/core/apps/core-apps-server-internal/src/assets/legacy_light_theme.css rename to packages/core/apps/core-apps-server-internal/assets/legacy_light_theme.css diff --git a/packages/core/apps/core-apps-server-internal/src/assets/legacy_light_theme.min.css b/packages/core/apps/core-apps-server-internal/assets/legacy_light_theme.min.css similarity index 100% rename from packages/core/apps/core-apps-server-internal/src/assets/legacy_light_theme.min.css rename to packages/core/apps/core-apps-server-internal/assets/legacy_light_theme.min.css diff --git a/packages/core/apps/core-apps-server-internal/src/core_app.ts b/packages/core/apps/core-apps-server-internal/src/core_app.ts index 97c9eadd757072..3e094fab889a6d 100644 --- a/packages/core/apps/core-apps-server-internal/src/core_app.ts +++ b/packages/core/apps/core-apps-server-internal/src/core_app.ts @@ -6,7 +6,6 @@ * Side Public License, v 1. */ -import Path from 'path'; import { stringify } from 'querystring'; import { Env } from '@kbn/config'; import { schema } from '@kbn/config-schema'; @@ -202,8 +201,13 @@ export class CoreAppsService { }); } + // After the package is built and bootstrap extracts files to bazel-bin, + // assets are exposed at the root of the package and in the package's node_modules dir private registerStaticDirs(core: InternalCoreSetup | InternalCorePreboot) { - core.http.registerStaticDir('/ui/{path*}', Path.resolve(__dirname, './assets')); + core.http.registerStaticDir( + '/ui/{path*}', + fromRoot('node_modules/@kbn/core-apps-server-internal/assets') + ); core.http.registerStaticDir( '/node_modules/@kbn/ui-framework/dist/{path*}', diff --git a/packages/kbn-chart-icons/kibana.jsonc b/packages/kbn-chart-icons/kibana.jsonc index 1d1de945c95de2..47e7394190fa7d 100644 --- a/packages/kbn-chart-icons/kibana.jsonc +++ b/packages/kbn-chart-icons/kibana.jsonc @@ -1,7 +1,7 @@ { "type": "shared-common", "id": "@kbn/chart-icons", - "owner": "@elastic/kibana-vis-editors", + "owner": "@elastic/kibana-visualizations", "runtimeDeps": [], "typeDeps": [] } diff --git a/packages/kbn-coloring/kibana.jsonc b/packages/kbn-coloring/kibana.jsonc index 0b1ff8a4492864..410698f3458091 100644 --- a/packages/kbn-coloring/kibana.jsonc +++ b/packages/kbn-coloring/kibana.jsonc @@ -1,7 +1,7 @@ { "type": "shared-common", "id": "@kbn/coloring", - "owner": "@elastic/kibana-vis-editors", + "owner": "@elastic/kibana-visualizations", "runtimeDeps": [], "typeDeps": [] } diff --git a/packages/kbn-journeys/journey/journey_ftr_config.ts b/packages/kbn-journeys/journey/journey_ftr_config.ts index b0d8e33ad01c00..49c45482cdfebf 100644 --- a/packages/kbn-journeys/journey/journey_ftr_config.ts +++ b/packages/kbn-journeys/journey/journey_ftr_config.ts @@ -117,6 +117,9 @@ export function makeFtrConfigProvider( journeyName: config.getName(), ftrConfig: config.getRepoRelPath(), performancePhase: process.env.TEST_PERFORMANCE_PHASE, + branch: process.env.BUILDKITE_BRANCH, + gitRev: process.env.BUILDKITE_COMMIT, + ciBuildName: process.env.BUILDKITE_PIPELINE_SLUG, }) .flatMap(([key, value]) => (value == null ? [] : `${key}=${value}`)) .join(','), diff --git a/packages/kbn-language-documentation-popover/kibana.jsonc b/packages/kbn-language-documentation-popover/kibana.jsonc index 1c03d32e93d672..45b3f21296bd4c 100644 --- a/packages/kbn-language-documentation-popover/kibana.jsonc +++ b/packages/kbn-language-documentation-popover/kibana.jsonc @@ -1,7 +1,7 @@ { "type": "shared-common", "id": "@kbn/language-documentation-popover", - "owner": "@elastic/kibana-vis-editors", + "owner": "@elastic/kibana-visualizations", "runtimeDeps": [], "typeDeps": [] } diff --git a/packages/kbn-timelion-grammar/kibana.jsonc b/packages/kbn-timelion-grammar/kibana.jsonc index 211d8483089c27..ec0f5079abb807 100644 --- a/packages/kbn-timelion-grammar/kibana.jsonc +++ b/packages/kbn-timelion-grammar/kibana.jsonc @@ -1,7 +1,7 @@ { "type": "shared-common", "id": "@kbn/timelion-grammar", - "owner": "@elastic/kibana-vis-editors", + "owner": "@elastic/kibana-visualizations", "runtimeDeps": [], "typeDeps": [] } diff --git a/packages/kbn-tinymath/kibana.jsonc b/packages/kbn-tinymath/kibana.jsonc index 6ebf2ac0c00ea6..3a26322d2394b9 100644 --- a/packages/kbn-tinymath/kibana.jsonc +++ b/packages/kbn-tinymath/kibana.jsonc @@ -1,7 +1,7 @@ { "type": "shared-common", "id": "@kbn/tinymath", - "owner": "@elastic/kibana-vis-editors", + "owner": "@elastic/kibana-visualizations", "runtimeDeps": [], "typeDeps": [] } diff --git a/renovate.json b/renovate.json index bdaf373932fa1e..9c0f4150b9c80d 100644 --- a/renovate.json +++ b/renovate.json @@ -25,9 +25,9 @@ { "groupName": "@elastic/charts", "matchPackageNames": ["@elastic/charts"], - "reviewers": ["team:datavis", "markov00", "nickofthyme"], + "reviewers": ["team:visualizations", "markov00", "nickofthyme"], "matchBaseBranches": ["main"], - "labels": ["release_note:skip", "backport:skip", "Team:DataVis"], + "labels": ["release_note:skip", "backport:skip", "Team:Visualizations"], "draftPR": true, "enabled": true, "assignAutomerge": true, @@ -97,9 +97,9 @@ { "groupName": "vega related modules", "matchPackageNames": ["vega", "vega-lite", "vega-schema-url-parser", "vega-tooltip"], - "reviewers": ["team:kibana-vis-editors"], + "reviewers": ["team:kibana-visualizations"], "matchBaseBranches": ["main"], - "labels": ["Feature:Vega", "Team:VisEditors"], + "labels": ["Feature:Vega", "Team:Visualizations"], "enabled": true }, { diff --git a/src/core/server/core_app/assets/favicons/favicon.distribution.ico b/src/core/server/core_app/assets/favicons/favicon.distribution.ico deleted file mode 100644 index b466b3b4f4eb3d..00000000000000 Binary files a/src/core/server/core_app/assets/favicons/favicon.distribution.ico and /dev/null differ diff --git a/src/core/server/core_app/assets/favicons/favicon.distribution.png b/src/core/server/core_app/assets/favicons/favicon.distribution.png deleted file mode 100644 index 9be046aba59b65..00000000000000 Binary files a/src/core/server/core_app/assets/favicons/favicon.distribution.png and /dev/null differ diff --git a/src/core/server/core_app/assets/favicons/favicon.distribution.svg b/src/core/server/core_app/assets/favicons/favicon.distribution.svg deleted file mode 100644 index 2d02461a0b8f96..00000000000000 --- a/src/core/server/core_app/assets/favicons/favicon.distribution.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/src/core/server/core_app/assets/favicons/favicon.ico b/src/core/server/core_app/assets/favicons/favicon.ico deleted file mode 100644 index 7ac743a2d1fe46..00000000000000 Binary files a/src/core/server/core_app/assets/favicons/favicon.ico and /dev/null differ diff --git a/src/core/server/core_app/assets/favicons/favicon.png b/src/core/server/core_app/assets/favicons/favicon.png deleted file mode 100644 index cba7a268c6c59e..00000000000000 Binary files a/src/core/server/core_app/assets/favicons/favicon.png and /dev/null differ diff --git a/src/core/server/core_app/assets/favicons/favicon.svg b/src/core/server/core_app/assets/favicons/favicon.svg deleted file mode 100644 index 4ae6524bf0d18c..00000000000000 --- a/src/core/server/core_app/assets/favicons/favicon.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/src/core/server/core_app/assets/legacy_light_theme.css b/src/core/server/core_app/assets/legacy_light_theme.css deleted file mode 100644 index c5c639f60e3be5..00000000000000 --- a/src/core/server/core_app/assets/legacy_light_theme.css +++ /dev/null @@ -1,4419 +0,0 @@ -/*! - * Bootstrap v3.3.6 (http://getbootstrap.com) - * Copyright 2011-2015 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - */ -/* @notice - * This product bundles bootstrap@3.3.6 which is available under a - * "MIT" license. - * - * The MIT License (MIT) - * - * Copyright (c) 2011-2015 Twitter, Inc - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -.container { - margin-right: auto; - margin-left: auto; - padding-left: 15px; - padding-right: 15px; -} -@media (min-width: 768px) { - .container { - width: 750px; - } -} -@media (min-width: 992px) { - .container { - width: 970px; - } -} -@media (min-width: 1200px) { - .container { - width: 1170px; - } -} -.container-fluid { - margin-right: auto; - margin-left: auto; - padding-left: 15px; - padding-right: 15px; -} -.row { - margin-left: -15px; - margin-right: -15px; -} -.col-xs-1, -.col-sm-1, -.col-md-1, -.col-lg-1, -.col-xs-2, -.col-sm-2, -.col-md-2, -.col-lg-2, -.col-xs-3, -.col-sm-3, -.col-md-3, -.col-lg-3, -.col-xs-4, -.col-sm-4, -.col-md-4, -.col-lg-4, -.col-xs-5, -.col-sm-5, -.col-md-5, -.col-lg-5, -.col-xs-6, -.col-sm-6, -.col-md-6, -.col-lg-6, -.col-xs-7, -.col-sm-7, -.col-md-7, -.col-lg-7, -.col-xs-8, -.col-sm-8, -.col-md-8, -.col-lg-8, -.col-xs-9, -.col-sm-9, -.col-md-9, -.col-lg-9, -.col-xs-10, -.col-sm-10, -.col-md-10, -.col-lg-10, -.col-xs-11, -.col-sm-11, -.col-md-11, -.col-lg-11, -.col-xs-12, -.col-sm-12, -.col-md-12, -.col-lg-12 { - position: relative; - min-height: 1px; - padding-left: 15px; - padding-right: 15px; -} -.col-xs-1, -.col-xs-2, -.col-xs-3, -.col-xs-4, -.col-xs-5, -.col-xs-6, -.col-xs-7, -.col-xs-8, -.col-xs-9, -.col-xs-10, -.col-xs-11, -.col-xs-12 { - float: left; -} -.col-xs-12 { - width: 100%; -} -.col-xs-11 { - width: 91.66666667%; -} -.col-xs-10 { - width: 83.33333333%; -} -.col-xs-9 { - width: 75%; -} -.col-xs-8 { - width: 66.66666667%; -} -.col-xs-7 { - width: 58.33333333%; -} -.col-xs-6 { - width: 50%; -} -.col-xs-5 { - width: 41.66666667%; -} -.col-xs-4 { - width: 33.33333333%; -} -.col-xs-3 { - width: 25%; -} -.col-xs-2 { - width: 16.66666667%; -} -.col-xs-1 { - width: 8.33333333%; -} -.col-xs-pull-12 { - right: 100%; -} -.col-xs-pull-11 { - right: 91.66666667%; -} -.col-xs-pull-10 { - right: 83.33333333%; -} -.col-xs-pull-9 { - right: 75%; -} -.col-xs-pull-8 { - right: 66.66666667%; -} -.col-xs-pull-7 { - right: 58.33333333%; -} -.col-xs-pull-6 { - right: 50%; -} -.col-xs-pull-5 { - right: 41.66666667%; -} -.col-xs-pull-4 { - right: 33.33333333%; -} -.col-xs-pull-3 { - right: 25%; -} -.col-xs-pull-2 { - right: 16.66666667%; -} -.col-xs-pull-1 { - right: 8.33333333%; -} -.col-xs-pull-0 { - right: auto; -} -.col-xs-push-12 { - left: 100%; -} -.col-xs-push-11 { - left: 91.66666667%; -} -.col-xs-push-10 { - left: 83.33333333%; -} -.col-xs-push-9 { - left: 75%; -} -.col-xs-push-8 { - left: 66.66666667%; -} -.col-xs-push-7 { - left: 58.33333333%; -} -.col-xs-push-6 { - left: 50%; -} -.col-xs-push-5 { - left: 41.66666667%; -} -.col-xs-push-4 { - left: 33.33333333%; -} -.col-xs-push-3 { - left: 25%; -} -.col-xs-push-2 { - left: 16.66666667%; -} -.col-xs-push-1 { - left: 8.33333333%; -} -.col-xs-push-0 { - left: auto; -} -.col-xs-offset-12 { - margin-left: 100%; -} -.col-xs-offset-11 { - margin-left: 91.66666667%; -} -.col-xs-offset-10 { - margin-left: 83.33333333%; -} -.col-xs-offset-9 { - margin-left: 75%; -} -.col-xs-offset-8 { - margin-left: 66.66666667%; -} -.col-xs-offset-7 { - margin-left: 58.33333333%; -} -.col-xs-offset-6 { - margin-left: 50%; -} -.col-xs-offset-5 { - margin-left: 41.66666667%; -} -.col-xs-offset-4 { - margin-left: 33.33333333%; -} -.col-xs-offset-3 { - margin-left: 25%; -} -.col-xs-offset-2 { - margin-left: 16.66666667%; -} -.col-xs-offset-1 { - margin-left: 8.33333333%; -} -.col-xs-offset-0 { - margin-left: 0%; -} -@media (min-width: 768px) { - .col-sm-1, - .col-sm-2, - .col-sm-3, - .col-sm-4, - .col-sm-5, - .col-sm-6, - .col-sm-7, - .col-sm-8, - .col-sm-9, - .col-sm-10, - .col-sm-11, - .col-sm-12 { - float: left; - } - .col-sm-12 { - width: 100%; - } - .col-sm-11 { - width: 91.66666667%; - } - .col-sm-10 { - width: 83.33333333%; - } - .col-sm-9 { - width: 75%; - } - .col-sm-8 { - width: 66.66666667%; - } - .col-sm-7 { - width: 58.33333333%; - } - .col-sm-6 { - width: 50%; - } - .col-sm-5 { - width: 41.66666667%; - } - .col-sm-4 { - width: 33.33333333%; - } - .col-sm-3 { - width: 25%; - } - .col-sm-2 { - width: 16.66666667%; - } - .col-sm-1 { - width: 8.33333333%; - } - .col-sm-pull-12 { - right: 100%; - } - .col-sm-pull-11 { - right: 91.66666667%; - } - .col-sm-pull-10 { - right: 83.33333333%; - } - .col-sm-pull-9 { - right: 75%; - } - .col-sm-pull-8 { - right: 66.66666667%; - } - .col-sm-pull-7 { - right: 58.33333333%; - } - .col-sm-pull-6 { - right: 50%; - } - .col-sm-pull-5 { - right: 41.66666667%; - } - .col-sm-pull-4 { - right: 33.33333333%; - } - .col-sm-pull-3 { - right: 25%; - } - .col-sm-pull-2 { - right: 16.66666667%; - } - .col-sm-pull-1 { - right: 8.33333333%; - } - .col-sm-pull-0 { - right: auto; - } - .col-sm-push-12 { - left: 100%; - } - .col-sm-push-11 { - left: 91.66666667%; - } - .col-sm-push-10 { - left: 83.33333333%; - } - .col-sm-push-9 { - left: 75%; - } - .col-sm-push-8 { - left: 66.66666667%; - } - .col-sm-push-7 { - left: 58.33333333%; - } - .col-sm-push-6 { - left: 50%; - } - .col-sm-push-5 { - left: 41.66666667%; - } - .col-sm-push-4 { - left: 33.33333333%; - } - .col-sm-push-3 { - left: 25%; - } - .col-sm-push-2 { - left: 16.66666667%; - } - .col-sm-push-1 { - left: 8.33333333%; - } - .col-sm-push-0 { - left: auto; - } - .col-sm-offset-12 { - margin-left: 100%; - } - .col-sm-offset-11 { - margin-left: 91.66666667%; - } - .col-sm-offset-10 { - margin-left: 83.33333333%; - } - .col-sm-offset-9 { - margin-left: 75%; - } - .col-sm-offset-8 { - margin-left: 66.66666667%; - } - .col-sm-offset-7 { - margin-left: 58.33333333%; - } - .col-sm-offset-6 { - margin-left: 50%; - } - .col-sm-offset-5 { - margin-left: 41.66666667%; - } - .col-sm-offset-4 { - margin-left: 33.33333333%; - } - .col-sm-offset-3 { - margin-left: 25%; - } - .col-sm-offset-2 { - margin-left: 16.66666667%; - } - .col-sm-offset-1 { - margin-left: 8.33333333%; - } - .col-sm-offset-0 { - margin-left: 0%; - } -} -@media (min-width: 992px) { - .col-md-1, - .col-md-2, - .col-md-3, - .col-md-4, - .col-md-5, - .col-md-6, - .col-md-7, - .col-md-8, - .col-md-9, - .col-md-10, - .col-md-11, - .col-md-12 { - float: left; - } - .col-md-12 { - width: 100%; - } - .col-md-11 { - width: 91.66666667%; - } - .col-md-10 { - width: 83.33333333%; - } - .col-md-9 { - width: 75%; - } - .col-md-8 { - width: 66.66666667%; - } - .col-md-7 { - width: 58.33333333%; - } - .col-md-6 { - width: 50%; - } - .col-md-5 { - width: 41.66666667%; - } - .col-md-4 { - width: 33.33333333%; - } - .col-md-3 { - width: 25%; - } - .col-md-2 { - width: 16.66666667%; - } - .col-md-1 { - width: 8.33333333%; - } - .col-md-pull-12 { - right: 100%; - } - .col-md-pull-11 { - right: 91.66666667%; - } - .col-md-pull-10 { - right: 83.33333333%; - } - .col-md-pull-9 { - right: 75%; - } - .col-md-pull-8 { - right: 66.66666667%; - } - .col-md-pull-7 { - right: 58.33333333%; - } - .col-md-pull-6 { - right: 50%; - } - .col-md-pull-5 { - right: 41.66666667%; - } - .col-md-pull-4 { - right: 33.33333333%; - } - .col-md-pull-3 { - right: 25%; - } - .col-md-pull-2 { - right: 16.66666667%; - } - .col-md-pull-1 { - right: 8.33333333%; - } - .col-md-pull-0 { - right: auto; - } - .col-md-push-12 { - left: 100%; - } - .col-md-push-11 { - left: 91.66666667%; - } - .col-md-push-10 { - left: 83.33333333%; - } - .col-md-push-9 { - left: 75%; - } - .col-md-push-8 { - left: 66.66666667%; - } - .col-md-push-7 { - left: 58.33333333%; - } - .col-md-push-6 { - left: 50%; - } - .col-md-push-5 { - left: 41.66666667%; - } - .col-md-push-4 { - left: 33.33333333%; - } - .col-md-push-3 { - left: 25%; - } - .col-md-push-2 { - left: 16.66666667%; - } - .col-md-push-1 { - left: 8.33333333%; - } - .col-md-push-0 { - left: auto; - } - .col-md-offset-12 { - margin-left: 100%; - } - .col-md-offset-11 { - margin-left: 91.66666667%; - } - .col-md-offset-10 { - margin-left: 83.33333333%; - } - .col-md-offset-9 { - margin-left: 75%; - } - .col-md-offset-8 { - margin-left: 66.66666667%; - } - .col-md-offset-7 { - margin-left: 58.33333333%; - } - .col-md-offset-6 { - margin-left: 50%; - } - .col-md-offset-5 { - margin-left: 41.66666667%; - } - .col-md-offset-4 { - margin-left: 33.33333333%; - } - .col-md-offset-3 { - margin-left: 25%; - } - .col-md-offset-2 { - margin-left: 16.66666667%; - } - .col-md-offset-1 { - margin-left: 8.33333333%; - } - .col-md-offset-0 { - margin-left: 0%; - } -} -@media (min-width: 1200px) { - .col-lg-1, - .col-lg-2, - .col-lg-3, - .col-lg-4, - .col-lg-5, - .col-lg-6, - .col-lg-7, - .col-lg-8, - .col-lg-9, - .col-lg-10, - .col-lg-11, - .col-lg-12 { - float: left; - } - .col-lg-12 { - width: 100%; - } - .col-lg-11 { - width: 91.66666667%; - } - .col-lg-10 { - width: 83.33333333%; - } - .col-lg-9 { - width: 75%; - } - .col-lg-8 { - width: 66.66666667%; - } - .col-lg-7 { - width: 58.33333333%; - } - .col-lg-6 { - width: 50%; - } - .col-lg-5 { - width: 41.66666667%; - } - .col-lg-4 { - width: 33.33333333%; - } - .col-lg-3 { - width: 25%; - } - .col-lg-2 { - width: 16.66666667%; - } - .col-lg-1 { - width: 8.33333333%; - } - .col-lg-pull-12 { - right: 100%; - } - .col-lg-pull-11 { - right: 91.66666667%; - } - .col-lg-pull-10 { - right: 83.33333333%; - } - .col-lg-pull-9 { - right: 75%; - } - .col-lg-pull-8 { - right: 66.66666667%; - } - .col-lg-pull-7 { - right: 58.33333333%; - } - .col-lg-pull-6 { - right: 50%; - } - .col-lg-pull-5 { - right: 41.66666667%; - } - .col-lg-pull-4 { - right: 33.33333333%; - } - .col-lg-pull-3 { - right: 25%; - } - .col-lg-pull-2 { - right: 16.66666667%; - } - .col-lg-pull-1 { - right: 8.33333333%; - } - .col-lg-pull-0 { - right: auto; - } - .col-lg-push-12 { - left: 100%; - } - .col-lg-push-11 { - left: 91.66666667%; - } - .col-lg-push-10 { - left: 83.33333333%; - } - .col-lg-push-9 { - left: 75%; - } - .col-lg-push-8 { - left: 66.66666667%; - } - .col-lg-push-7 { - left: 58.33333333%; - } - .col-lg-push-6 { - left: 50%; - } - .col-lg-push-5 { - left: 41.66666667%; - } - .col-lg-push-4 { - left: 33.33333333%; - } - .col-lg-push-3 { - left: 25%; - } - .col-lg-push-2 { - left: 16.66666667%; - } - .col-lg-push-1 { - left: 8.33333333%; - } - .col-lg-push-0 { - left: auto; - } - .col-lg-offset-12 { - margin-left: 100%; - } - .col-lg-offset-11 { - margin-left: 91.66666667%; - } - .col-lg-offset-10 { - margin-left: 83.33333333%; - } - .col-lg-offset-9 { - margin-left: 75%; - } - .col-lg-offset-8 { - margin-left: 66.66666667%; - } - .col-lg-offset-7 { - margin-left: 58.33333333%; - } - .col-lg-offset-6 { - margin-left: 50%; - } - .col-lg-offset-5 { - margin-left: 41.66666667%; - } - .col-lg-offset-4 { - margin-left: 33.33333333%; - } - .col-lg-offset-3 { - margin-left: 25%; - } - .col-lg-offset-2 { - margin-left: 16.66666667%; - } - .col-lg-offset-1 { - margin-left: 8.33333333%; - } - .col-lg-offset-0 { - margin-left: 0%; - } -} -.table { - width: 100%; - max-width: 100%; - margin-bottom: 20px; - font-size: 14px; -} -.table thead { - font-size: 12px; -} -.table > thead > tr > th, -.table > tbody > tr > th, -.table > tfoot > tr > th, -.table > thead > tr > td, -.table > tbody > tr > td, -.table > tfoot > tr > td { - padding: 8px; - line-height: 1.42857143; - vertical-align: top; - border-top: 1px solid #D3DAE6; -} -.table > thead > tr > th { - vertical-align: bottom; - border-bottom: 1px solid #D3DAE6; -} -.table > caption + thead > tr:first-child > th, -.table > colgroup + thead > tr:first-child > th, -.table > thead:first-child > tr:first-child > th, -.table > caption + thead > tr:first-child > td, -.table > colgroup + thead > tr:first-child > td, -.table > thead:first-child > tr:first-child > td { - border-top: 0; -} -.table > tbody + tbody { - border-top: 2px solid #D3DAE6; -} -.table .table { - background-color: #FFF; -} -.table-condensed > thead > tr > th, -.table-condensed > tbody > tr > th, -.table-condensed > tfoot > tr > th, -.table-condensed > thead > tr > td, -.table-condensed > tbody > tr > td, -.table-condensed > tfoot > tr > td { - padding: 5px; - font-size: 12px; -} -.table-bordered { - border: 1px solid #D3DAE6; -} -.table-bordered > thead > tr > th, -.table-bordered > tbody > tr > th, -.table-bordered > tfoot > tr > th, -.table-bordered > thead > tr > td, -.table-bordered > tbody > tr > td, -.table-bordered > tfoot > tr > td { - border: 1px solid #D3DAE6; -} -.table-bordered > thead > tr > th, -.table-bordered > thead > tr > td { - border-bottom-width: 2px; -} -.table-striped > tbody > tr:nth-of-type(odd) { - background-color: #D3DAE6; -} -.table-hover > tbody > tr:hover { - background-color: #D3DAE6; -} -table col[class*="col-"] { - position: static; - float: none; - display: table-column; -} -table td[class*="col-"], -table th[class*="col-"] { - position: static; - float: none; - display: table-cell; -} -.table > thead > tr > td.active, -.table > tbody > tr > td.active, -.table > tfoot > tr > td.active, -.table > thead > tr > th.active, -.table > tbody > tr > th.active, -.table > tfoot > tr > th.active, -.table > thead > tr.active > td, -.table > tbody > tr.active > td, -.table > tfoot > tr.active > td, -.table > thead > tr.active > th, -.table > tbody > tr.active > th, -.table > tfoot > tr.active > th { - background-color: #D3DAE6; -} -.table-hover > tbody > tr > td.active:hover, -.table-hover > tbody > tr > th.active:hover, -.table-hover > tbody > tr.active:hover > td, -.table-hover > tbody > tr:hover > .active, -.table-hover > tbody > tr.active:hover > th { - background-color: #c3ccdd; -} -.table > thead > tr > td.success, -.table > tbody > tr > td.success, -.table > tfoot > tr > td.success, -.table > thead > tr > th.success, -.table > tbody > tr > th.success, -.table > tfoot > tr > th.success, -.table > thead > tr.success > td, -.table > tbody > tr.success > td, -.table > tfoot > tr.success > td, -.table > thead > tr.success > th, -.table > tbody > tr.success > th, -.table > tfoot > tr.success > th { - background-color: #017D73; -} -.table-hover > tbody > tr > td.success:hover, -.table-hover > tbody > tr > th.success:hover, -.table-hover > tbody > tr.success:hover > td, -.table-hover > tbody > tr:hover > .success, -.table-hover > tbody > tr.success:hover > th { - background-color: #01645c; -} -.table > thead > tr > td.info, -.table > tbody > tr > td.info, -.table > tfoot > tr > td.info, -.table > thead > tr > th.info, -.table > tbody > tr > th.info, -.table > tfoot > tr > th.info, -.table > thead > tr.info > td, -.table > tbody > tr.info > td, -.table > tfoot > tr.info > td, -.table > thead > tr.info > th, -.table > tbody > tr.info > th, -.table > tfoot > tr.info > th { - background-color: #006BB4; -} -.table-hover > tbody > tr > td.info:hover, -.table-hover > tbody > tr > th.info:hover, -.table-hover > tbody > tr.info:hover > td, -.table-hover > tbody > tr:hover > .info, -.table-hover > tbody > tr.info:hover > th { - background-color: #005c9b; -} -.table > thead > tr > td.warning, -.table > tbody > tr > td.warning, -.table > tfoot > tr > td.warning, -.table > thead > tr > th.warning, -.table > tbody > tr > th.warning, -.table > tfoot > tr > th.warning, -.table > thead > tr.warning > td, -.table > tbody > tr.warning > td, -.table > tfoot > tr.warning > td, -.table > thead > tr.warning > th, -.table > tbody > tr.warning > th, -.table > tfoot > tr.warning > th { - background-color: #F5A700; -} -.table-hover > tbody > tr > td.warning:hover, -.table-hover > tbody > tr > th.warning:hover, -.table-hover > tbody > tr.warning:hover > td, -.table-hover > tbody > tr:hover > .warning, -.table-hover > tbody > tr.warning:hover > th { - background-color: #dc9600; -} -.table > thead > tr > td.danger, -.table > tbody > tr > td.danger, -.table > tfoot > tr > td.danger, -.table > thead > tr > th.danger, -.table > tbody > tr > th.danger, -.table > tfoot > tr > th.danger, -.table > thead > tr.danger > td, -.table > tbody > tr.danger > td, -.table > tfoot > tr.danger > td, -.table > thead > tr.danger > th, -.table > tbody > tr.danger > th, -.table > tfoot > tr.danger > th { - background-color: #BD271E; -} -.table-hover > tbody > tr > td.danger:hover, -.table-hover > tbody > tr > th.danger:hover, -.table-hover > tbody > tr.danger:hover > td, -.table-hover > tbody > tr:hover > .danger, -.table-hover > tbody > tr.danger:hover > th { - background-color: #a7221b; -} -.table-responsive { - overflow-x: auto; - min-height: 0.01%; -} -@media screen and (max-width: 767px) { - .table-responsive { - width: 100%; - margin-bottom: 15px; - overflow-y: hidden; - -ms-overflow-style: -ms-autohiding-scrollbar; - border: 1px solid #D3DAE6; - } - .table-responsive > .table { - margin-bottom: 0; - } - .table-responsive > .table > thead > tr > th, - .table-responsive > .table > tbody > tr > th, - .table-responsive > .table > tfoot > tr > th, - .table-responsive > .table > thead > tr > td, - .table-responsive > .table > tbody > tr > td, - .table-responsive > .table > tfoot > tr > td { - white-space: nowrap; - } - .table-responsive > .table-bordered { - border: 0; - } - .table-responsive > .table-bordered > thead > tr > th:first-child, - .table-responsive > .table-bordered > tbody > tr > th:first-child, - .table-responsive > .table-bordered > tfoot > tr > th:first-child, - .table-responsive > .table-bordered > thead > tr > td:first-child, - .table-responsive > .table-bordered > tbody > tr > td:first-child, - .table-responsive > .table-bordered > tfoot > tr > td:first-child { - border-left: 0; - } - .table-responsive > .table-bordered > thead > tr > th:last-child, - .table-responsive > .table-bordered > tbody > tr > th:last-child, - .table-responsive > .table-bordered > tfoot > tr > th:last-child, - .table-responsive > .table-bordered > thead > tr > td:last-child, - .table-responsive > .table-bordered > tbody > tr > td:last-child, - .table-responsive > .table-bordered > tfoot > tr > td:last-child { - border-right: 0; - } - .table-responsive > .table-bordered > tbody > tr:last-child > th, - .table-responsive > .table-bordered > tfoot > tr:last-child > th, - .table-responsive > .table-bordered > tbody > tr:last-child > td, - .table-responsive > .table-bordered > tfoot > tr:last-child > td { - border-bottom: 0; - } -} -.form-control { - display: block; - width: 100%; - height: 32px; - padding: 5px 15px; - font-size: 14px; - line-height: 1.42857143; - color: #343741; - background-color: #fafbfd; - background-image: none; - border: 1px solid #D3DAE6; - border-radius: 4px; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; - -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; - transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; -} -.form-control:focus { - border-color: #006BB4; - outline: 0; - -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(0, 107, 180, 0.6); - box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(0, 107, 180, 0.6); -} -.form-control::-moz-placeholder { - color: #98A2B3; - opacity: 1; -} -.form-control:-ms-input-placeholder { - color: #98A2B3; -} -.form-control::-webkit-input-placeholder { - color: #98A2B3; -} -.form-control::-ms-expand { - border: 0; - background-color: transparent; -} -.form-control[disabled], -.form-control[readonly], -fieldset[disabled] .form-control { - background-color: #D3DAE6; - opacity: 1; -} -.form-control[disabled], -fieldset[disabled] .form-control { - cursor: not-allowed; -} -textarea.form-control { - height: auto; -} -.form-group:not(:empty) { - margin-bottom: 15px; -} -.radio, -.checkbox { - position: relative; - display: block; - margin-top: 10px; - margin-bottom: 10px; -} -.radio label, -.checkbox label { - min-height: 20px; - padding-left: 20px; - margin-bottom: 0; - font-weight: normal; - cursor: pointer; -} -.radio input[type="radio"], -.radio-inline input[type="radio"], -.checkbox input[type="checkbox"], -.checkbox-inline input[type="checkbox"] { - position: absolute; - margin-left: -20px; - margin-top: 4px \9; -} -.radio + .radio, -.checkbox + .checkbox { - margin-top: -5px; -} -.radio-inline, -.checkbox-inline { - position: relative; - display: inline-block; - padding-left: 20px; - margin-bottom: 0; - vertical-align: middle; - font-weight: normal; - cursor: pointer; -} -.radio-inline + .radio-inline, -.checkbox-inline + .checkbox-inline { - margin-top: 0; - margin-left: 10px; -} -.radio-inline.disabled, -.checkbox-inline.disabled, -fieldset[disabled] .radio-inline, -fieldset[disabled] .checkbox-inline { - cursor: not-allowed; -} -.radio.disabled label, -.checkbox.disabled label, -fieldset[disabled] .radio label, -fieldset[disabled] .checkbox label { - cursor: not-allowed; -} -.form-control-static { - padding-top: 6px; - padding-bottom: 6px; - margin-bottom: 0; - min-height: 34px; -} -.form-control-static.input-lg, -.form-control-static.input-sm { - padding-left: 0; - padding-right: 0; -} -.input-sm { - height: 32px; - padding: 6px 9px; - font-size: 12px; - line-height: 1.5; - border-radius: 4px; -} -select.input-sm { - height: 32px; - line-height: 32px; -} -textarea.input-sm, -select[multiple].input-sm { - height: auto; -} -.form-group-sm .form-control { - height: 32px; - padding: 6px 9px; - font-size: 12px; - line-height: 1.5; - border-radius: 4px; -} -.form-group-sm select.form-control { - height: 32px; - line-height: 32px; -} -.form-group-sm textarea.form-control, -.form-group-sm select[multiple].form-control { - height: auto; -} -.form-group-sm .form-control-static { - height: 32px; - min-height: 32px; - padding: 7px 9px; - font-size: 12px; - line-height: 1.5; -} -.input-lg { - height: 62px; - padding: 18px 27px; - font-size: 18px; - line-height: 1.3333333; - border-radius: 4px; -} -select.input-lg { - height: 62px; - line-height: 62px; -} -textarea.input-lg, -select[multiple].input-lg { - height: auto; -} -.form-group-lg .form-control { - height: 62px; - padding: 18px 27px; - font-size: 18px; - line-height: 1.3333333; - border-radius: 4px; -} -.form-group-lg select.form-control { - height: 62px; - line-height: 62px; -} -.form-group-lg textarea.form-control, -.form-group-lg select[multiple].form-control { - height: auto; -} -.form-group-lg .form-control-static { - height: 62px; - min-height: 38px; - padding: 19px 27px; - font-size: 18px; - line-height: 1.3333333; -} -.has-feedback { - position: relative; -} -.has-feedback .form-control { - padding-right: 40px; -} -.form-control-feedback { - position: absolute; - top: 0; - right: 0; - z-index: 2; - display: block; - width: 32px; - height: 32px; - line-height: 32px; - text-align: center; - pointer-events: none; -} -.input-lg + .form-control-feedback, -.input-group-lg + .form-control-feedback, -.form-group-lg .form-control + .form-control-feedback { - width: 62px; - height: 62px; - line-height: 62px; -} -.input-sm + .form-control-feedback, -.input-group-sm + .form-control-feedback, -.form-group-sm .form-control + .form-control-feedback { - width: 32px; - height: 32px; - line-height: 32px; -} -.has-success .help-block, -.has-success .control-label, -.has-success .radio, -.has-success .checkbox, -.has-success .radio-inline, -.has-success .checkbox-inline, -.has-success.radio label, -.has-success.checkbox label, -.has-success.radio-inline label, -.has-success.checkbox-inline label { - color: #FFF; -} -.has-success .form-control { - border-color: #FFF; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} -.has-success .form-control:focus { - border-color: #e6e6e6; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffffff; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffffff; -} -.has-success .input-group-addon { - color: #FFF; - border-color: #FFF; - background-color: #017D73; -} -.has-success .form-control-feedback { - color: #FFF; -} -.has-warning .help-block, -.has-warning .control-label, -.has-warning .radio, -.has-warning .checkbox, -.has-warning .radio-inline, -.has-warning .checkbox-inline, -.has-warning.radio label, -.has-warning.checkbox label, -.has-warning.radio-inline label, -.has-warning.checkbox-inline label { - color: #FFF; -} -.has-warning .form-control { - border-color: #FFF; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} -.has-warning .form-control:focus { - border-color: #e6e6e6; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffffff; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffffff; -} -.has-warning .input-group-addon { - color: #FFF; - border-color: #FFF; - background-color: #F5A700; -} -.has-warning .form-control-feedback { - color: #FFF; -} -.has-error .help-block, -.has-error .control-label, -.has-error .radio, -.has-error .checkbox, -.has-error .radio-inline, -.has-error .checkbox-inline, -.has-error.radio label, -.has-error.checkbox label, -.has-error.radio-inline label, -.has-error.checkbox-inline label { - color: #FFF; -} -.has-error .form-control { - border-color: #FFF; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} -.has-error .form-control:focus { - border-color: #e6e6e6; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffffff; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffffff; -} -.has-error .input-group-addon { - color: #FFF; - border-color: #FFF; - background-color: #BD271E; -} -.has-error .form-control-feedback { - color: #FFF; -} -.has-feedback label ~ .form-control-feedback { - top: 25px; -} -.has-feedback label.sr-only ~ .form-control-feedback { - top: 0; -} -.help-block { - display: block; - margin-top: 5px; - margin-bottom: 10px; - color: #6d7388; -} -@media (min-width: 768px) { - .form-inline .form-group { - display: inline-block; - margin-bottom: 0; - vertical-align: middle; - } - .form-inline .form-control { - display: inline-block; - width: auto; - vertical-align: middle; - } - .form-inline .form-control-static { - display: inline-block; - } - .form-inline .input-group { - display: inline-table; - vertical-align: middle; - } - .form-inline .input-group .input-group-addon, - .form-inline .input-group .form-control { - width: auto; - } - .form-inline .input-group > .form-control { - width: 100%; - } - .form-inline .control-label { - margin-bottom: 0; - vertical-align: middle; - } - .form-inline .radio, - .form-inline .checkbox { - display: inline-block; - margin-top: 0; - margin-bottom: 0; - vertical-align: middle; - } - .form-inline .radio label, - .form-inline .checkbox label { - padding-left: 0; - } - .form-inline .radio input[type="radio"], - .form-inline .checkbox input[type="checkbox"] { - position: relative; - margin-left: 0; - } - .form-inline .has-feedback .form-control-feedback { - top: 0; - } -} -.form-horizontal .radio, -.form-horizontal .checkbox, -.form-horizontal .radio-inline, -.form-horizontal .checkbox-inline { - margin-top: 0; - margin-bottom: 0; - padding-top: 6px; -} -.form-horizontal .radio, -.form-horizontal .checkbox { - min-height: 26px; -} -.form-horizontal .form-group { - margin-left: -15px; - margin-right: -15px; -} -@media (min-width: 768px) { - .form-horizontal .control-label { - text-align: right; - margin-bottom: 0; - padding-top: 6px; - } -} -.form-horizontal .has-feedback .form-control-feedback { - right: 15px; -} -@media (min-width: 768px) { - .form-horizontal .form-group-lg .control-label { - padding-top: 19px; - font-size: 18px; - } -} -@media (min-width: 768px) { - .form-horizontal .form-group-sm .control-label { - padding-top: 7px; - font-size: 12px; - } -} -.text-left { - text-align: left; -} -.text-right { - text-align: right; -} -.text-center { - text-align: center; -} -.text-muted { - color: #b2bac6; -} -.text-primary { - color: #343741; -} -a.text-primary:hover, -a.text-primary:focus { - color: #1d1f25; -} -.text-success { - color: #FFF; -} -a.text-success:hover, -a.text-success:focus { - color: #e6e6e6; -} -.text-info { - color: #FFF; -} -a.text-info:hover, -a.text-info:focus { - color: #e6e6e6; -} -.text-warning { - color: #FFF; -} -a.text-warning:hover, -a.text-warning:focus { - color: #e6e6e6; -} -.text-danger { - color: #FFF; -} -a.text-danger:hover, -a.text-danger:focus { - color: #e6e6e6; -} -.bg-info { - background-color: #006BB4; -} -a.bg-info:hover, -a.bg-info:focus { - background-color: #004d81; -} -.list-unstyled { - padding-left: 0; - list-style: none; -} -@media (min-width: 0) { - .dl-horizontal dt { - float: left; - width: 160px; - clear: left; - text-align: right; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - } - .dl-horizontal dd { - margin-left: 180px; - } -} -.fade { - opacity: 0; - -webkit-transition: opacity 0.15s linear; - -o-transition: opacity 0.15s linear; - transition: opacity 0.15s linear; -} -.fade.in { - opacity: 1; -} -.collapse { - display: none; -} -.collapse.in { - display: block; -} -tr.collapse.in { - display: table-row; -} -tbody.collapse.in { - display: table-row-group; -} -.collapsing { - position: relative; - height: 0; - overflow: hidden; - -webkit-transition-property: height, visibility; - transition-property: height, visibility; - -webkit-transition-duration: 0.35s; - transition-duration: 0.35s; - -webkit-transition-timing-function: ease; - transition-timing-function: ease; -} -/** - * ui/angular-ui-select depends upon these styles. Don't use them in your markup. - * Please use the UI Framework styles instead. - */ -.btn { - display: inline-block; - margin-bottom: 0; - font-weight: normal; - text-align: center; - vertical-align: middle; - touch-action: manipulation; - cursor: pointer; - background-image: none; - border: 1px solid transparent; - white-space: nowrap; - padding: 5px 15px; - font-size: 14px; - line-height: 1.42857143; - border-radius: 4px; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} -.btn:focus, -.btn:active:focus, -.btn.active:focus, -.btn.focus, -.btn:active.focus, -.btn.active.focus { - box-shadow: 0 0 0 1px white, 0 0 0 2px #0079a5; - /* 3 */ -} -.btn:hover, -.btn:focus, -.btn.focus { - color: #FFF; - text-decoration: none; -} -.btn:active, -.btn.active { - outline: 0; - background-image: none; - -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); - box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); -} -.btn.disabled, -.btn[disabled], -fieldset[disabled] .btn { - cursor: not-allowed; - opacity: 0.65; - filter: alpha(opacity=65); - -webkit-box-shadow: none; - box-shadow: none; -} -a.btn.disabled, -fieldset[disabled] a.btn { - pointer-events: none; -} -.btn-default { - color: #FFF; - background-color: #006BB4; - border-color: #006BB4; -} -.btn-default:focus, -.btn-default.focus { - color: #FFF; - background-color: #004d81; - border-color: #001f35; -} -.btn-default:hover { - color: #FFF; - background-color: #004d81; - border-color: #004777; -} -.btn-default:active, -.btn-default.active, -.open > .dropdown-toggle.btn-default { - color: #FFF; - background-color: #004d81; - border-color: #004777; -} -.btn-default:active:hover, -.btn-default.active:hover, -.open > .dropdown-toggle.btn-default:hover, -.btn-default:active:focus, -.btn-default.active:focus, -.open > .dropdown-toggle.btn-default:focus, -.btn-default:active.focus, -.btn-default.active.focus, -.open > .dropdown-toggle.btn-default.focus { - color: #FFF; - background-color: #00375d; - border-color: #001f35; -} -.btn-default:active, -.btn-default.active, -.open > .dropdown-toggle.btn-default { - background-image: none; -} -.btn-default.disabled:hover, -.btn-default[disabled]:hover, -fieldset[disabled] .btn-default:hover, -.btn-default.disabled:focus, -.btn-default[disabled]:focus, -fieldset[disabled] .btn-default:focus, -.btn-default.disabled.focus, -.btn-default[disabled].focus, -fieldset[disabled] .btn-default.focus { - background-color: #006BB4; - border-color: #006BB4; -} -.btn-default .badge { - color: #006BB4; - background-color: #FFF; -} -.btn-primary { - color: #FFF; - background-color: #006BB4; - border-color: #006BB4; -} -.btn-primary:focus, -.btn-primary.focus { - color: #FFF; - background-color: #004d81; - border-color: #001f35; -} -.btn-primary:hover { - color: #FFF; - background-color: #004d81; - border-color: #004777; -} -.btn-primary:active, -.btn-primary.active, -.open > .dropdown-toggle.btn-primary { - color: #FFF; - background-color: #004d81; - border-color: #004777; -} -.btn-primary:active:hover, -.btn-primary.active:hover, -.open > .dropdown-toggle.btn-primary:hover, -.btn-primary:active:focus, -.btn-primary.active:focus, -.open > .dropdown-toggle.btn-primary:focus, -.btn-primary:active.focus, -.btn-primary.active.focus, -.open > .dropdown-toggle.btn-primary.focus { - color: #FFF; - background-color: #00375d; - border-color: #001f35; -} -.btn-primary:active, -.btn-primary.active, -.open > .dropdown-toggle.btn-primary { - background-image: none; -} -.btn-primary.disabled:hover, -.btn-primary[disabled]:hover, -fieldset[disabled] .btn-primary:hover, -.btn-primary.disabled:focus, -.btn-primary[disabled]:focus, -fieldset[disabled] .btn-primary:focus, -.btn-primary.disabled.focus, -.btn-primary[disabled].focus, -fieldset[disabled] .btn-primary.focus { - background-color: #006BB4; - border-color: #006BB4; -} -.btn-primary .badge { - color: #006BB4; - background-color: #FFF; -} -.btn-xs { - padding: 1px 5px; - font-size: 12px; - line-height: 1.5; - border-radius: 4px; -} -.navbar { - position: relative; - min-height: 45px; - margin-bottom: 0px; - border: 1px solid transparent; -} -@media (min-width: 0) { - .navbar { - border-radius: 4px; - } -} -@media (min-width: 0) { - .navbar-header { - float: left; - } -} -.navbar-collapse { - overflow-x: visible; - padding-right: 10px; - padding-left: 10px; - border-top: 1px solid transparent; - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1); - -webkit-overflow-scrolling: touch; -} -.navbar-collapse.in { - overflow-y: auto; -} -@media (min-width: 0) { - .navbar-collapse { - width: auto; - border-top: 0; - box-shadow: none; - } - .navbar-collapse.collapse { - display: block !important; - height: auto !important; - padding-bottom: 0; - overflow: visible !important; - } - .navbar-collapse.in { - overflow-y: visible; - } - .navbar-fixed-top .navbar-collapse, - .navbar-fixed-bottom .navbar-collapse { - padding-left: 0; - padding-right: 0; - } -} -.navbar-fixed-top .navbar-collapse, -.navbar-fixed-bottom .navbar-collapse { - max-height: 340px; -} -@media (max-device-width: 480px) and (orientation: landscape) { - .navbar-fixed-top .navbar-collapse, - .navbar-fixed-bottom .navbar-collapse { - max-height: 200px; - } -} -.container > .navbar-header, -.container-fluid > .navbar-header, -.container > .navbar-collapse, -.container-fluid > .navbar-collapse { - margin-right: -10px; - margin-left: -10px; -} -@media (min-width: 0) { - .container > .navbar-header, - .container-fluid > .navbar-header, - .container > .navbar-collapse, - .container-fluid > .navbar-collapse { - margin-right: 0; - margin-left: 0; - } -} -.navbar-fixed-top, -.navbar-fixed-bottom { - position: fixed; - right: 0; - left: 0; - z-index: 1050; -} -@media (min-width: 0) { - .navbar-fixed-top, - .navbar-fixed-bottom { - border-radius: 0; - } -} -.navbar-fixed-top { - top: 0; - border-width: 0 0 1px; -} -.navbar-fixed-bottom { - bottom: 0; - margin-bottom: 0; - border-width: 1px 0 0; -} -.navbar-brand { - float: left; - padding: 12.5px 10px; - font-size: 18px; - line-height: 20px; - height: 45px; -} -.navbar-brand:hover, -.navbar-brand:focus { - text-decoration: none; -} -.navbar-brand > img { - display: block; -} -@media (min-width: 0) { - .navbar > .container .navbar-brand, - .navbar > .container-fluid .navbar-brand { - margin-left: -10px; - } -} -.navbar-toggle { - position: relative; - float: right; - margin-right: 10px; - padding: 9px 10px; - margin-top: 5.5px; - margin-bottom: 5.5px; - background-color: transparent; - background-image: none; - border: 1px solid transparent; - border-radius: 4px; -} -.navbar-toggle:focus { - outline: 0; -} -.navbar-toggle .icon-bar { - display: block; - width: 22px; - height: 2px; - border-radius: 1px; -} -.navbar-toggle .icon-bar + .icon-bar { - margin-top: 4px; -} -@media (min-width: 0) { - .navbar-toggle { - display: none; - } -} -.navbar-nav { - margin: 6.25px -10px; -} -.navbar-nav > li > a { - padding-top: 10px; - padding-bottom: 10px; - line-height: 20px; -} -@media (max-width: -1) { - .navbar-nav .open .dropdown-menu { - position: static; - float: none; - width: auto; - margin-top: 0; - background-color: transparent; - border: 0; - box-shadow: none; - } - .navbar-nav .open .dropdown-menu > li > a, - .navbar-nav .open .dropdown-menu .dropdown-header { - padding: 5px 15px 5px 25px; - } - .navbar-nav .open .dropdown-menu > li > a { - line-height: 20px; - } - .navbar-nav .open .dropdown-menu > li > a:hover, - .navbar-nav .open .dropdown-menu > li > a:focus { - background-image: none; - } -} -@media (min-width: 0) { - .navbar-nav { - float: left; - margin: 0; - } - .navbar-nav > li { - float: left; - } - .navbar-nav > li > a { - padding-top: 12.5px; - padding-bottom: 12.5px; - } -} -.navbar-form { - margin-left: -10px; - margin-right: -10px; - padding: 10px 10px; - border-top: 1px solid transparent; - border-bottom: 1px solid transparent; - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); - margin-top: 6.5px; - margin-bottom: 6.5px; -} -@media (min-width: 768px) { - .navbar-form .form-group { - display: inline-block; - margin-bottom: 0; - vertical-align: middle; - } - .navbar-form .form-control { - display: inline-block; - width: auto; - vertical-align: middle; - } - .navbar-form .form-control-static { - display: inline-block; - } - .navbar-form .input-group { - display: inline-table; - vertical-align: middle; - } - .navbar-form .input-group .input-group-addon, - .navbar-form .input-group .form-control { - width: auto; - } - .navbar-form .input-group > .form-control { - width: 100%; - } - .navbar-form .control-label { - margin-bottom: 0; - vertical-align: middle; - } - .navbar-form .radio, - .navbar-form .checkbox { - display: inline-block; - margin-top: 0; - margin-bottom: 0; - vertical-align: middle; - } - .navbar-form .radio label, - .navbar-form .checkbox label { - padding-left: 0; - } - .navbar-form .radio input[type="radio"], - .navbar-form .checkbox input[type="checkbox"] { - position: relative; - margin-left: 0; - } - .navbar-form .has-feedback .form-control-feedback { - top: 0; - } -} -@media (max-width: -1) { - .navbar-form .form-group { - margin-bottom: 5px; - } - .navbar-form .form-group:last-child { - margin-bottom: 0; - } -} -@media (min-width: 0) { - .navbar-form { - width: auto; - border: 0; - margin-left: 0; - margin-right: 0; - padding-top: 0; - padding-bottom: 0; - -webkit-box-shadow: none; - box-shadow: none; - } -} -.navbar-nav > li > .dropdown-menu { - margin-top: 0; - border-top-right-radius: 0; - border-top-left-radius: 0; -} -.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu { - margin-bottom: 0; - border-top-right-radius: 4px; - border-top-left-radius: 4px; - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; -} -.navbar-text { - margin-top: 12.5px; - margin-bottom: 12.5px; -} -@media (min-width: 0) { - .navbar-text { - float: left; - margin-left: 10px; - margin-right: 10px; - } -} -@media (min-width: 0) { - .navbar-left { - float: left !important; - } - .navbar-right { - float: right !important; - margin-right: -10px; - } - .navbar-right ~ .navbar-right { - margin-right: 0; - } -} -.navbar-default { - background-color: #F5F7FA; - border-color: transparent; -} -.navbar-default .navbar-brand { - color: #69707D; -} -.navbar-default .navbar-brand:hover, -.navbar-default .navbar-brand:focus { - color: #69707D; - background-color: transparent; -} -.navbar-default .navbar-text { - color: #69707D; -} -.navbar-default .navbar-nav > li > a { - color: #69707D; -} -.navbar-default .navbar-nav > li > a:hover, -.navbar-default .navbar-nav > li > a:focus { - color: #69707D; - background-color: transparent; -} -.navbar-default .navbar-nav > .active > a, -.navbar-default .navbar-nav > .active > a:hover, -.navbar-default .navbar-nav > .active > a:focus { - color: #343741; - background-color: transparent; -} -.navbar-default .navbar-nav > .disabled > a, -.navbar-default .navbar-nav > .disabled > a:hover, -.navbar-default .navbar-nav > .disabled > a:focus { - color: #69707D; - background-color: transparent; -} -.navbar-default .navbar-toggle { - border-color: #d3dce9; -} -.navbar-default .navbar-toggle:hover, -.navbar-default .navbar-toggle:focus { - background-color: #d3dce9; -} -.navbar-default .navbar-toggle .icon-bar { - background-color: #FFF; -} -.navbar-default .navbar-collapse, -.navbar-default .navbar-form { - border-color: transparent; -} -.navbar-default .navbar-nav > .open > a, -.navbar-default .navbar-nav > .open > a:hover, -.navbar-default .navbar-nav > .open > a:focus { - background-color: transparent; - color: #343741; -} -@media (max-width: -1) { - .navbar-default .navbar-nav .open .dropdown-menu > li > a { - color: #69707D; - } - .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, - .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus { - color: #69707D; - background-color: transparent; - } - .navbar-default .navbar-nav .open .dropdown-menu > .active > a, - .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, - .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus { - color: #343741; - background-color: transparent; - } - .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, - .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, - .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus { - color: #69707D; - background-color: transparent; - } -} -.navbar-default .navbar-link { - color: #69707D; -} -.navbar-default .navbar-link:hover { - color: #69707D; -} -.navbar-inverse { - background-color: #343741; - border-color: #1d1f25; -} -.navbar-inverse .navbar-brand { - color: #FFF; -} -.navbar-inverse .navbar-brand:hover, -.navbar-inverse .navbar-brand:focus { - color: #FFF; - background-color: #4b4f5d; -} -.navbar-inverse .navbar-text { - color: #FFF; -} -.navbar-inverse .navbar-nav > li > a { - color: #D3DAE6; -} -.navbar-inverse .navbar-nav > li > a:hover, -.navbar-inverse .navbar-nav > li > a:focus { - color: #FFF; - background-color: #61677a; -} -.navbar-inverse .navbar-nav > .active > a, -.navbar-inverse .navbar-nav > .active > a:hover, -.navbar-inverse .navbar-nav > .active > a:focus { - color: #FFF; - background-color: #69707D; -} -.navbar-inverse .navbar-nav > .disabled > a, -.navbar-inverse .navbar-nav > .disabled > a:hover, -.navbar-inverse .navbar-nav > .disabled > a:focus { - color: #b2bac6; - background-color: transparent; -} -.navbar-inverse .navbar-toggle { - border-color: #1d1f25; -} -.navbar-inverse .navbar-toggle:hover, -.navbar-inverse .navbar-toggle:focus { - background-color: #1d1f25; -} -.navbar-inverse .navbar-toggle .icon-bar { - background-color: #FFF; -} -.navbar-inverse .navbar-collapse, -.navbar-inverse .navbar-form { - border-color: #24262d; -} -.navbar-inverse .navbar-nav > .open > a, -.navbar-inverse .navbar-nav > .open > a:hover, -.navbar-inverse .navbar-nav > .open > a:focus { - background-color: #69707D; - color: #FFF; -} -@media (max-width: -1) { - .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header { - border-color: #1d1f25; - } - .navbar-inverse .navbar-nav .open .dropdown-menu .divider { - background-color: #1d1f25; - } - .navbar-inverse .navbar-nav .open .dropdown-menu > li > a { - color: #D3DAE6; - } - .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, - .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus { - color: #FFF; - background-color: #61677a; - } - .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, - .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, - .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus { - color: #FFF; - background-color: #69707D; - } - .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, - .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, - .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus { - color: #b2bac6; - background-color: transparent; - } -} -.navbar-inverse .navbar-link { - color: #D3DAE6; -} -.navbar-inverse .navbar-link:hover { - color: #FFF; -} -.close { - float: right; - font-size: 21px; - font-weight: bold; - line-height: 1; - color: #000; - text-shadow: none; - opacity: 0.2; - filter: alpha(opacity=20); -} -.close:hover, -.close:focus { - color: #000; - text-decoration: none; - cursor: pointer; - opacity: 0.5; - filter: alpha(opacity=50); -} -button.close { - padding: 0; - cursor: pointer; - background: transparent; - border: 0; - -webkit-appearance: none; -} -.modal-open { - overflow: hidden; -} -.modal { - display: none; - overflow: hidden; - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1070; - -webkit-overflow-scrolling: touch; - outline: 0; -} -.modal.fade .modal-dialog { - -webkit-transform: translate(0, -25%); - -ms-transform: translate(0, -25%); - -o-transform: translate(0, -25%); - transform: translate(0, -25%); - -webkit-transition: -webkit-transform 0.3s ease-out; - -moz-transition: -moz-transform 0.3s ease-out; - -o-transition: -o-transform 0.3s ease-out; - transition: transform 0.3s ease-out; -} -.modal.in .modal-dialog { - -webkit-transform: translate(0, 0); - -ms-transform: translate(0, 0); - -o-transform: translate(0, 0); - transform: translate(0, 0); -} -.modal-open .modal { - overflow-x: hidden; - overflow-y: auto; -} -.modal-dialog { - position: relative; - width: auto; - margin: 10px; -} -.modal-content { - position: relative; - background-color: #FFF; - border: 1px solid #98A2B3; - border: 1px solid rgba(0, 0, 0, 0.2); - border-radius: 4px; - -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); - box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); - background-clip: padding-box; - outline: 0; -} -.modal-backdrop { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1060; - background-color: #000; -} -.modal-backdrop.fade { - opacity: 0; - filter: alpha(opacity=0); -} -.modal-backdrop.in { - opacity: 0.5; - filter: alpha(opacity=50); -} -.modal-header { - padding: 15px; - border-bottom: 1px solid #e5e5e5; -} -.modal-header .close { - margin-top: -2px; -} -.modal-title { - margin: 0; - line-height: 1.42857143; -} -.modal-body { - position: relative; - padding: 15px; -} -.modal-footer { - padding: 15px; - text-align: right; - border-top: 1px solid #e5e5e5; -} -.modal-scrollbar-measure { - position: absolute; - top: -9999px; - width: 50px; - height: 50px; - overflow: scroll; -} -@media (min-width: 768px) { - .modal-dialog { - width: 600px; - margin: 30px auto; - } - .modal-content { - -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); - box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); - } - .modal-sm { - width: 300px; - } -} -@media (min-width: 992px) { - .modal-lg { - width: 900px; - } -} -@-webkit-keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} -@keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} -.progress { - overflow: hidden; - height: 20px; - margin-bottom: 20px; - background-color: #b8bec8; - border-radius: 4px; - -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); - box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); -} -.progress-bar { - float: left; - width: 0%; - height: 100%; - font-size: 12px; - line-height: 20px; - color: #FFF; - text-align: center; - background-color: #54B399; - -webkit-transition: width 0.6s ease; - -o-transition: width 0.6s ease; - transition: width 0.6s ease; -} -.progress-striped .progress-bar, -.progress-bar-striped { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-size: 40px 40px; -} -.progress.active .progress-bar, -.progress-bar.active { - -webkit-animation: progress-bar-stripes 2s linear infinite; - -o-animation: progress-bar-stripes 2s linear infinite; - animation: progress-bar-stripes 2s linear infinite; -} -.progress-bar-success { - background-color: #017D73; -} -.progress-striped .progress-bar-success { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} -.progress-bar-info { - background-color: #006BB4; -} -.progress-striped .progress-bar-info { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} -.progress-bar-warning { - background-color: #F5A700; -} -.progress-striped .progress-bar-warning { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} -.progress-bar-danger { - background-color: #BD271E; -} -.progress-striped .progress-bar-danger { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} -.list-group { - margin-bottom: 20px; - padding-left: 0; -} -.list-group-item { - position: relative; - display: block; - padding: 10px 15px; - margin-bottom: -1px; - background-color: #FFF; - border: 1px solid #D3DAE6; -} -.list-group-item:first-child { - border-top-right-radius: 4px; - border-top-left-radius: 4px; -} -.list-group-item:last-child { - margin-bottom: 0; - border-bottom-right-radius: 4px; - border-bottom-left-radius: 4px; -} -.list-group-item--noBorder { - border-top: 0; -} -a.list-group-item, -button.list-group-item { - color: #69707D; -} -a.list-group-item .list-group-item-heading, -button.list-group-item .list-group-item-heading { - color: #343741; -} -a.list-group-item:hover, -button.list-group-item:hover, -a.list-group-item:focus, -button.list-group-item:focus { - text-decoration: none; - color: #69707D; - background-color: #F5F7FA; -} -button.list-group-item { - width: 100%; - text-align: left; -} -.list-group-item.disabled, -.list-group-item.disabled:hover, -.list-group-item.disabled:focus { - background-color: #D3DAE6; - color: #b2bac6; - cursor: not-allowed; -} -.list-group-item.disabled .list-group-item-heading, -.list-group-item.disabled:hover .list-group-item-heading, -.list-group-item.disabled:focus .list-group-item-heading { - color: inherit; -} -.list-group-item.disabled .list-group-item-text, -.list-group-item.disabled:hover .list-group-item-text, -.list-group-item.disabled:focus .list-group-item-text { - color: #b2bac6; -} -.list-group-item.active, -.list-group-item.active:hover, -.list-group-item.active:focus { - z-index: 2; - color: #343741; - background-color: #343741; - border-color: #343741; -} -.list-group-item.active .list-group-item-heading, -.list-group-item.active:hover .list-group-item-heading, -.list-group-item.active:focus .list-group-item-heading, -.list-group-item.active .list-group-item-heading > small, -.list-group-item.active:hover .list-group-item-heading > small, -.list-group-item.active:focus .list-group-item-heading > small, -.list-group-item.active .list-group-item-heading > .small, -.list-group-item.active:hover .list-group-item-heading > .small, -.list-group-item.active:focus .list-group-item-heading > .small { - color: inherit; -} -.list-group-item.active .list-group-item-text, -.list-group-item.active:hover .list-group-item-text, -.list-group-item.active:focus .list-group-item-text { - color: #969bab; -} -.list-group-item-success { - color: #FFF; - background-color: #017D73; -} -a.list-group-item-success, -button.list-group-item-success { - color: #FFF; -} -a.list-group-item-success .list-group-item-heading, -button.list-group-item-success .list-group-item-heading { - color: inherit; -} -a.list-group-item-success:hover, -button.list-group-item-success:hover, -a.list-group-item-success:focus, -button.list-group-item-success:focus { - color: #FFF; - background-color: #01645c; -} -a.list-group-item-success.active, -button.list-group-item-success.active, -a.list-group-item-success.active:hover, -button.list-group-item-success.active:hover, -a.list-group-item-success.active:focus, -button.list-group-item-success.active:focus { - color: #fff; - background-color: #FFF; - border-color: #FFF; -} -.list-group-item-info { - color: #FFF; - background-color: #006BB4; -} -a.list-group-item-info, -button.list-group-item-info { - color: #FFF; -} -a.list-group-item-info .list-group-item-heading, -button.list-group-item-info .list-group-item-heading { - color: inherit; -} -a.list-group-item-info:hover, -button.list-group-item-info:hover, -a.list-group-item-info:focus, -button.list-group-item-info:focus { - color: #FFF; - background-color: #005c9b; -} -a.list-group-item-info.active, -button.list-group-item-info.active, -a.list-group-item-info.active:hover, -button.list-group-item-info.active:hover, -a.list-group-item-info.active:focus, -button.list-group-item-info.active:focus { - color: #fff; - background-color: #FFF; - border-color: #FFF; -} -.list-group-item-warning { - color: #FFF; - background-color: #F5A700; -} -a.list-group-item-warning, -button.list-group-item-warning { - color: #FFF; -} -a.list-group-item-warning .list-group-item-heading, -button.list-group-item-warning .list-group-item-heading { - color: inherit; -} -a.list-group-item-warning:hover, -button.list-group-item-warning:hover, -a.list-group-item-warning:focus, -button.list-group-item-warning:focus { - color: #FFF; - background-color: #dc9600; -} -a.list-group-item-warning.active, -button.list-group-item-warning.active, -a.list-group-item-warning.active:hover, -button.list-group-item-warning.active:hover, -a.list-group-item-warning.active:focus, -button.list-group-item-warning.active:focus { - color: #fff; - background-color: #FFF; - border-color: #FFF; -} -.list-group-item-danger { - color: #FFF; - background-color: #BD271E; -} -a.list-group-item-danger, -button.list-group-item-danger { - color: #FFF; -} -a.list-group-item-danger .list-group-item-heading, -button.list-group-item-danger .list-group-item-heading { - color: inherit; -} -a.list-group-item-danger:hover, -button.list-group-item-danger:hover, -a.list-group-item-danger:focus, -button.list-group-item-danger:focus { - color: #FFF; - background-color: #a7221b; -} -a.list-group-item-danger.active, -button.list-group-item-danger.active, -a.list-group-item-danger.active:hover, -button.list-group-item-danger.active:hover, -a.list-group-item-danger.active:focus, -button.list-group-item-danger.active:focus { - color: #fff; - background-color: #FFF; - border-color: #FFF; -} -.list-group-item-heading { - margin-top: 0; - margin-bottom: 5px; -} -.list-group-item-text { - margin-bottom: 0; - line-height: 1.3; -} -.nav { - margin-bottom: 0; - padding-left: 0; - list-style: none; -} -.nav > li { - position: relative; - display: block; -} -.nav > li > a { - position: relative; - display: block; - padding: 10px 15px; -} -.nav > li > a:hover, -.nav > li > a:focus { - text-decoration: none; - background-color: #D3DAE6; -} -.nav > li.disabled > a { - color: #b2bac6; -} -.nav > li.disabled > a:hover, -.nav > li.disabled > a:focus { - color: #b2bac6; - text-decoration: none; - background-color: transparent; - cursor: not-allowed; -} -.nav .open > a, -.nav .open > a:hover, -.nav .open > a:focus { - background-color: #D3DAE6; - border-color: #006BB4; -} -.nav .nav-divider { - height: 1px; - margin: 9px 0; - overflow: hidden; - background-color: #e5e5e5; -} -.nav > li > a > img { - max-width: none; -} -.nav-tabs { - border-bottom: 1px solid #D3DAE6; -} -.nav-tabs > li { - float: left; - margin-bottom: -1px; -} -.nav-tabs > li > a { - margin-right: 2px; - line-height: 1.42857143; - border: 1px solid transparent; - border-radius: 4px 4px 0 0; -} -.nav-tabs > li > a:hover { - border-color: #D3DAE6; - background-color: #FFF; -} -.nav-tabs > li.active > a, -.nav-tabs > li.active > a:hover, -.nav-tabs > li.active > a:focus { - color: #343741; - background-color: #FFF; - border: 1px solid #D3DAE6; - border-bottom-color: transparent; - cursor: default; -} -.nav-tabs.nav-justified { - width: 100%; - border-bottom: 0; -} -.nav-tabs.nav-justified > li { - float: none; -} -.nav-tabs.nav-justified > li > a { - text-align: center; - margin-bottom: 5px; -} -.nav-tabs.nav-justified > .dropdown .dropdown-menu { - top: auto; - left: auto; -} -@media (min-width: 768px) { - .nav-tabs.nav-justified > li { - display: table-cell; - width: 1%; - } - .nav-tabs.nav-justified > li > a { - margin-bottom: 0; - } -} -.nav-tabs.nav-justified > li > a { - margin-right: 0; - border-radius: 4px; -} -.nav-tabs.nav-justified > .active > a, -.nav-tabs.nav-justified > .active > a:hover, -.nav-tabs.nav-justified > .active > a:focus { - border: 1px solid #FFF; -} -@media (min-width: 768px) { - .nav-tabs.nav-justified > li > a { - border-bottom: 1px solid #FFF; - border-radius: 4px 4px 0 0; - } - .nav-tabs.nav-justified > .active > a, - .nav-tabs.nav-justified > .active > a:hover, - .nav-tabs.nav-justified > .active > a:focus { - border-bottom-color: #FFF; - } -} -.nav-pills > li { - float: left; -} -.nav-pills > li > a { - border-radius: 4px; -} -.nav-pills > li + li { - margin-left: 2px; -} -.nav-pills > li.active > a, -.nav-pills > li.active > a:hover, -.nav-pills > li.active > a:focus { - color: #FFF; - background-color: #006BB4; -} -.nav-stacked > li { - float: none; -} -.nav-stacked > li + li { - margin-top: 2px; - margin-left: 0; -} -.nav-justified { - width: 100%; -} -.nav-justified > li { - float: none; -} -.nav-justified > li > a { - text-align: center; - margin-bottom: 5px; -} -.nav-justified > .dropdown .dropdown-menu { - top: auto; - left: auto; -} -@media (min-width: 768px) { - .nav-justified > li { - display: table-cell; - width: 1%; - } - .nav-justified > li > a { - margin-bottom: 0; - } -} -.nav-tabs-justified { - border-bottom: 0; -} -.nav-tabs-justified > li > a { - margin-right: 0; - border-radius: 4px; -} -.nav-tabs-justified > .active > a, -.nav-tabs-justified > .active > a:hover, -.nav-tabs-justified > .active > a:focus { - border: 1px solid #FFF; -} -@media (min-width: 768px) { - .nav-tabs-justified > li > a { - border-bottom: 1px solid #FFF; - border-radius: 4px 4px 0 0; - } - .nav-tabs-justified > .active > a, - .nav-tabs-justified > .active > a:hover, - .nav-tabs-justified > .active > a:focus { - border-bottom-color: #FFF; - } -} -.tab-content > .tab-pane { - display: none; -} -.tab-content > .active { - display: block; -} -.nav-tabs .dropdown-menu { - margin-top: -1px; - border-top-right-radius: 0; - border-top-left-radius: 0; -} -.alert { - padding: 15px; - margin-bottom: 20px; - border: 1px solid transparent; - border-radius: 4px; -} -.alert h4 { - margin-top: 0; - color: inherit; -} -.alert .alert-link { - font-weight: bold; -} -.alert > p, -.alert > ul { - margin-bottom: 0; -} -.alert > p + p { - margin-top: 5px; -} -.alert-dismissable, -.alert-dismissible { - padding-right: 35px; -} -.alert-dismissable .close, -.alert-dismissible .close { - position: relative; - top: -2px; - right: -21px; - color: inherit; -} -.alert-success { - background-color: #017D73; - border-color: #014a44; - color: #FFF; -} -.alert-success hr { - border-top-color: #00312d; -} -.alert-success .alert-link { - color: #e6e6e6; -} -.alert-info { - background-color: #006BB4; - border-color: #004d81; - color: #FFF; -} -.alert-info hr { - border-top-color: #003e68; -} -.alert-info .alert-link { - color: #e6e6e6; -} -.alert-warning { - background-color: #F5A700; - border-color: #c28400; - color: #FFF; -} -.alert-warning hr { - border-top-color: #a97300; -} -.alert-warning .alert-link { - color: #e6e6e6; -} -.alert-danger { - background-color: #BD271E; - border-color: #911e17; - color: #FFF; -} -.alert-danger hr { - border-top-color: #7b1914; -} -.alert-danger .alert-link { - color: #e6e6e6; -} -.bsTooltip { - position: absolute; - z-index: 1040; - display: block; - font-family: 'Open Sans', Helvetica, Arial, sans-serif; - font-style: normal; - font-weight: normal; - letter-spacing: normal; - line-break: auto; - line-height: 1.42857143; - text-align: left; - text-align: start; - text-decoration: none; - text-shadow: none; - text-transform: none; - white-space: normal; - word-break: normal; - word-spacing: normal; - word-wrap: normal; - font-size: 12px; - opacity: 0; - filter: alpha(opacity=0); -} -.bsTooltip.in { - opacity: 0.8; - filter: alpha(opacity=80); -} -.bsTooltip.top { - margin-top: -3px; - padding: 5px 0; -} -.bsTooltip.right { - margin-left: 3px; - padding: 0 5px; -} -.bsTooltip.bottom { - margin-top: 3px; - padding: 5px 0; -} -.bsTooltip.left { - margin-left: -3px; - padding: 0 5px; -} -.bsTooltip-inner { - max-width: 200px; - padding: 3px 8px; - color: #fff; - text-align: center; - background-color: #000; - border-radius: 4px; -} -.bsTooltip-arrow { - position: absolute; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; -} -.bsTooltip.top .bsTooltip-arrow { - bottom: 0; - left: 50%; - margin-left: -5px; - border-width: 5px 5px 0; - border-top-color: #000; -} -.bsTooltip.top-left .bsTooltip-arrow { - bottom: 0; - right: 5px; - margin-bottom: -5px; - border-width: 5px 5px 0; - border-top-color: #000; -} -.bsTooltip.top-right .bsTooltip-arrow { - bottom: 0; - left: 5px; - margin-bottom: -5px; - border-width: 5px 5px 0; - border-top-color: #000; -} -.bsTooltip.right .bsTooltip-arrow { - top: 50%; - left: 0; - margin-top: -5px; - border-width: 5px 5px 5px 0; - border-right-color: #000; -} -.bsTooltip.left .bsTooltip-arrow { - top: 50%; - right: 0; - margin-top: -5px; - border-width: 5px 0 5px 5px; - border-left-color: #000; -} -.bsTooltip.bottom .bsTooltip-arrow { - top: 0; - left: 50%; - margin-left: -5px; - border-width: 0 5px 5px; - border-bottom-color: #000; -} -.bsTooltip.bottom-left .bsTooltip-arrow { - top: 0; - right: 5px; - margin-top: -5px; - border-width: 0 5px 5px; - border-bottom-color: #000; -} -.bsTooltip.bottom-right .bsTooltip-arrow { - top: 0; - left: 5px; - margin-top: -5px; - border-width: 0 5px 5px; - border-bottom-color: #000; -} -.visible-xs, -.visible-sm, -.visible-md, -.visible-lg { - display: none !important; -} -.visible-xs-block, -.visible-xs-inline, -.visible-xs-inline-block, -.visible-sm-block, -.visible-sm-inline, -.visible-sm-inline-block, -.visible-md-block, -.visible-md-inline, -.visible-md-inline-block, -.visible-lg-block, -.visible-lg-inline, -.visible-lg-inline-block { - display: none !important; -} -@media (max-width: 767px) { - .visible-xs { - display: block !important; - } - table.visible-xs { - display: table !important; - } - tr.visible-xs { - display: table-row !important; - } - th.visible-xs, - td.visible-xs { - display: table-cell !important; - } -} -@media (max-width: 767px) { - .visible-xs-block { - display: block !important; - } -} -@media (max-width: 767px) { - .visible-xs-inline { - display: inline !important; - } -} -@media (max-width: 767px) { - .visible-xs-inline-block { - display: inline-block !important; - } -} -@media (min-width: 768px) and (max-width: 991px) { - .visible-sm { - display: block !important; - } - table.visible-sm { - display: table !important; - } - tr.visible-sm { - display: table-row !important; - } - th.visible-sm, - td.visible-sm { - display: table-cell !important; - } -} -@media (min-width: 768px) and (max-width: 991px) { - .visible-sm-block { - display: block !important; - } -} -@media (min-width: 768px) and (max-width: 991px) { - .visible-sm-inline { - display: inline !important; - } -} -@media (min-width: 768px) and (max-width: 991px) { - .visible-sm-inline-block { - display: inline-block !important; - } -} -@media (min-width: 992px) and (max-width: 1199px) { - .visible-md { - display: block !important; - } - table.visible-md { - display: table !important; - } - tr.visible-md { - display: table-row !important; - } - th.visible-md, - td.visible-md { - display: table-cell !important; - } -} -@media (min-width: 992px) and (max-width: 1199px) { - .visible-md-block { - display: block !important; - } -} -@media (min-width: 992px) and (max-width: 1199px) { - .visible-md-inline { - display: inline !important; - } -} -@media (min-width: 992px) and (max-width: 1199px) { - .visible-md-inline-block { - display: inline-block !important; - } -} -@media (min-width: 1200px) { - .visible-lg { - display: block !important; - } - table.visible-lg { - display: table !important; - } - tr.visible-lg { - display: table-row !important; - } - th.visible-lg, - td.visible-lg { - display: table-cell !important; - } -} -@media (min-width: 1200px) { - .visible-lg-block { - display: block !important; - } -} -@media (min-width: 1200px) { - .visible-lg-inline { - display: inline !important; - } -} -@media (min-width: 1200px) { - .visible-lg-inline-block { - display: inline-block !important; - } -} -@media (max-width: 767px) { - .hidden-xs { - display: none !important; - } -} -@media (min-width: 768px) and (max-width: 991px) { - .hidden-sm { - display: none !important; - } -} -@media (min-width: 992px) and (max-width: 1199px) { - .hidden-md { - display: none !important; - } -} -@media (min-width: 1200px) { - .hidden-lg { - display: none !important; - } -} -.visible-print { - display: none !important; -} -@media print { - .visible-print { - display: block !important; - } - table.visible-print { - display: table !important; - } - tr.visible-print { - display: table-row !important; - } - th.visible-print, - td.visible-print { - display: table-cell !important; - } -} -.visible-print-block { - display: none !important; -} -@media print { - .visible-print-block { - display: block !important; - } -} -.visible-print-inline { - display: none !important; -} -@media print { - .visible-print-inline { - display: inline !important; - } -} -.visible-print-inline-block { - display: none !important; -} -@media print { - .visible-print-inline-block { - display: inline-block !important; - } -} -@media print { - .hidden-print { - display: none !important; - } -} -.caret { - display: inline-block; - width: 0; - height: 0; - margin-left: 2px; - vertical-align: middle; - border-top: 4px dashed; - border-top: 4px solid \9; - border-right: 4px solid transparent; - border-left: 4px solid transparent; -} -.dropup, -.dropdown { - position: relative; -} -.dropdown-toggle:focus { - outline: 0; -} -.dropdown-menu { - position: absolute; - top: 100%; - left: 0; - z-index: 1000; - display: none; - float: left; - min-width: 160px; - padding: 5px 0; - margin: 2px 0 0; - list-style: none; - font-size: 14px; - text-align: left; - background-color: #FFF; - border: 1px solid #D3DAE6; - border-radius: 4px; - box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.1); - background-clip: padding-box; -} -.dropdown-menu.pull-right { - right: 0; - left: auto; -} -.dropdown-menu .divider { - height: 1px; - margin: 9px 0; - overflow: hidden; - background-color: #D3DAE6; -} -.dropdown-menu > li > a, -.dropdown-menu > li > button { - display: block; - padding: 3px 20px; - clear: both; - font-weight: normal; - line-height: 1.42857143; - color: #7b7b7b; - white-space: nowrap; -} -.dropdown-menu > li > button { - appearance: none; - background: none; - border: none; - width: 100%; - text-align: left; -} -.dropdown-menu > li > a:hover, -.dropdown-menu > li > button:hover, -.dropdown-menu > li > a:focus, -.dropdown-menu > li > button:focus { - text-decoration: none; - color: #FFF; - background-color: #343741; -} -.dropdown-menu > .active > button, -.dropdown-menu > .active > a, -.dropdown-menu > .active > button:hover, -.dropdown-menu > .active > a:hover, -.dropdown-menu > .active > button:focus, -.dropdown-menu > .active > a:focus { - color: #FFF; - text-decoration: none; - outline: 0; - background-color: #343741; -} -.dropdown-menu > .disabled > a, -.dropdown-menu > .disabled > a:hover, -.dropdown-menu > .disabled > a:focus { - color: #98A2B3; -} -.dropdown-menu > .disabled > a:hover, -.dropdown-menu > .disabled > a:focus { - text-decoration: none; - background-color: transparent; - background-image: none; - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - cursor: not-allowed; -} -.open > .dropdown-menu { - display: block; -} -.open > a { - outline: 0; -} -.dropdown-menu-right { - left: auto; - right: 0; -} -.dropdown-menu-left { - left: 0; - right: auto; -} -.dropdown-header { - display: block; - padding: 3px 20px; - font-size: 12px; - line-height: 1.42857143; - color: #98A2B3; - white-space: nowrap; -} -.dropdown-backdrop { - position: fixed; - left: 0; - right: 0; - bottom: 0; - top: 0; - z-index: 990; -} -.pull-right > .dropdown-menu { - right: 0; - left: auto; -} -.dropup .caret, -.navbar-fixed-bottom .dropdown .caret { - border-top: 0; - border-bottom: 4px dashed; - border-bottom: 4px solid \9; - content: ""; -} -.dropup .dropdown-menu, -.navbar-fixed-bottom .dropdown .dropdown-menu { - top: auto; - bottom: 100%; - margin-bottom: 2px; -} -@media (min-width: 0) { - .navbar-right .dropdown-menu { - left: auto; - right: 0; - } - .navbar-right .dropdown-menu-left { - left: 0; - right: auto; - } -} -.input-group { - position: relative; - display: table; - border-collapse: separate; -} -.input-group[class*="col-"] { - float: none; - padding-left: 0; - padding-right: 0; -} -.input-group .form-control { - position: relative; - z-index: 2; - float: left; - width: 100%; - margin-bottom: 0; -} -.input-group .form-control:focus { - z-index: 3; -} -.input-group-lg > .form-control, -.input-group-lg > .input-group-addon { - height: 62px; - padding: 18px 27px; - font-size: 18px; - line-height: 1.3333333; - border-radius: 4px; -} -select.input-group-lg > .form-control, -select.input-group-lg > .input-group-addon { - height: 62px; - line-height: 62px; -} -textarea.input-group-lg > .form-control, -textarea.input-group-lg > .input-group-addon, -select[multiple].input-group-lg > .form-control, -select[multiple].input-group-lg > .input-group-addon { - height: auto; -} -.input-group-sm > .form-control, -.input-group-sm > .input-group-addon { - height: 32px; - padding: 6px 9px; - font-size: 12px; - line-height: 1.5; - border-radius: 4px; -} -select.input-group-sm > .form-control, -select.input-group-sm > .input-group-addon { - height: 32px; - line-height: 32px; -} -textarea.input-group-sm > .form-control, -textarea.input-group-sm > .input-group-addon, -select[multiple].input-group-sm > .form-control, -select[multiple].input-group-sm > .input-group-addon { - height: auto; -} -.input-group-addon, -.input-group .form-control { - display: table-cell; -} -.input-group-addon:not(:first-child):not(:last-child), -.input-group .form-control:not(:first-child):not(:last-child) { - border-radius: 0; -} -.input-group-addon { - width: 1%; - white-space: nowrap; - vertical-align: middle; -} -.input-group-addon { - padding: 5px 15px; - font-size: 14px; - font-weight: normal; - line-height: 1; - color: #343741; - text-align: center; - background-color: #D3DAE6; - border: 1px solid #D3DAE6; - border-radius: 4px; -} -.input-group-addon.input-sm { - padding: 6px 9px; - font-size: 12px; - border-radius: 4px; -} -.input-group-addon.input-lg { - padding: 18px 27px; - font-size: 18px; - border-radius: 4px; -} -.input-group-addon input[type="radio"], -.input-group-addon input[type="checkbox"] { - margin-top: 0; -} -.input-group .form-control:first-child, -.input-group-addon:first-child { - border-bottom-right-radius: 0; - border-top-right-radius: 0; -} -.input-group-addon:first-child { - border-right: 0; -} -.input-group .form-control:last-child, -.input-group-addon:last-child { - border-bottom-left-radius: 0; - border-top-left-radius: 0; -} -.input-group-addon:last-child { - border-left: 0; -} -.pagination { - display: inline-block; - padding-left: 0; - margin: 20px 0; - border-radius: 4px; -} -.pagination > li { - display: inline; -} -.pagination > li > a, -.pagination > li > span { - position: relative; - float: left; - padding: 5px 15px; - line-height: 1.42857143; - text-decoration: none; - color: #006BB4; - background-color: transparent; - border: 1px solid transparent; - margin-left: -1px; -} -.pagination > li:first-child > a, -.pagination > li:first-child > span { - margin-left: 0; - border-bottom-left-radius: 4px; - border-top-left-radius: 4px; -} -.pagination > li:last-child > a, -.pagination > li:last-child > span { - border-bottom-right-radius: 4px; - border-top-right-radius: 4px; -} -.pagination > li > a:hover, -.pagination > li > span:hover, -.pagination > li > a:focus, -.pagination > li > span:focus { - z-index: 2; - color: #006BB4; - background-color: rgba(0, 0, 0, 0); - border-color: transparent; -} -.pagination > .active > a, -.pagination > .active > span, -.pagination > .active > a:hover, -.pagination > .active > span:hover, -.pagination > .active > a:focus, -.pagination > .active > span:focus { - z-index: 3; - color: #343741; - background-color: rgba(0, 0, 0, 0); - border-color: transparent; - cursor: default; -} -.pagination > .disabled > span, -.pagination > .disabled > span:hover, -.pagination > .disabled > span:focus, -.pagination > .disabled > a, -.pagination > .disabled > a:hover, -.pagination > .disabled > a:focus { - color: #343741; - background-color: rgba(38, 38, 38, 0); - border-color: transparent; - cursor: not-allowed; -} -.pagination-lg > li > a, -.pagination-lg > li > span { - padding: 18px 27px; - font-size: 18px; - line-height: 1.3333333; -} -.pagination-lg > li:first-child > a, -.pagination-lg > li:first-child > span { - border-bottom-left-radius: 4px; - border-top-left-radius: 4px; -} -.pagination-lg > li:last-child > a, -.pagination-lg > li:last-child > span { - border-bottom-right-radius: 4px; - border-top-right-radius: 4px; -} -.pagination-sm > li > a, -.pagination-sm > li > span { - padding: 6px 9px; - font-size: 12px; - line-height: 1.5; -} -.pagination-sm > li:first-child > a, -.pagination-sm > li:first-child > span { - border-bottom-left-radius: 4px; - border-top-left-radius: 4px; -} -.pagination-sm > li:last-child > a, -.pagination-sm > li:last-child > span { - border-bottom-right-radius: 4px; - border-top-right-radius: 4px; -} -.pager { - padding-left: 0; - margin: 20px 0; - list-style: none; - text-align: center; -} -.pager li { - display: inline; -} -.pager li > a, -.pager li > span { - display: inline-block; - padding: 5px 14px; - background-color: transparent; - border: 1px solid transparent; - border-radius: 0; -} -.pager li > a:hover, -.pager li > a:focus { - text-decoration: none; - background-color: rgba(0, 0, 0, 0); -} -.pager .next > a, -.pager .next > span { - float: right; -} -.pager .previous > a, -.pager .previous > span { - float: left; -} -.pager .disabled > a, -.pager .disabled > a:hover, -.pager .disabled > a:focus, -.pager .disabled > span { - color: #FFF; - background-color: transparent; - cursor: not-allowed; -} -.label { - display: inline; - padding: 0.2em 0.6em 0.3em; - font-size: 75%; - font-weight: bold; - line-height: 1; - color: #FFF; - text-align: center; - white-space: nowrap; - vertical-align: baseline; - border-radius: 0.25em; -} -a.label:hover, -a.label:focus { - color: #FFF; - text-decoration: none; - cursor: pointer; -} -.label:empty { - display: none; -} -.label-default { - background-color: #006BB4; -} -.label-default[href]:hover, -.label-default[href]:focus { - background-color: #004d81; -} -.label-primary { - background-color: #343741; -} -.label-primary[href]:hover, -.label-primary[href]:focus { - background-color: #1d1f25; -} -.label-success { - background-color: #017D73; -} -.label-success[href]:hover, -.label-success[href]:focus { - background-color: #014a44; -} -.label-info { - background-color: #006BB4; -} -.label-info[href]:hover, -.label-info[href]:focus { - background-color: #004d81; -} -.label-warning { - background-color: #F5A700; -} -.label-warning[href]:hover, -.label-warning[href]:focus { - background-color: #c28400; -} -.label-danger { - background-color: #BD271E; -} -.label-danger[href]:hover, -.label-danger[href]:focus { - background-color: #911e17; -} -.panel { - margin-bottom: 20px; - background-color: #FFF; - border: 1px solid transparent; - border-radius: 4px; - -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); - box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); -} -.panel-body { - padding: 15px; -} -.panel-heading { - padding: 10px 15px; - border-bottom: 1px solid transparent; - border-top-right-radius: 3px; - border-top-left-radius: 3px; -} -.panel-heading > .dropdown .dropdown-toggle { - color: inherit; -} -.panel-title { - margin-top: 0; - margin-bottom: 0; - font-size: 16px; - color: inherit; -} -.panel-title > a, -.panel-title > small, -.panel-title > .small, -.panel-title > small > a, -.panel-title > .small > a { - color: inherit; -} -.panel-footer { - padding: 10px 15px; - background-color: #F5F7FA; - border-top: 1px solid #D3DAE6; - border-bottom-right-radius: 3px; - border-bottom-left-radius: 3px; -} -.panel > .list-group, -.panel > .panel-collapse > .list-group { - margin-bottom: 0; -} -.panel > .list-group .list-group-item, -.panel > .panel-collapse > .list-group .list-group-item { - border-width: 1px 0; - border-radius: 0; -} -.panel > .list-group:first-child .list-group-item:first-child, -.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child { - border-top: 0; - border-top-right-radius: 3px; - border-top-left-radius: 3px; -} -.panel > .list-group:last-child .list-group-item:last-child, -.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child { - border-bottom: 0; - border-bottom-right-radius: 3px; - border-bottom-left-radius: 3px; -} -.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child { - border-top-right-radius: 0; - border-top-left-radius: 0; -} -.panel-heading + .list-group .list-group-item:first-child { - border-top-width: 0; -} -.list-group + .panel-footer { - border-top-width: 0; -} -.panel > .table, -.panel > .table-responsive > .table, -.panel > .panel-collapse > .table { - margin-bottom: 0; -} -.panel > .table caption, -.panel > .table-responsive > .table caption, -.panel > .panel-collapse > .table caption { - padding-left: 15px; - padding-right: 15px; -} -.panel > .table:first-child, -.panel > .table-responsive:first-child > .table:first-child { - border-top-right-radius: 3px; - border-top-left-radius: 3px; -} -.panel > .table:first-child > thead:first-child > tr:first-child, -.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child, -.panel > .table:first-child > tbody:first-child > tr:first-child, -.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child { - border-top-left-radius: 3px; - border-top-right-radius: 3px; -} -.panel > .table:first-child > thead:first-child > tr:first-child td:first-child, -.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child, -.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child, -.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child, -.panel > .table:first-child > thead:first-child > tr:first-child th:first-child, -.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child, -.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child, -.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child { - border-top-left-radius: 3px; -} -.panel > .table:first-child > thead:first-child > tr:first-child td:last-child, -.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child, -.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child, -.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child, -.panel > .table:first-child > thead:first-child > tr:first-child th:last-child, -.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child, -.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child, -.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child { - border-top-right-radius: 3px; -} -.panel > .table:last-child, -.panel > .table-responsive:last-child > .table:last-child { - border-bottom-right-radius: 3px; - border-bottom-left-radius: 3px; -} -.panel > .table:last-child > tbody:last-child > tr:last-child, -.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child, -.panel > .table:last-child > tfoot:last-child > tr:last-child, -.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child { - border-bottom-left-radius: 3px; - border-bottom-right-radius: 3px; -} -.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child, -.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child, -.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child, -.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child, -.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child, -.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child, -.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child, -.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child { - border-bottom-left-radius: 3px; -} -.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child, -.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child, -.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child, -.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child, -.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child, -.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child, -.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child, -.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child { - border-bottom-right-radius: 3px; -} -.panel > .panel-body + .table, -.panel > .panel-body + .table-responsive, -.panel > .table + .panel-body, -.panel > .table-responsive + .panel-body { - border-top: 1px solid #D3DAE6; -} -.panel > .table > tbody:first-child > tr:first-child th, -.panel > .table > tbody:first-child > tr:first-child td { - border-top: 0; -} -.panel > .table-bordered, -.panel > .table-responsive > .table-bordered { - border: 0; -} -.panel > .table-bordered > thead > tr > th:first-child, -.panel > .table-responsive > .table-bordered > thead > tr > th:first-child, -.panel > .table-bordered > tbody > tr > th:first-child, -.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child, -.panel > .table-bordered > tfoot > tr > th:first-child, -.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child, -.panel > .table-bordered > thead > tr > td:first-child, -.panel > .table-responsive > .table-bordered > thead > tr > td:first-child, -.panel > .table-bordered > tbody > tr > td:first-child, -.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child, -.panel > .table-bordered > tfoot > tr > td:first-child, -.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child { - border-left: 0; -} -.panel > .table-bordered > thead > tr > th:last-child, -.panel > .table-responsive > .table-bordered > thead > tr > th:last-child, -.panel > .table-bordered > tbody > tr > th:last-child, -.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child, -.panel > .table-bordered > tfoot > tr > th:last-child, -.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child, -.panel > .table-bordered > thead > tr > td:last-child, -.panel > .table-responsive > .table-bordered > thead > tr > td:last-child, -.panel > .table-bordered > tbody > tr > td:last-child, -.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child, -.panel > .table-bordered > tfoot > tr > td:last-child, -.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child { - border-right: 0; -} -.panel > .table-bordered > thead > tr:first-child > td, -.panel > .table-responsive > .table-bordered > thead > tr:first-child > td, -.panel > .table-bordered > tbody > tr:first-child > td, -.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td, -.panel > .table-bordered > thead > tr:first-child > th, -.panel > .table-responsive > .table-bordered > thead > tr:first-child > th, -.panel > .table-bordered > tbody > tr:first-child > th, -.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th { - border-bottom: 0; -} -.panel > .table-bordered > tbody > tr:last-child > td, -.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td, -.panel > .table-bordered > tfoot > tr:last-child > td, -.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td, -.panel > .table-bordered > tbody > tr:last-child > th, -.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th, -.panel > .table-bordered > tfoot > tr:last-child > th, -.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th { - border-bottom: 0; -} -.panel > .table-responsive { - border: 0; - margin-bottom: 0; -} -.panel-group { - margin-bottom: 20px; -} -.panel-group .panel { - margin-bottom: 0; - border-radius: 4px; -} -.panel-group .panel + .panel { - margin-top: 5px; -} -.panel-group .panel-heading { - border-bottom: 0; -} -.panel-group .panel-heading + .panel-collapse > .panel-body, -.panel-group .panel-heading + .panel-collapse > .list-group { - border-top: 1px solid #D3DAE6; -} -.panel-group .panel-footer { - border-top: 0; -} -.panel-group .panel-footer + .panel-collapse .panel-body { - border-bottom: 1px solid #D3DAE6; -} -.panel-default { - border-color: #D3DAE6; -} -.panel-default > .panel-heading { - color: #7b7b7b; - background-color: #F5F7FA; - border-color: #D3DAE6; -} -.panel-default > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #D3DAE6; -} -.panel-default > .panel-heading .badge { - color: #F5F7FA; - background-color: #7b7b7b; -} -.panel-default > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #D3DAE6; -} -.panel-primary { - border-color: #343741; -} -.panel-primary > .panel-heading { - color: #FFF; - background-color: #343741; - border-color: #343741; -} -.panel-primary > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #343741; -} -.panel-primary > .panel-heading .badge { - color: #343741; - background-color: #FFF; -} -.panel-primary > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #343741; -} -.panel-success { - border-color: #014a44; -} -.panel-success > .panel-heading { - color: #FFF; - background-color: #017D73; - border-color: #014a44; -} -.panel-success > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #014a44; -} -.panel-success > .panel-heading .badge { - color: #017D73; - background-color: #FFF; -} -.panel-success > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #014a44; -} -.panel-info { - border-color: #004d81; -} -.panel-info > .panel-heading { - color: #FFF; - background-color: #006BB4; - border-color: #004d81; -} -.panel-info > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #004d81; -} -.panel-info > .panel-heading .badge { - color: #006BB4; - background-color: #FFF; -} -.panel-info > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #004d81; -} -.panel-warning { - border-color: #c28400; -} -.panel-warning > .panel-heading { - color: #FFF; - background-color: #F5A700; - border-color: #c28400; -} -.panel-warning > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #c28400; -} -.panel-warning > .panel-heading .badge { - color: #F5A700; - background-color: #FFF; -} -.panel-warning > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #c28400; -} -.panel-danger { - border-color: #911e17; -} -.panel-danger > .panel-heading { - color: #FFF; - background-color: #BD271E; - border-color: #911e17; -} -.panel-danger > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #911e17; -} -.panel-danger > .panel-heading .badge { - color: #BD271E; - background-color: #FFF; -} -.panel-danger > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #911e17; -} -.popover { - position: absolute; - top: 0; - left: 0; - z-index: 1010; - display: none; - max-width: 276px; - padding: 1px; - font-family: 'Open Sans', Helvetica, Arial, sans-serif; - font-style: normal; - font-weight: normal; - letter-spacing: normal; - line-break: auto; - line-height: 1.42857143; - text-align: left; - text-align: start; - text-decoration: none; - text-shadow: none; - text-transform: none; - white-space: normal; - word-break: normal; - word-spacing: normal; - word-wrap: normal; - font-size: 14px; - background-color: #FFF; - background-clip: padding-box; - border: 1px solid #D3DAE6; - border-radius: 4px; - box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.1); -} -.popover.top { - margin-top: -10px; -} -.popover.right { - margin-left: 10px; -} -.popover.bottom { - margin-top: 10px; -} -.popover.left { - margin-left: -10px; -} -.popover-title { - margin: 0; - padding: 8px 14px; - font-size: 14px; - background-color: #f7f7f7; - border-bottom: 1px solid #ebebeb; - border-radius: 3px 3px 0 0; -} -.popover-content { - padding: 9px 14px; -} -.popover > .arrow, -.popover > .arrow:after { - position: absolute; - display: block; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; -} -.popover > .arrow { - border-width: 11px; -} -.popover > .arrow:after { - border-width: 10px; - content: ""; -} -.popover.top > .arrow { - left: 50%; - margin-left: -11px; - border-bottom-width: 0; - border-top-color: #92a3c1; - border-top-color: #d3dae6; - bottom: -11px; -} -.popover.top > .arrow:after { - content: " "; - bottom: 1px; - margin-left: -10px; - border-bottom-width: 0; - border-top-color: #FFF; -} -.popover.right > .arrow { - top: 50%; - left: -11px; - margin-top: -11px; - border-left-width: 0; - border-right-color: #92a3c1; - border-right-color: #d3dae6; -} -.popover.right > .arrow:after { - content: " "; - left: 1px; - bottom: -10px; - border-left-width: 0; - border-right-color: #FFF; -} -.popover.bottom > .arrow { - left: 50%; - margin-left: -11px; - border-top-width: 0; - border-bottom-color: #92a3c1; - border-bottom-color: #d3dae6; - top: -11px; -} -.popover.bottom > .arrow:after { - content: " "; - top: 1px; - margin-left: -10px; - border-top-width: 0; - border-bottom-color: #FFF; -} -.popover.left > .arrow { - top: 50%; - right: -11px; - margin-top: -11px; - border-right-width: 0; - border-left-color: #92a3c1; - border-left-color: #d3dae6; -} -.popover.left > .arrow:after { - content: " "; - right: 1px; - border-right-width: 0; - border-left-color: #FFF; - bottom: -10px; -} -.clearfix:before, -.clearfix:after, -.container:before, -.container:after, -.container-fluid:before, -.container-fluid:after, -.row:before, -.row:after, -.form-horizontal .form-group:before, -.form-horizontal .form-group:after, -.dl-horizontal dd:before, -.dl-horizontal dd:after, -.navbar:before, -.navbar:after, -.navbar-header:before, -.navbar-header:after, -.navbar-collapse:before, -.navbar-collapse:after, -.modal-header:before, -.modal-header:after, -.modal-footer:before, -.modal-footer:after, -.nav:before, -.nav:after, -.pager:before, -.pager:after, -.panel-body:before, -.panel-body:after { - content: " "; - display: table; -} -.clearfix:after, -.container:after, -.container-fluid:after, -.row:after, -.form-horizontal .form-group:after, -.dl-horizontal dd:after, -.navbar:after, -.navbar-header:after, -.navbar-collapse:after, -.modal-header:after, -.modal-footer:after, -.nav:after, -.pager:after, -.panel-body:after { - clear: both; -} -.center-block { - display: block; - margin-left: auto; - margin-right: auto; -} -.pull-right { - float: right !important; -} -.pull-left { - float: left !important; -} -.hide { - display: none !important; -} -.show { - display: block !important; -} -.invisible { - visibility: hidden; -} -.text-hide { - font: 0/0 a; - color: transparent; - text-shadow: none; - background-color: transparent; - border: 0; -} -.hidden { - display: none !important; -} -.affix { - position: fixed; -} -.navbar > .container-fluid > .navbar-nav:not(.pull-right):first-child, -.navbar > .container-fluid > .navbar-form:not(.pull-right):first-child { - margin-left: -15px; - margin-top: 4px; -} -.navbar { - border-width: 0; -} -.navbar-btn-link { - margin: 0; - border-radius: 0; -} -@media (max-width: 768px) { - .navbar-btn-link { - width: 100%; - text-align: left; - } -} -.navbar-default .badge { - background-color: #FFF; - color: #F5F7FA; -} -.navbar-inverse .kbnGlobalNav__logoBrand { - height: 45px; - width: 252px; - background-color: #4b4f5d; -} -.navbar-inverse .kbnGlobalNav__smallLogoBrand { - height: 45px; - width: 45px; - background-color: #4b4f5d; -} -.navbar-inverse .badge { - background-color: #FFF; - color: #4b4f5d; -} -.navbar-brand { - cursor: default; - font-size: 1.8em; - user-select: none; -} -.navbar-nav { - font-size: 12px; -} -.navbar-nav > .active > a { - border-bottom-color: #7b7b7b; - background-color: transparent; -} -.navbar-toggle { - margin-top: 4px; -} -.text-primary, -.text-primary:hover { - color: #343741; -} -.text-success, -.text-success:hover { - color: #017D73; -} -.text-danger, -.text-danger:hover { - color: #BD271E; -} -.text-warning, -.text-warning:hover { - color: #F5A700; -} -.text-info, -.text-info:hover { - color: #006BB4; -} -table .success, -.table .success, -table .warning, -.table .warning, -table .danger, -.table .danger, -table .info, -.table .info { - color: #FFF; -} -table .success a, -.table .success a, -table .warning a, -.table .warning a, -table .danger a, -.table .danger a, -table .info a, -.table .info a { - color: #FFF; -} -.table-bordered > thead > tr > th, -.table-bordered > tbody > tr > th, -.table-bordered > tfoot > tr > th, -.table-bordered > thead > tr > td, -.table-bordered > tbody > tr > td, -.table-bordered > tfoot > tr > td { - border: 1px solid #D3DAE6; -} -.form-control, -input { - border-width: 1px; - -webkit-box-shadow: none; - box-shadow: none; -} -.form-control:focus, -input:focus { - -webkit-box-shadow: none; - box-shadow: none; -} -.has-warning .help-block, -.has-warning .control-label, -.has-warning .radio, -.has-warning .checkbox, -.has-warning .radio-inline, -.has-warning .checkbox-inline, -.has-warning .form-control-feedback { - color: #F5A700; -} -.has-warning .form-control, -.has-warning .form-control:focus { - border: 1px solid; - border-color: #F5A700; -} -.has-warning .input-group-addon { - border-color: #F5A700; -} -.has-error .help-block, -.has-error .control-label, -.has-error .radio, -.has-error .checkbox, -.has-error .radio-inline, -.has-error .checkbox-inline, -.has-error .form-control-feedback { - color: #BD271E; -} -.has-error .form-control, -.has-error .form-control:focus { - border: 1px solid; - border-color: #BD271E; -} -.has-error .input-group-addon { - border-color: #BD271E; -} -.has-success .help-block, -.has-success .control-label, -.has-success .radio, -.has-success .checkbox, -.has-success .radio-inline, -.has-success .checkbox-inline, -.has-success .form-control-feedback { - color: #017D73; -} -.has-success .form-control, -.has-success .form-control:focus { - border: solid #017D73; -} -.has-success .input-group-addon { - border-color: #017D73; -} -.nav .open > a, -.nav .open > a:hover, -.nav .open > a:focus { - border-color: transparent; -} -.pager a, -.pager a:hover { - color: #FFF; -} -.pager .disabled > a, -.pager .disabled > a:hover, -.pager .disabled > a:focus, -.pager .disabled > span { - background-color: rgba(38, 38, 38, 0); -} -.panel { - border-radius: 0; - -webkit-box-shadow: 0 0 0 rgba(0, 0, 0, 0); - box-shadow: 0 0 0 rgba(0, 0, 0, 0); -} -.progress { - -webkit-box-shadow: none; - box-shadow: none; -} -.progress .progress-bar { - font-size: 10px; - line-height: 10px; -} -.well { - -webkit-box-shadow: none; - box-shadow: none; -} diff --git a/src/dev/build/build_distributables.ts b/src/dev/build/build_distributables.ts index 40a1afa51add6d..ae8953dd25bb0d 100644 --- a/src/dev/build/build_distributables.ts +++ b/src/dev/build/build_distributables.ts @@ -64,10 +64,11 @@ export async function buildDistributables(log: ToolingLog, options: BuildOptions if (options.createGenericFolders) { await run(Tasks.CopySource); await run(Tasks.CopyBinScripts); - await run(Tasks.ReplaceFavicon); + await run(Tasks.CreateEmptyDirsAndFiles); await run(Tasks.CreateReadme); await run(Tasks.BuildBazelPackages); + await run(Tasks.ReplaceFavicon); if (options.buildCanvasShareableRuntime) { await run(Tasks.BuildCanvasShareableRuntime); } diff --git a/src/dev/build/tasks/copy_source_task.ts b/src/dev/build/tasks/copy_source_task.ts index 27426f25b90f8f..536b59e663a3d0 100644 --- a/src/dev/build/tasks/copy_source_task.ts +++ b/src/dev/build/tasks/copy_source_task.ts @@ -33,7 +33,6 @@ export const CopySource: Task = { '!src/**/mocks.{js,ts}', '!src/cli*/dev.js', '!src/plugins/telemetry/schema/**', - '!src/core/server/core_app/assets/favicons/favicon.distribution.{ico,png,svg}', '!src/setup_node_env/index.js', '!x-pack/plugins/telemetry_collection_xpack/schema/**', diff --git a/src/dev/build/tasks/replace_favicon.ts b/src/dev/build/tasks/replace_favicon.ts index 0d1602f324a2ab..0c9c3afa1f96d5 100644 --- a/src/dev/build/tasks/replace_favicon.ts +++ b/src/dev/build/tasks/replace_favicon.ts @@ -13,18 +13,24 @@ export const ReplaceFavicon: Task = { async run(config, log, build) { await copy( - config.resolveFromRepo('src/core/server/core_app/assets/favicons/favicon.distribution.ico'), - build.resolvePath('src/core/server/core_app/assets/favicons/favicon.ico') + config.resolveFromRepo( + 'packages/core/apps/core-apps-server-internal/assets/favicons/favicon.distribution.ico' + ), + build.resolvePath('packages/core/apps/core-apps-server-internal/assets/favicons/favicon.ico') ); await copy( - config.resolveFromRepo('src/core/server/core_app/assets/favicons/favicon.distribution.png'), - build.resolvePath('src/core/server/core_app/assets/favicons/favicon.png') + config.resolveFromRepo( + 'packages/core/apps/core-apps-server-internal/assets/favicons/favicon.distribution.png' + ), + build.resolvePath('packages/core/apps/core-apps-server-internal/assets/favicons/favicon.png') ); await copy( - config.resolveFromRepo('src/core/server/core_app/assets/favicons/favicon.distribution.svg'), - build.resolvePath('src/core/server/core_app/assets/favicons/favicon.svg') + config.resolveFromRepo( + 'packages/core/apps/core-apps-server-internal/assets/favicons/favicon.distribution.svg' + ), + build.resolvePath('packages/core/apps/core-apps-server-internal/assets/favicons/favicon.svg') ); }, }; diff --git a/src/dev/precommit_hook/casing_check_config.js b/src/dev/precommit_hook/casing_check_config.js index 1289768bfbcd96..2cfa9b0299c3f2 100644 --- a/src/dev/precommit_hook/casing_check_config.js +++ b/src/dev/precommit_hook/casing_check_config.js @@ -31,7 +31,7 @@ export const IGNORE_FILE_GLOBS = [ '**/.*', '**/__mocks__/**/*', 'x-pack/docs/**/*', - 'packages/core/apps/core-apps-server-internal/src/assets/fonts/**/*', + 'packages/core/apps/core-apps-server-internal/assets/fonts/**/*', 'src/dev/code_coverage/ingest_coverage/integration_tests/mocks/**/*', 'packages/kbn-utility-types/test-d/**/*', '**/Jenkinsfile*', diff --git a/src/plugins/chart_expressions/expression_gauge/kibana.json b/src/plugins/chart_expressions/expression_gauge/kibana.json index 9e5d4da5d7ec64..1de64537db116b 100755 --- a/src/plugins/chart_expressions/expression_gauge/kibana.json +++ b/src/plugins/chart_expressions/expression_gauge/kibana.json @@ -4,7 +4,7 @@ "kibanaVersion": "kibana", "owner": { "name": "Vis Editors", - "githubTeam": "kibana-vis-editors" + "githubTeam": "kibana-visualizations" }, "description": "Expression Gauge plugin adds a `gauge` renderer and function to the expression plugin. The renderer will display the `gauge` chart.", "server": true, diff --git a/src/plugins/chart_expressions/expression_heatmap/kibana.json b/src/plugins/chart_expressions/expression_heatmap/kibana.json index 3608144a8617c0..d0c6acc2a23e51 100755 --- a/src/plugins/chart_expressions/expression_heatmap/kibana.json +++ b/src/plugins/chart_expressions/expression_heatmap/kibana.json @@ -4,7 +4,7 @@ "kibanaVersion": "kibana", "owner": { "name": "Vis Editors", - "githubTeam": "kibana-vis-editors" + "githubTeam": "kibana-visualizations" }, "description": "Expression Heatmap plugin adds a `heatmap` renderer and function to the expression plugin. The renderer will display the `heatmap` chart.", "server": true, diff --git a/src/plugins/chart_expressions/expression_legacy_metric/kibana.json b/src/plugins/chart_expressions/expression_legacy_metric/kibana.json index 5027ff2625d0bf..d3badb13dd0bbc 100755 --- a/src/plugins/chart_expressions/expression_legacy_metric/kibana.json +++ b/src/plugins/chart_expressions/expression_legacy_metric/kibana.json @@ -4,7 +4,7 @@ "kibanaVersion": "kibana", "owner": { "name": "Vis Editors", - "githubTeam": "kibana-vis-editors" + "githubTeam": "kibana-visualizations" }, "description": "Adds a `metric` renderer and function to the expression plugin. The renderer will display the `legacy metric` chart.", "server": true, diff --git a/src/plugins/chart_expressions/expression_metric/kibana.json b/src/plugins/chart_expressions/expression_metric/kibana.json index 5c09ef3b6c365c..ed3ef2173f2009 100755 --- a/src/plugins/chart_expressions/expression_metric/kibana.json +++ b/src/plugins/chart_expressions/expression_metric/kibana.json @@ -4,7 +4,7 @@ "kibanaVersion": "kibana", "owner": { "name": "Vis Editors", - "githubTeam": "kibana-vis-editors" + "githubTeam": "kibana-visualizations" }, "description": "Adds a `metric` renderer and function to the expression plugin. The renderer will display the `metric` chart.", "server": true, diff --git a/src/plugins/chart_expressions/expression_partition_vis/kibana.json b/src/plugins/chart_expressions/expression_partition_vis/kibana.json index e4819f822148d4..17d6e40aaf1b07 100755 --- a/src/plugins/chart_expressions/expression_partition_vis/kibana.json +++ b/src/plugins/chart_expressions/expression_partition_vis/kibana.json @@ -4,7 +4,7 @@ "kibanaVersion": "kibana", "owner": { "name": "Vis Editors", - "githubTeam": "kibana-vis-editors" + "githubTeam": "kibana-visualizations" }, "description": "Expression Partition Visualization plugin adds a `partitionVis` renderer and `pieVis`, `mosaicVis`, `treemapVis`, `waffleVis` functions to the expression plugin. The renderer will display the `pie`, `waffle`, `treemap` and `mosaic` charts.", "server": true, diff --git a/src/plugins/chart_expressions/expression_tagcloud/kibana.json b/src/plugins/chart_expressions/expression_tagcloud/kibana.json index 20ed1ec360969f..b90c1f6e71c7ad 100755 --- a/src/plugins/chart_expressions/expression_tagcloud/kibana.json +++ b/src/plugins/chart_expressions/expression_tagcloud/kibana.json @@ -9,7 +9,7 @@ "optionalPlugins": ["usageCollection"], "owner": { "name": "Vis Editors", - "githubTeam": "kibana-vis-editors" + "githubTeam": "kibana-visualizations" }, "description": "Expression Tagcloud plugin adds a `tagcloud` renderer and function to the expression plugin. The renderer will display the `Wordcloud` chart." } diff --git a/src/plugins/chart_expressions/expression_xy/kibana.json b/src/plugins/chart_expressions/expression_xy/kibana.json index eebc9f1382b850..5c37e14072ed5c 100755 --- a/src/plugins/chart_expressions/expression_xy/kibana.json +++ b/src/plugins/chart_expressions/expression_xy/kibana.json @@ -4,7 +4,7 @@ "kibanaVersion": "kibana", "owner": { "name": "Vis Editors", - "githubTeam": "kibana-vis-editors" + "githubTeam": "kibana-visualizations" }, "description": "Expression XY plugin adds a `xy` renderer and function to the expression plugin. The renderer will display the `xy` chart.", "server": true, diff --git a/src/plugins/charts/kibana.json b/src/plugins/charts/kibana.json index a3e0da41056d77..db8143b15f330e 100644 --- a/src/plugins/charts/kibana.json +++ b/src/plugins/charts/kibana.json @@ -7,6 +7,6 @@ "requiredPlugins": ["expressions"], "owner": { "name": "Vis Editors", - "githubTeam": "kibana-vis-editors" + "githubTeam": "kibana-visualizations" } } diff --git a/src/plugins/controls/common/control_group/control_group_panel_diff_system.ts b/src/plugins/controls/common/control_group/control_group_panel_diff_system.ts index 0ef2438494d7e1..dbe9c992460b33 100644 --- a/src/plugins/controls/common/control_group/control_group_panel_diff_system.ts +++ b/src/plugins/controls/common/control_group/control_group_panel_diff_system.ts @@ -33,25 +33,31 @@ export const ControlPanelDiffSystems: { const { exclude: excludeA, + hideExists: hideExistsA, + hideExclude: hideExcludeA, selectedOptions: selectedA, singleSelect: singleSelectA, - hideExclude: hideExcludeA, + existsSelected: existsSelectedA, runPastTimeout: runPastTimeoutA, ...inputA }: Partial = initialInput.explicitInput; const { exclude: excludeB, + hideExists: hideExistsB, + hideExclude: hideExcludeB, selectedOptions: selectedB, singleSelect: singleSelectB, - hideExclude: hideExcludeB, + existsSelected: existsSelectedB, runPastTimeout: runPastTimeoutB, ...inputB }: Partial = newInput.explicitInput; return ( Boolean(excludeA) === Boolean(excludeB) && - Boolean(singleSelectA) === Boolean(singleSelectB) && + Boolean(hideExistsA) === Boolean(hideExistsB) && Boolean(hideExcludeA) === Boolean(hideExcludeB) && + Boolean(singleSelectA) === Boolean(singleSelectB) && + Boolean(existsSelectedA) === Boolean(existsSelectedB) && Boolean(runPastTimeoutA) === Boolean(runPastTimeoutB) && isEqual(selectedA ?? [], selectedB ?? []) && deepEqual(inputA, inputB) diff --git a/src/plugins/controls/common/options_list/mocks.tsx b/src/plugins/controls/common/options_list/mocks.tsx index ccbe3a11324799..c6d15ec9fcdb6e 100644 --- a/src/plugins/controls/common/options_list/mocks.tsx +++ b/src/plugins/controls/common/options_list/mocks.tsx @@ -6,10 +6,12 @@ * Side Public License, v 1. */ -import { ReduxEmbeddableContext } from '@kbn/presentation-util-plugin/public/redux_embeddables/types'; -import { ControlOutput } from '../../public/types'; +import { createReduxEmbeddableTools } from '@kbn/presentation-util-plugin/public/redux_embeddables/create_redux_embeddable_tools'; + +import { OptionsListEmbeddable, OptionsListEmbeddableFactory } from '../../public'; import { OptionsListComponentState, OptionsListReduxState } from '../../public/options_list/types'; import { optionsListReducers } from '../../public/options_list/options_list_reducers'; +import { ControlFactory, ControlOutput } from '../../public/types'; import { OptionsListEmbeddableInput } from './types'; const mockOptionsListComponentState = { @@ -36,27 +38,26 @@ const mockOptionsListOutput = { loading: false, } as ControlOutput; -export const mockOptionsListContext = ( +export const mockOptionsListReduxEmbeddableTools = async ( partialState?: Partial -): ReduxEmbeddableContext => { - const mockReduxState = { - componentState: { +) => { + const optionsListFactoryStub = new OptionsListEmbeddableFactory(); + const optionsListControlFactory = optionsListFactoryStub as unknown as ControlFactory; + optionsListControlFactory.getDefaultInput = () => ({}); + const mockEmbeddable = (await optionsListControlFactory.create({ + ...mockOptionsListEmbeddableInput, + ...partialState?.explicitInput, + })) as OptionsListEmbeddable; + mockEmbeddable.getOutput = jest.fn().mockReturnValue(mockOptionsListOutput); + + const mockReduxEmbeddableTools = createReduxEmbeddableTools({ + embeddable: mockEmbeddable, + reducers: optionsListReducers, + initialComponentState: { ...mockOptionsListComponentState, ...partialState?.componentState, }, - explicitInput: { - ...mockOptionsListEmbeddableInput, - ...partialState?.explicitInput, - }, - output: { - ...mockOptionsListOutput, - ...partialState?.output, - }, - } as OptionsListReduxState; + }); - return { - actions: {}, - useEmbeddableDispatch: () => {}, - useEmbeddableSelector: (selector: any) => selector(mockReduxState), - } as unknown as ReduxEmbeddableContext; + return mockReduxEmbeddableTools; }; diff --git a/src/plugins/controls/common/options_list/types.ts b/src/plugins/controls/common/options_list/types.ts index 59b78ee38d0b94..5a0080039e21a4 100644 --- a/src/plugins/controls/common/options_list/types.ts +++ b/src/plugins/controls/common/options_list/types.ts @@ -15,9 +15,11 @@ export const OPTIONS_LIST_CONTROL = 'optionsListControl'; export interface OptionsListEmbeddableInput extends DataControlInput { selectedOptions?: string[]; + existsSelected?: boolean; runPastTimeout?: boolean; singleSelect?: boolean; hideExclude?: boolean; + hideExists?: boolean; exclude?: boolean; } diff --git a/src/plugins/controls/public/options_list/components/options_list.scss b/src/plugins/controls/public/options_list/components/options_list.scss index 53ad3990cd3717..928a10f3651b87 100644 --- a/src/plugins/controls/public/options_list/components/options_list.scss +++ b/src/plugins/controls/public/options_list/components/options_list.scss @@ -35,6 +35,16 @@ font-weight: 300; } +.optionsList__existsFilter { + font-style: italic; +} + +.optionsList__negateLabel { + font-weight: bold; + font-size: $euiSizeM; + color: $euiColorDanger; +} + .optionsList__ignoredBadge { margin-left: $euiSizeS; } diff --git a/src/plugins/controls/public/options_list/components/options_list_control.test.tsx b/src/plugins/controls/public/options_list/components/options_list_control.test.tsx new file mode 100644 index 00000000000000..a4d5028f0f7be2 --- /dev/null +++ b/src/plugins/controls/public/options_list/components/options_list_control.test.tsx @@ -0,0 +1,60 @@ +/* + * 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 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 or the Server + * Side Public License, v 1. + */ + +import React from 'react'; + +import { mountWithIntl } from '@kbn/test-jest-helpers'; +import { findTestSubject } from '@elastic/eui/lib/test'; + +import { OptionsListComponentState, OptionsListReduxState } from '../types'; +import { ControlOutput, OptionsListEmbeddableInput } from '../..'; +import { mockOptionsListReduxEmbeddableTools } from '../../../common/mocks'; +import { OptionsListControl } from './options_list_control'; +import { BehaviorSubject } from 'rxjs'; + +describe('Options list control', () => { + const defaultProps = { + typeaheadSubject: new BehaviorSubject(''), + }; + + interface MountOptions { + componentState: Partial; + explicitInput: Partial; + output: Partial; + } + + async function mountComponent(options?: Partial) { + const mockReduxEmbeddableTools = await mockOptionsListReduxEmbeddableTools({ + componentState: options?.componentState ?? {}, + explicitInput: options?.explicitInput ?? {}, + output: options?.output ?? {}, + } as Partial); + + return mountWithIntl( + + + + ); + } + + test('if exclude = false and existsSelected = true, then the option should read "Exists"', async () => { + const control = await mountComponent({ + explicitInput: { id: 'testExists', exclude: false, existsSelected: true }, + }); + const existsOption = findTestSubject(control, 'optionsList-control-testExists'); + expect(existsOption.text()).toBe('Exists'); + }); + + test('if exclude = true and existsSelected = true, then the option should read "Does not exist"', async () => { + const control = await mountComponent({ + explicitInput: { id: 'testDoesNotExist', exclude: true, existsSelected: true }, + }); + const existsOption = findTestSubject(control, 'optionsList-control-testDoesNotExist'); + expect(existsOption.text()).toBe('DOES NOT Exist'); + }); +}); diff --git a/src/plugins/controls/public/options_list/components/options_list_control.tsx b/src/plugins/controls/public/options_list/components/options_list_control.tsx index 93bf0cbef864e2..1f19382ab506b5 100644 --- a/src/plugins/controls/public/options_list/components/options_list_control.tsx +++ b/src/plugins/controls/public/options_list/components/options_list_control.tsx @@ -11,13 +11,7 @@ import classNames from 'classnames'; import { debounce, isEmpty } from 'lodash'; import React, { useCallback, useEffect, useMemo, useState, useRef } from 'react'; -import { - EuiFilterButton, - EuiFilterGroup, - EuiPopover, - EuiTextColor, - useResizeObserver, -} from '@elastic/eui'; +import { EuiFilterButton, EuiFilterGroup, EuiPopover, useResizeObserver } from '@elastic/eui'; import { useReduxEmbeddableContext } from '@kbn/presentation-util-plugin/public'; import { OptionsListStrings } from './options_list_strings'; @@ -46,10 +40,11 @@ export const OptionsListControl = ({ typeaheadSubject }: { typeaheadSubject: Sub const validSelections = select((state) => state.componentState.validSelections); const selectedOptions = select((state) => state.explicitInput.selectedOptions); + const existsSelected = select((state) => state.explicitInput.existsSelected); const controlStyle = select((state) => state.explicitInput.controlStyle); const singleSelect = select((state) => state.explicitInput.singleSelect); - const id = select((state) => state.explicitInput.id); const exclude = select((state) => state.explicitInput.exclude); + const id = select((state) => state.explicitInput.id); const loading = select((state) => state.output.loading); @@ -83,22 +78,34 @@ export const OptionsListControl = ({ typeaheadSubject }: { typeaheadSubject: Sub selectionDisplayNode: ( <> {exclude && ( - - {OptionsListStrings.control.getNegate()}{' '} - - )} - {validSelections && ( - {validSelections?.join(OptionsListStrings.control.getSeparator())} + <> + + {existsSelected + ? OptionsListStrings.control.getExcludeExists() + : OptionsListStrings.control.getNegate()} + {' '} + )} - {invalidSelections && ( - - {invalidSelections.join(OptionsListStrings.control.getSeparator())} + {existsSelected ? ( + + {OptionsListStrings.controlAndPopover.getExists(+Boolean(exclude))} + ) : ( + <> + {validSelections && ( + {validSelections?.join(OptionsListStrings.control.getSeparator())} + )} + {invalidSelections && ( + + {invalidSelections.join(OptionsListStrings.control.getSeparator())} + + )} + )} ), }; - }, [exclude, validSelections, invalidSelections]); + }, [exclude, existsSelected, validSelections, invalidSelections]); const button = (
@@ -115,7 +122,9 @@ export const OptionsListControl = ({ typeaheadSubject }: { typeaheadSubject: Sub numActiveFilters={validSelectionsCount} hasActiveFilters={Boolean(validSelectionsCount)} > - {hasSelections ? selectionDisplayNode : OptionsListStrings.control.getPlaceholder()} + {hasSelections || existsSelected + ? selectionDisplayNode + : OptionsListStrings.control.getPlaceholder()}
); @@ -136,6 +145,7 @@ export const OptionsListControl = ({ typeaheadSubject }: { typeaheadSubject: Sub className="optionsList__popoverOverride" closePopover={() => setIsPopoverOpen(false)} anchorClassName="optionsList__anchorOverride" + aria-labelledby={`control-popover-${id}`} > diff --git a/src/plugins/controls/public/options_list/components/options_list_editor_options.tsx b/src/plugins/controls/public/options_list/components/options_list_editor_options.tsx index 0723fcaad6ba67..d19c907a09f4b2 100644 --- a/src/plugins/controls/public/options_list/components/options_list_editor_options.tsx +++ b/src/plugins/controls/public/options_list/components/options_list_editor_options.tsx @@ -8,16 +8,28 @@ import React, { useState } from 'react'; -import { EuiFlexGroup, EuiFlexItem, EuiFormRow, EuiIconTip, EuiSwitch } from '@elastic/eui'; +import { + EuiFlexGroup, + EuiFlexItem, + EuiFormRow, + EuiIconTip, + EuiSwitch, + EuiSwitchEvent, +} from '@elastic/eui'; import { css } from '@emotion/react'; import { OptionsListStrings } from './options_list_strings'; import { ControlEditorProps, OptionsListEmbeddableInput } from '../..'; - interface OptionsListEditorState { singleSelect?: boolean; runPastTimeout?: boolean; hideExclude?: boolean; + hideExists?: boolean; +} + +interface SwitchProps { + checked: boolean; + onChange: (event: EuiSwitchEvent) => void; } export const OptionsListEditorOptions = ({ @@ -28,8 +40,33 @@ export const OptionsListEditorOptions = ({ singleSelect: initialInput?.singleSelect, runPastTimeout: initialInput?.runPastTimeout, hideExclude: initialInput?.hideExclude, + hideExists: initialInput?.hideExists, }); + const SwitchWithTooltip = ({ + switchProps, + label, + tooltip, + }: { + switchProps: SwitchProps; + label: string; + tooltip: string; + }) => ( + + + + + + + + + ); + return ( <> @@ -54,29 +91,31 @@ export const OptionsListEditorOptions = ({ /> - - - { - onChange({ runPastTimeout: !state.runPastTimeout }); - setState((s) => ({ ...s, runPastTimeout: !s.runPastTimeout })); - }} - /> - - - - - + { + onChange({ hideExists: !state.hideExists }); + setState((s) => ({ ...s, hideExists: !s.hideExists })); + if (initialInput?.existsSelected) onChange({ existsSelected: false }); + }, + }} + /> + + + { + onChange({ runPastTimeout: !state.runPastTimeout }); + setState((s) => ({ ...s, runPastTimeout: !s.runPastTimeout })); + }, + }} + /> ); diff --git a/src/plugins/controls/public/options_list/components/options_list_popover.test.tsx b/src/plugins/controls/public/options_list/components/options_list_popover.test.tsx index eca6fe72376a12..1ee6de1c45763c 100644 --- a/src/plugins/controls/public/options_list/components/options_list_popover.test.tsx +++ b/src/plugins/controls/public/options_list/components/options_list_popover.test.tsx @@ -11,12 +11,11 @@ import { ReactWrapper } from 'enzyme'; import { mountWithIntl } from '@kbn/test-jest-helpers'; import { findTestSubject } from '@elastic/eui/lib/test'; -import { EmbeddableReduxContext } from '@kbn/presentation-util-plugin/public/redux_embeddables/use_redux_embeddable_context'; import { OptionsListPopover, OptionsListPopoverProps } from './options_list_popover'; import { OptionsListComponentState, OptionsListReduxState } from '../types'; import { ControlOutput, OptionsListEmbeddableInput } from '../..'; -import { mockOptionsListContext } from '../../../common/mocks'; +import { mockOptionsListReduxEmbeddableTools } from '../../../common/mocks'; describe('Options list popover', () => { const defaultProps = { @@ -31,18 +30,18 @@ describe('Options list popover', () => { popoverProps: Partial; } - function mountComponent(options?: Partial) { + async function mountComponent(options?: Partial) { const compProps = { ...defaultProps, ...(options?.popoverProps ?? {}) }; - const context = mockOptionsListContext({ + const mockReduxEmbeddableTools = await mockOptionsListReduxEmbeddableTools({ componentState: options?.componentState ?? {}, explicitInput: options?.explicitInput ?? {}, output: options?.output ?? {}, } as Partial); return mountWithIntl( - + - + ); } @@ -54,19 +53,19 @@ describe('Options list popover', () => { showOnlySelectedButton.simulate('click'); }; - test('available options list width responds to container size', () => { - let popover = mountComponent({ popoverProps: { width: 301 } }); + test('available options list width responds to container size', async () => { + let popover = await mountComponent({ popoverProps: { width: 301 } }); let availableOptionsDiv = findTestSubject(popover, 'optionsList-control-available-options'); expect(availableOptionsDiv.getDOMNode().getAttribute('style')).toBe('width: 301px;'); // the div cannot be smaller than 301 pixels wide - popover = mountComponent({ popoverProps: { width: 300 } }); + popover = await mountComponent({ popoverProps: { width: 300 } }); availableOptionsDiv = findTestSubject(popover, 'optionsList-control-available-options'); expect(availableOptionsDiv.getDOMNode().getAttribute('style')).toBe(null); }); - test('no available options', () => { - const popover = mountComponent({ componentState: { availableOptions: [] } }); + test('no available options', async () => { + const popover = await mountComponent({ componentState: { availableOptions: [] } }); const availableOptionsDiv = findTestSubject(popover, 'optionsList-control-available-options'); const noOptionsDiv = findTestSubject( availableOptionsDiv, @@ -75,8 +74,8 @@ describe('Options list popover', () => { expect(noOptionsDiv.exists()).toBeTruthy(); }); - test('display error message when the show only selected toggle is true but there are no selections', () => { - const popover = mountComponent(); + test('display error message when the show only selected toggle is true but there are no selections', async () => { + const popover = await mountComponent(); clickShowOnlySelections(popover); const availableOptionsDiv = findTestSubject(popover, 'optionsList-control-available-options'); const noSelectionsDiv = findTestSubject( @@ -86,28 +85,31 @@ describe('Options list popover', () => { expect(noSelectionsDiv.exists()).toBeTruthy(); }); - test('show only selected options', () => { + test('show only selected options', async () => { const selections = ['woof', 'bark']; - const popover = mountComponent({ + const popover = await mountComponent({ explicitInput: { selectedOptions: selections }, }); clickShowOnlySelections(popover); const availableOptionsDiv = findTestSubject(popover, 'optionsList-control-available-options'); - availableOptionsDiv.children().forEach((child, i) => { - expect(child.text()).toBe(selections[i]); - }); + availableOptionsDiv + .childAt(0) + .children() + .forEach((child, i) => { + expect(child.text()).toBe(selections[i]); + }); }); - test('should default to exclude = false', () => { - const popover = mountComponent(); + test('should default to exclude = false', async () => { + const popover = await mountComponent(); const includeButton = findTestSubject(popover, 'optionsList__includeResults'); const excludeButton = findTestSubject(popover, 'optionsList__excludeResults'); expect(includeButton.prop('checked')).toBe(true); expect(excludeButton.prop('checked')).toBeFalsy(); }); - test('if exclude = true, select appropriate button in button group', () => { - const popover = mountComponent({ + test('if exclude = true, select appropriate button in button group', async () => { + const popover = await mountComponent({ explicitInput: { exclude: true }, }); const includeButton = findTestSubject(popover, 'optionsList__includeResults'); @@ -115,4 +117,56 @@ describe('Options list popover', () => { expect(includeButton.prop('checked')).toBeFalsy(); expect(excludeButton.prop('checked')).toBe(true); }); + + test('clicking another option unselects "Exists"', async () => { + const popover = await mountComponent({ + explicitInput: { existsSelected: true }, + }); + const woofOption = findTestSubject(popover, 'optionsList-control-selection-woof'); + woofOption.simulate('click'); + + const availableOptionsDiv = findTestSubject(popover, 'optionsList-control-available-options'); + availableOptionsDiv.children().forEach((child, i) => { + if (child.text() === 'woof') expect(child.prop('checked')).toBe('on'); + else expect(child.prop('checked')).toBeFalsy(); + }); + }); + + test('clicking "Exists" unselects all other selections', async () => { + const selections = ['woof', 'bark']; + const popover = await mountComponent({ + explicitInput: { existsSelected: false, selectedOptions: selections }, + }); + const existsOption = findTestSubject(popover, 'optionsList-control-selection-exists'); + let availableOptionsDiv = findTestSubject(popover, 'optionsList-control-available-options'); + availableOptionsDiv.children().forEach((child, i) => { + if (selections.includes(child.text())) expect(child.prop('checked')).toBe('on'); + else expect(child.prop('checked')).toBeFalsy(); + }); + + existsOption.simulate('click'); + availableOptionsDiv = findTestSubject(popover, 'optionsList-control-available-options'); + availableOptionsDiv.children().forEach((child, i) => { + if (child.text() === 'Exists (*)') expect(child.prop('checked')).toBe('on'); + else expect(child.prop('checked')).toBeFalsy(); + }); + }); + + test('if existsSelected = false and no suggestions, then "Exists" does not show up', async () => { + const popover = await mountComponent({ + componentState: { availableOptions: [] }, + explicitInput: { existsSelected: false }, + }); + const existsOption = findTestSubject(popover, 'optionsList-control-selection-exists'); + expect(existsOption.exists()).toBeFalsy(); + }); + + test('if existsSelected = true, "Exists" is the only option when "Show only selected options" is toggled', async () => { + const popover = await mountComponent({ + explicitInput: { existsSelected: true }, + }); + clickShowOnlySelections(popover); + const availableOptionsDiv = findTestSubject(popover, 'optionsList-control-available-options'); + expect(availableOptionsDiv.children().at(0).text()).toBe('Exists'); + }); }); diff --git a/src/plugins/controls/public/options_list/components/options_list_popover.tsx b/src/plugins/controls/public/options_list/components/options_list_popover.tsx index 48be0d92532856..bc1e62fccfda73 100644 --- a/src/plugins/controls/public/options_list/components/options_list_popover.tsx +++ b/src/plugins/controls/public/options_list/components/options_list_popover.tsx @@ -6,286 +6,70 @@ * Side Public License, v 1. */ -import React, { useMemo, useState } from 'react'; +import React, { useState } from 'react'; import { isEmpty } from 'lodash'; -import { - EuiFilterSelectItem, - EuiPopoverTitle, - EuiFieldSearch, - EuiButtonIcon, - EuiFlexGroup, - EuiFlexItem, - EuiFormRow, - EuiToolTip, - EuiSpacer, - EuiBadge, - EuiIcon, - EuiTitle, - EuiPopoverFooter, - EuiButtonGroup, - useEuiBackgroundColor, -} from '@elastic/eui'; -import { css } from '@emotion/react'; +import { EuiPopoverTitle } from '@elastic/eui'; import { useReduxEmbeddableContext } from '@kbn/presentation-util-plugin/public'; -import { optionsListReducers } from '../options_list_reducers'; import { OptionsListReduxState } from '../types'; import { OptionsListStrings } from './options_list_strings'; +import { optionsListReducers } from '../options_list_reducers'; +import { OptionsListPopoverFooter } from './options_list_popover_footer'; +import { OptionsListPopoverActionBar } from './options_list_popover_action_bar'; +import { OptionsListPopoverSuggestions } from './options_list_popover_suggestions'; +import { OptionsListPopoverInvalidSelections } from './options_list_popover_invalid_selections'; export interface OptionsListPopoverProps { width: number; updateSearchString: (newSearchString: string) => void; } -const aggregationToggleButtons = [ - { - id: 'optionsList__includeResults', - label: OptionsListStrings.popover.getIncludeLabel(), - }, - { - id: 'optionsList__excludeResults', - label: OptionsListStrings.popover.getExcludeLabel(), - }, -]; - export const OptionsListPopover = ({ width, updateSearchString }: OptionsListPopoverProps) => { // Redux embeddable container Context - const { - useEmbeddableDispatch, - useEmbeddableSelector: select, - actions: { selectOption, deselectOption, clearSelections, replaceSelection, setExclude }, - } = useReduxEmbeddableContext(); - - const dispatch = useEmbeddableDispatch(); + const { useEmbeddableSelector: select } = useReduxEmbeddableContext< + OptionsListReduxState, + typeof optionsListReducers + >(); // Select current state from Redux using multiple selectors to avoid rerenders. const invalidSelections = select((state) => state.componentState.invalidSelections); - const totalCardinality = select((state) => state.componentState.totalCardinality); const availableOptions = select((state) => state.componentState.availableOptions); - const searchString = select((state) => state.componentState.searchString); const field = select((state) => state.componentState.field); - const selectedOptions = select((state) => state.explicitInput.selectedOptions); const hideExclude = select((state) => state.explicitInput.hideExclude); - const singleSelect = select((state) => state.explicitInput.singleSelect); + const fieldName = select((state) => state.explicitInput.fieldName); const title = select((state) => state.explicitInput.title); - const exclude = select((state) => state.explicitInput.exclude); - - const loading = select((state) => state.output.loading); - - // track selectedOptions and invalidSelections in sets for more efficient lookup - const selectedOptionsSet = useMemo(() => new Set(selectedOptions), [selectedOptions]); - const invalidSelectionsSet = useMemo( - () => new Set(invalidSelections), - [invalidSelections] - ); + const id = select((state) => state.explicitInput.id); const [showOnlySelected, setShowOnlySelected] = useState(false); - const euiBackgroundColor = useEuiBackgroundColor('subdued'); return ( - <> + {title} {field?.type !== 'boolean' && ( -
- - - - updateSearchString(event.target.value)} - value={searchString.value} - data-test-subj="optionsList-control-search-input" - placeholder={ - totalCardinality - ? OptionsListStrings.popover.getTotalCardinalityPlaceholder(totalCardinality) - : undefined - } - /> - - - {invalidSelections && invalidSelections.length > 0 && ( - - - {invalidSelections.length} - - - )} - - - - dispatch(clearSelections({}))} - /> - - - - - setShowOnlySelected(!showOnlySelected)} - /> - - - - -
+ )}
300 ? width : undefined }} - className="optionsList__items" + className="optionsList __items" data-option-count={availableOptions?.length ?? 0} data-test-subj={`optionsList-control-available-options`} > - {!showOnlySelected && ( - <> - {availableOptions?.map((availableOption, index) => ( - { - if (singleSelect) { - dispatch(replaceSelection(availableOption)); - return; - } - if (selectedOptionsSet.has(availableOption)) { - dispatch(deselectOption(availableOption)); - return; - } - dispatch(selectOption(availableOption)); - }} - > - {`${availableOption}`} - - ))} - - {!loading && (!availableOptions || availableOptions.length === 0) && ( -
-
- - -

{OptionsListStrings.popover.getEmptyMessage()}

-
-
- )} - - {!isEmpty(invalidSelections) && ( - <> - - - - - <> - {invalidSelections?.map((ignoredSelection, index) => ( - dispatch(deselectOption(ignoredSelection))} - > - {`${ignoredSelection}`} - - ))} - - - )} - - )} - {showOnlySelected && ( - <> - {selectedOptions && - selectedOptions.map((availableOption, index) => ( - dispatch(deselectOption(availableOption))} - className={ - invalidSelectionsSet.has(availableOption) - ? 'optionsList__selectionInvalid' - : undefined - } - > - {`${availableOption}`} - - ))} - {(!selectedOptions || selectedOptions.length === 0) && ( -
-
- - -

{OptionsListStrings.popover.getSelectionsEmptyMessage()}

-
-
- )} - + + {!showOnlySelected && invalidSelections && !isEmpty(invalidSelections) && ( + )}
- {!hideExclude && ( - - - dispatch(setExclude(optionId === 'optionsList__excludeResults')) - } - buttonSize="compressed" - data-test-subj="optionsList__includeExcludeButtonGroup" - /> - - )} - + {!hideExclude && } +
); }; diff --git a/src/plugins/controls/public/options_list/components/options_list_popover_action_bar.tsx b/src/plugins/controls/public/options_list/components/options_list_popover_action_bar.tsx new file mode 100644 index 00000000000000..ad8e2eec26e435 --- /dev/null +++ b/src/plugins/controls/public/options_list/components/options_list_popover_action_bar.tsx @@ -0,0 +1,130 @@ +/* + * 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 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 or the Server + * Side Public License, v 1. + */ + +import React from 'react'; + +import { + EuiFieldSearch, + EuiButtonIcon, + EuiFlexGroup, + EuiFlexItem, + EuiFormRow, + EuiToolTip, + EuiBadge, +} from '@elastic/eui'; +import { useReduxEmbeddableContext } from '@kbn/presentation-util-plugin/public'; + +import { OptionsListReduxState } from '../types'; +import { OptionsListStrings } from './options_list_strings'; +import { optionsListReducers } from '../options_list_reducers'; + +interface OptionsListPopoverProps { + showOnlySelected: boolean; + setShowOnlySelected: (value: boolean) => void; + updateSearchString: (newSearchString: string) => void; +} + +export const OptionsListPopoverActionBar = ({ + showOnlySelected, + setShowOnlySelected, + updateSearchString, +}: OptionsListPopoverProps) => { + // Redux embeddable container Context + const { + useEmbeddableDispatch, + useEmbeddableSelector: select, + actions: { clearSelections }, + } = useReduxEmbeddableContext(); + const dispatch = useEmbeddableDispatch(); + + // Select current state from Redux using multiple selectors to avoid rerenders. + const invalidSelections = select((state) => state.componentState.invalidSelections); + const totalCardinality = select((state) => state.componentState.totalCardinality); + const searchString = select((state) => state.componentState.searchString); + + return ( +
+ + + + updateSearchString(event.target.value)} + value={searchString.value} + data-test-subj="optionsList-control-search-input" + placeholder={ + totalCardinality + ? OptionsListStrings.popover.getTotalCardinalityPlaceholder(totalCardinality) + : undefined + } + autoFocus={true} + /> + + + {(invalidSelections?.length ?? 0) > 0 && ( + + + {invalidSelections?.length} + + + )} + + + + dispatch(clearSelections({}))} + /> + + + + + setShowOnlySelected(!showOnlySelected)} + /> + + + + +
+ ); +}; diff --git a/src/plugins/controls/public/options_list/components/options_list_popover_footer.tsx b/src/plugins/controls/public/options_list/components/options_list_popover_footer.tsx new file mode 100644 index 00000000000000..8a51a33a31ba07 --- /dev/null +++ b/src/plugins/controls/public/options_list/components/options_list_popover_footer.tsx @@ -0,0 +1,60 @@ +/* + * 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 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 or the Server + * Side Public License, v 1. + */ + +import React from 'react'; +import { EuiPopoverFooter, EuiButtonGroup, useEuiBackgroundColor } from '@elastic/eui'; +import { css } from '@emotion/react'; +import { useReduxEmbeddableContext } from '@kbn/presentation-util-plugin/public'; + +import { OptionsListReduxState } from '../types'; +import { OptionsListStrings } from './options_list_strings'; +import { optionsListReducers } from '../options_list_reducers'; + +const aggregationToggleButtons = [ + { + id: 'optionsList__includeResults', + label: OptionsListStrings.popover.getIncludeLabel(), + }, + { + id: 'optionsList__excludeResults', + label: OptionsListStrings.popover.getExcludeLabel(), + }, +]; + +export const OptionsListPopoverFooter = () => { + // Redux embeddable container Context + const { + useEmbeddableDispatch, + useEmbeddableSelector: select, + actions: { setExclude }, + } = useReduxEmbeddableContext(); + const dispatch = useEmbeddableDispatch(); + + // Select current state from Redux using multiple selectors to avoid rerenders. + const exclude = select((state) => state.explicitInput.exclude); + + return ( + <> + + dispatch(setExclude(optionId === 'optionsList__excludeResults'))} + buttonSize="compressed" + data-test-subj="optionsList__includeExcludeButtonGroup" + /> + + + ); +}; diff --git a/src/plugins/controls/public/options_list/components/options_list_popover_invalid_selections.tsx b/src/plugins/controls/public/options_list/components/options_list_popover_invalid_selections.tsx new file mode 100644 index 00000000000000..1a6ec2176dd427 --- /dev/null +++ b/src/plugins/controls/public/options_list/components/options_list_popover_invalid_selections.tsx @@ -0,0 +1,53 @@ +/* + * 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 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 or the Server + * Side Public License, v 1. + */ + +import React from 'react'; + +import { EuiFilterSelectItem, EuiSpacer, EuiTitle } from '@elastic/eui'; +import { useReduxEmbeddableContext } from '@kbn/presentation-util-plugin/public'; + +import { OptionsListReduxState } from '../types'; +import { OptionsListStrings } from './options_list_strings'; +import { optionsListReducers } from '../options_list_reducers'; + +export const OptionsListPopoverInvalidSelections = () => { + // Redux embeddable container Context + const { + useEmbeddableDispatch, + useEmbeddableSelector: select, + actions: { deselectOption }, + } = useReduxEmbeddableContext(); + const dispatch = useEmbeddableDispatch(); + + // Select current state from Redux using multiple selectors to avoid rerenders. + const invalidSelections = select((state) => state.componentState.invalidSelections); + + return ( + <> + + + + + {invalidSelections?.map((ignoredSelection, index) => ( + dispatch(deselectOption(ignoredSelection))} + > + {`${ignoredSelection}`} + + ))} + + ); +}; diff --git a/src/plugins/controls/public/options_list/components/options_list_popover_suggestions.tsx b/src/plugins/controls/public/options_list/components/options_list_popover_suggestions.tsx new file mode 100644 index 00000000000000..5ca609d6ac64d2 --- /dev/null +++ b/src/plugins/controls/public/options_list/components/options_list_popover_suggestions.tsx @@ -0,0 +1,123 @@ +/* + * 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 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 or the Server + * Side Public License, v 1. + */ + +import React, { useMemo } from 'react'; + +import { EuiFilterSelectItem, EuiSpacer, EuiIcon } from '@elastic/eui'; +import { useReduxEmbeddableContext } from '@kbn/presentation-util-plugin/public'; + +import { OptionsListReduxState } from '../types'; +import { OptionsListStrings } from './options_list_strings'; +import { optionsListReducers } from '../options_list_reducers'; + +interface OptionsListPopoverSuggestionsProps { + showOnlySelected: boolean; +} + +export const OptionsListPopoverSuggestions = ({ + showOnlySelected, +}: OptionsListPopoverSuggestionsProps) => { + // Redux embeddable container Context + const { + useEmbeddableDispatch, + useEmbeddableSelector: select, + actions: { replaceSelection, deselectOption, selectOption, selectExists }, + } = useReduxEmbeddableContext(); + const dispatch = useEmbeddableDispatch(); + + // Select current state from Redux using multiple selectors to avoid rerenders. + const invalidSelections = select((state) => state.componentState.invalidSelections); + const availableOptions = select((state) => state.componentState.availableOptions); + + const selectedOptions = select((state) => state.explicitInput.selectedOptions); + const existsSelected = select((state) => state.explicitInput.existsSelected); + const singleSelect = select((state) => state.explicitInput.singleSelect); + const hideExists = select((state) => state.explicitInput.hideExists); + + const loading = select((state) => state.output.loading); + + // track selectedOptions and invalidSelections in sets for more efficient lookup + const selectedOptionsSet = useMemo(() => new Set(selectedOptions), [selectedOptions]); + const invalidSelectionsSet = useMemo( + () => new Set(invalidSelections), + [invalidSelections] + ); + const suggestions = showOnlySelected ? selectedOptions : availableOptions; + + if ( + !loading && + (!suggestions || suggestions.length === 0) && + !(showOnlySelected && existsSelected) + ) { + return ( +
+
+ + +

+ {showOnlySelected + ? OptionsListStrings.popover.getSelectionsEmptyMessage() + : OptionsListStrings.popover.getEmptyMessage()} +

+
+
+ ); + } + + return ( + <> + {!hideExists && !(showOnlySelected && !existsSelected) && ( + { + dispatch(selectExists(!Boolean(existsSelected))); + }} + className="optionsList__existsFilter" + > + {OptionsListStrings.controlAndPopover.getExists()} + + )} + {suggestions?.map((suggestion, index) => ( + { + if (showOnlySelected) { + dispatch(deselectOption(suggestion)); + return; + } + if (singleSelect) { + dispatch(replaceSelection(suggestion)); + return; + } + if (selectedOptionsSet.has(suggestion)) { + dispatch(deselectOption(suggestion)); + return; + } + dispatch(selectOption(suggestion)); + }} + className={ + showOnlySelected && invalidSelectionsSet.has(suggestion) + ? 'optionsList__selectionInvalid' + : undefined + } + > + {`${suggestion}`} + + ))} + + ); +}; diff --git a/src/plugins/controls/public/options_list/components/options_list_strings.ts b/src/plugins/controls/public/options_list/components/options_list_strings.ts index cfab9633b81e9e..5db1ddeae21b09 100644 --- a/src/plugins/controls/public/options_list/components/options_list_strings.ts +++ b/src/plugins/controls/public/options_list/components/options_list_strings.ts @@ -22,6 +22,10 @@ export const OptionsListStrings = { i18n.translate('controls.optionsList.control.negate', { defaultMessage: 'NOT', }), + getExcludeExists: () => + i18n.translate('controls.optionsList.control.excludeExists', { + defaultMessage: 'DOES NOT', + }), }, editor: { getAllowMultiselectTitle: () => @@ -41,8 +45,21 @@ export const OptionsListStrings = { i18n.translate('controls.optionsList.editor.hideExclude', { defaultMessage: 'Allow selections to be excluded', }), + getHideExistsQueryTitle: () => + i18n.translate('controls.optionsList.editor.hideExistsQuery', { + defaultMessage: 'Allow exists query', + }), + getHideExistsQueryTooltip: () => + i18n.translate('controls.optionsList.editor.hideExistsQueryTooltip', { + defaultMessage: 'Returns the documents that contain an indexed value for the field.', + }), }, popover: { + getAriaLabel: (fieldName: string) => + i18n.translate('controls.optionsList.popover.ariaLabel', { + defaultMessage: 'Popover for {fieldName} control', + values: { fieldName }, + }), getLoadingMessage: () => i18n.translate('controls.optionsList.popover.loading', { defaultMessage: 'Loading options', @@ -112,4 +129,11 @@ export const OptionsListStrings = { defaultMessage: 'Include or exclude selections', }), }, + controlAndPopover: { + getExists: (negate: number = +false) => + i18n.translate('controls.optionsList.controlAndPopover.exists', { + defaultMessage: '{negate, plural, one {Exist} other {Exists}}', + values: { negate }, + }), + }, }; diff --git a/src/plugins/controls/public/options_list/embeddable/options_list_embeddable.tsx b/src/plugins/controls/public/options_list/embeddable/options_list_embeddable.tsx index ffead8d9c20bc7..76256bd1a75b97 100644 --- a/src/plugins/controls/public/options_list/embeddable/options_list_embeddable.tsx +++ b/src/plugins/controls/public/options_list/embeddable/options_list_embeddable.tsx @@ -21,6 +21,7 @@ import { buildPhraseFilter, buildPhrasesFilter, COMPARE_ALL_OPTIONS, + buildExistsFilter, } from '@kbn/es-query'; import { ReduxEmbeddableTools, ReduxEmbeddablePackage } from '@kbn/presentation-util-plugin/public'; import { DataView } from '@kbn/data-views-plugin/public'; @@ -128,13 +129,14 @@ export class OptionsListEmbeddable extends Embeddable ({ validate: !Boolean(newInput.ignoreParentSettings?.ignoreValidations), lastReloadRequestTime: newInput.lastReloadRequestTime, + existsSelected: newInput.existsSelected, dataViewId: newInput.dataViewId, fieldName: newInput.fieldName, timeRange: newInput.timeRange, timeslice: newInput.timeslice, + exclude: newInput.exclude, filters: newInput.filters, query: newInput.query, - exclude: newInput.exclude, })), distinctUntilChanged(diffDataFetchProps) ); @@ -156,7 +158,10 @@ export class OptionsListEmbeddable extends Embeddable isEqual(a.selectedOptions, b.selectedOptions) && a.exclude === b.exclude + (a, b) => + a.exclude === b.exclude && + a.existsSelected === b.existsSelected && + isEqual(a.selectedOptions, b.selectedOptions) ) ) .subscribe(async ({ selectedOptions: newSelectedOptions }) => { @@ -266,7 +271,7 @@ export class OptionsListEmbeddable extends Embeddable { const { getState } = this.reduxEmbeddableTools; const { validSelections } = getState().componentState ?? {}; + const { existsSelected } = getState().explicitInput ?? {}; const { exclude } = this.getInput(); - if (!validSelections || isEmpty(validSelections)) { + if ((!validSelections || isEmpty(validSelections)) && !existsSelected) { return []; } const { dataView, field } = await this.getCurrentDataViewAndField(); if (!dataView || !field) return; - let newFilter: Filter; - if (validSelections.length === 1) { - newFilter = buildPhraseFilter(field, validSelections[0], dataView); - } else { - newFilter = buildPhrasesFilter(field, validSelections, dataView); + let newFilter: Filter | undefined; + if (existsSelected) { + newFilter = buildExistsFilter(field, dataView); + } else if (validSelections) { + if (validSelections.length === 1) { + newFilter = buildPhraseFilter(field, validSelections[0], dataView); + } else { + newFilter = buildPhrasesFilter(field, validSelections, dataView); + } } + if (!newFilter) return []; newFilter.meta.key = field?.name; if (exclude) newFilter.meta.negate = true; diff --git a/src/plugins/controls/public/options_list/options_list_reducers.ts b/src/plugins/controls/public/options_list/options_list_reducers.ts index 1a8e2dcb4683ec..731ae4c8eb507c 100644 --- a/src/plugins/controls/public/options_list/options_list_reducers.ts +++ b/src/plugins/controls/public/options_list/options_list_reducers.ts @@ -51,8 +51,17 @@ export const optionsListReducers = { state.componentState.searchString.valid = getIpRangeQuery(action.payload).validSearch; } }, + selectExists: (state: WritableDraft, action: PayloadAction) => { + if (action.payload) { + state.explicitInput.existsSelected = true; + state.explicitInput.selectedOptions = []; + } else { + state.explicitInput.existsSelected = false; + } + }, selectOption: (state: WritableDraft, action: PayloadAction) => { if (!state.explicitInput.selectedOptions) state.explicitInput.selectedOptions = []; + if (state.explicitInput.existsSelected) state.explicitInput.existsSelected = false; state.explicitInput.selectedOptions?.push(action.payload); }, replaceSelection: ( @@ -62,6 +71,7 @@ export const optionsListReducers = { state.explicitInput.selectedOptions = [action.payload]; }, clearSelections: (state: WritableDraft) => { + if (state.explicitInput.existsSelected) state.explicitInput.existsSelected = false; if (state.explicitInput.selectedOptions) state.explicitInput.selectedOptions = []; }, setExclude: (state: WritableDraft, action: PayloadAction) => { diff --git a/src/plugins/controls/public/services/options_list/options_list_service.ts b/src/plugins/controls/public/services/options_list/options_list_service.ts index a537e7534a3b82..27867b5724cec9 100644 --- a/src/plugins/controls/public/services/options_list/options_list_service.ts +++ b/src/plugins/controls/public/services/options_list/options_list_service.ts @@ -82,6 +82,7 @@ class OptionsListService implements ControlsOptionsListService { const timeFilter = timeRange ? timeService.createFilter(dataView, timeRange) : undefined; const filtersToUse = [...(filters ?? []), ...(timeFilter ? [timeFilter] : [])]; const esFilters = [buildEsQuery(dataView, query ?? [], filtersToUse ?? [])]; + return { ...passThroughProps, filters: esFilters, diff --git a/src/plugins/controls/server/options_list/options_list_queries.ts b/src/plugins/controls/server/options_list/options_list_queries.ts index d1fa89bbc93585..4a381aeac64c1f 100644 --- a/src/plugins/controls/server/options_list/options_list_queries.ts +++ b/src/plugins/controls/server/options_list/options_list_queries.ts @@ -27,11 +27,13 @@ interface EsBucket { */ export const getValidationAggregationBuilder: () => OptionsListAggregationBuilder = () => ({ buildAggregation: ({ selectedOptions, fieldName }: OptionsListRequestBody) => { - const selectedOptionsFilters = selectedOptions?.reduce((acc, currentOption) => { - acc[currentOption] = { match: { [fieldName]: currentOption } }; - return acc; - }, {} as { [key: string]: { match: { [key: string]: string } } }); - + let selectedOptionsFilters; + if (selectedOptions) { + selectedOptionsFilters = selectedOptions.reduce((acc, currentOption) => { + acc[currentOption] = { match: { [fieldName]: currentOption } }; + return acc; + }, {} as { [key: string]: { match: { [key: string]: string } } }); + } return selectedOptionsFilters && !isEmpty(selectedOptionsFilters) ? { filters: { @@ -44,6 +46,7 @@ export const getValidationAggregationBuilder: () => OptionsListAggregationBuilde const rawInvalidSuggestions = get(rawEsResult, 'aggregations.validation.buckets') as { [key: string]: { doc_count: number }; }; + return rawInvalidSuggestions && !isEmpty(rawInvalidSuggestions) ? Object.entries(rawInvalidSuggestions) ?.filter(([, value]) => value?.doc_count === 0) diff --git a/src/plugins/controls/server/options_list/options_list_suggestions_route.ts b/src/plugins/controls/server/options_list/options_list_suggestions_route.ts index c9af30bb07b82a..fe2218c3f7135c 100644 --- a/src/plugins/controls/server/options_list/options_list_suggestions_route.ts +++ b/src/plugins/controls/server/options_list/options_list_suggestions_route.ts @@ -107,7 +107,6 @@ export const setupOptionsListSuggestionsRoute = ( validation: builtValidationAggregation, } : {}; - const body: SearchRequest['body'] = { size: 0, ...timeoutSettings, @@ -138,7 +137,6 @@ export const setupOptionsListSuggestionsRoute = ( const totalCardinality = get(rawEsResult, 'aggregations.unique_terms.value'); const suggestions = suggestionBuilder.parse(rawEsResult); const invalidSelections = validationBuilder.parse(rawEsResult); - return { suggestions, totalCardinality, diff --git a/src/plugins/data/common/search/aggs/buckets/terms.ts b/src/plugins/data/common/search/aggs/buckets/terms.ts index 8314d2cd532de9..7c2b6ad062a55e 100644 --- a/src/plugins/data/common/search/aggs/buckets/terms.ts +++ b/src/plugins/data/common/search/aggs/buckets/terms.ts @@ -79,9 +79,13 @@ export const getTermsBucketAgg = () => id: 'terms', params: { id: format.id, + ...(format.params + ? { + params: format.params, + } + : {}), otherBucketLabel: agg.params.otherBucketLabel, missingBucketLabel: agg.params.missingBucketLabel, - ...format.params, }, }; }, diff --git a/src/plugins/embeddable/public/lib/embeddables/embeddable_error_handler.tsx b/src/plugins/embeddable/public/lib/embeddables/embeddable_error_handler.tsx new file mode 100644 index 00000000000000..a0ebfdbcbdc868 --- /dev/null +++ b/src/plugins/embeddable/public/lib/embeddables/embeddable_error_handler.tsx @@ -0,0 +1,57 @@ +/* + * 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 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 or the Server + * Side Public License, v 1. + */ + +import { isFunction } from 'lodash'; +import React, { ReactNode, useEffect, useRef, useState } from 'react'; +import { isPromise } from '@kbn/std'; +import type { MaybePromise } from '@kbn/utility-types'; +import type { ErrorLike } from '@kbn/expressions-plugin/common'; +import type { EmbeddableInput, EmbeddableOutput, IEmbeddable } from './i_embeddable'; + +type IReactEmbeddable = IEmbeddable>; + +interface EmbeddableErrorHandlerProps { + children: IReactEmbeddable['catchError']; + embeddable?: IReactEmbeddable; + error: ErrorLike | string; +} + +export function EmbeddableErrorHandler({ + children, + embeddable, + error, +}: EmbeddableErrorHandlerProps) { + const [node, setNode] = useState(); + const ref = useRef(null); + + useEffect(() => { + if (!ref.current) { + return; + } + + const handler = embeddable?.catchError?.bind(embeddable) ?? children; + if (!handler) { + return; + } + + const renderedNode = handler( + typeof error === 'string' ? { message: error, name: '' } : error, + ref.current + ); + if (isFunction(renderedNode)) { + return renderedNode; + } + if (isPromise(renderedNode)) { + renderedNode.then(setNode); + } else { + setNode(renderedNode); + } + }, [children, embeddable, error]); + + return
{node}
; +} diff --git a/src/plugins/embeddable/public/lib/embeddables/embeddable_root.tsx b/src/plugins/embeddable/public/lib/embeddables/embeddable_root.tsx index bfaefe09b5e6bf..f94bb99ada83cd 100644 --- a/src/plugins/embeddable/public/lib/embeddables/embeddable_root.tsx +++ b/src/plugins/embeddable/public/lib/embeddables/embeddable_root.tsx @@ -12,6 +12,7 @@ import { EuiText } from '@elastic/eui'; import { isPromise } from '@kbn/std'; import { MaybePromise } from '@kbn/utility-types'; import { EmbeddableInput, EmbeddableOutput, IEmbeddable } from './i_embeddable'; +import { EmbeddableErrorHandler } from './embeddable_error_handler'; interface Props { embeddable?: IEmbeddable>; @@ -91,7 +92,11 @@ export class EmbeddableRoot extends React.Component {
{this.state.node}
{this.props.loading && } - {this.props.error && {this.props.error}} + {this.props.error && ( + + {({ message }) => {message}} + + )}
); } diff --git a/src/plugins/embeddable/public/lib/embeddables/error_embeddable.tsx b/src/plugins/embeddable/public/lib/embeddables/error_embeddable.tsx index 8dff4ecee8976d..1ccaf61064a8a7 100644 --- a/src/plugins/embeddable/public/lib/embeddables/error_embeddable.tsx +++ b/src/plugins/embeddable/public/lib/embeddables/error_embeddable.tsx @@ -6,9 +6,8 @@ * Side Public License, v 1. */ -import { EuiEmptyPrompt } from '@elastic/eui'; import React, { ReactNode } from 'react'; -import { Markdown } from '@kbn/kibana-react-plugin/public'; +import { EmbeddablePanelError } from '../panel/embeddable_panel_error'; import { Embeddable } from './embeddable'; import { EmbeddableInput, EmbeddableOutput, IEmbeddable } from './i_embeddable'; import { IContainer } from '../containers'; @@ -33,20 +32,8 @@ export class ErrorEmbeddable extends Embeddable - ); - - return ( -
- -
- ); + const error = typeof this.error === 'string' ? { message: this.error, name: '' } : this.error; + + return ; } } diff --git a/src/plugins/embeddable/public/lib/embeddables/index.ts b/src/plugins/embeddable/public/lib/embeddables/index.ts index 0c1048af9182cb..9f88e6b3053b54 100644 --- a/src/plugins/embeddable/public/lib/embeddables/index.ts +++ b/src/plugins/embeddable/public/lib/embeddables/index.ts @@ -9,6 +9,7 @@ export type { EmbeddableOutput, EmbeddableInput, IEmbeddable } from './i_embeddable'; export { isEmbeddable } from './is_embeddable'; export { Embeddable } from './embeddable'; +export { EmbeddableErrorHandler } from './embeddable_error_handler'; export * from './embeddable_factory'; export * from './embeddable_factory_definition'; export * from './default_embeddable_factory_provider'; diff --git a/src/plugins/embeddable/public/lib/panel/_embeddable_panel.scss b/src/plugins/embeddable/public/lib/panel/_embeddable_panel.scss index 3044a3896fa352..789b9f7227a3c1 100644 --- a/src/plugins/embeddable/public/lib/panel/_embeddable_panel.scss +++ b/src/plugins/embeddable/public/lib/panel/_embeddable_panel.scss @@ -29,13 +29,6 @@ .embPanel__content--fullWidth { width: 100%; } - - .embPanel__content--error { - &:hover { - box-shadow: none; - transform: none; - } - } } // HEADER @@ -165,11 +158,12 @@ } .embPanel__error { - text-align: center; - justify-content: center; - flex-direction: column; - overflow: auto; - padding: $euiSizeS; + padding: $euiSizeL; + + & > * { + max-height: 100%; + overflow: auto; + } } .embPanel__label { diff --git a/src/plugins/embeddable/public/lib/panel/embeddable_panel.tsx b/src/plugins/embeddable/public/lib/panel/embeddable_panel.tsx index f5b072a5912256..cf014c2af98b62 100644 --- a/src/plugins/embeddable/public/lib/panel/embeddable_panel.tsx +++ b/src/plugins/embeddable/public/lib/panel/embeddable_panel.tsx @@ -6,7 +6,13 @@ * Side Public License, v 1. */ -import { EuiContextMenuPanelDescriptor, EuiPanel, htmlIdGenerator } from '@elastic/eui'; +import { + EuiContextMenuPanelDescriptor, + EuiFlexGroup, + EuiFlexItem, + EuiPanel, + htmlIdGenerator, +} from '@elastic/eui'; import classNames from 'classnames'; import React, { ReactNode } from 'react'; import { Subscription } from 'rxjs'; @@ -27,11 +33,11 @@ import { contextMenuTrigger, } from '../triggers'; import { - IEmbeddable, - EmbeddableOutput, - EmbeddableError, + EmbeddableErrorHandler, EmbeddableInput, -} from '../embeddables/i_embeddable'; + EmbeddableOutput, + IEmbeddable, +} from '../embeddables'; import { ViewMode } from '../types'; import { EmbeddablePanelError } from './embeddable_panel_error'; @@ -105,7 +111,7 @@ interface State { badges: Array>; notifications: Array>; loading?: boolean; - error?: EmbeddableError; + error?: Error; destroyError?(): void; node?: ReactNode; } @@ -301,11 +307,24 @@ export class EmbeddablePanel extends React.Component { /> )} {this.state.error && ( - + + + + {(error) => ( + + )} + + + )}
{this.state.node} diff --git a/src/plugins/embeddable/public/lib/panel/embeddable_panel_error.tsx b/src/plugins/embeddable/public/lib/panel/embeddable_panel_error.tsx index 69af8e7220e623..4aba5ed1051546 100644 --- a/src/plugins/embeddable/public/lib/panel/embeddable_panel_error.tsx +++ b/src/plugins/embeddable/public/lib/panel/embeddable_panel_error.tsx @@ -6,16 +6,15 @@ * Side Public License, v 1. */ -import { isFunction } from 'lodash'; -import React, { ReactNode, useEffect, useMemo, useRef, useState } from 'react'; -import { EuiPanel } from '@elastic/eui'; +import React, { ReactNode, useEffect, useMemo, useState } from 'react'; +import { EuiButtonEmpty, EuiEmptyPrompt, EuiText } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; -import { isPromise } from '@kbn/std'; +import { Markdown } from '@kbn/kibana-react-plugin/public'; import type { MaybePromise } from '@kbn/utility-types'; import { ErrorLike } from '@kbn/expressions-plugin/common'; import { distinctUntilChanged, merge, of, switchMap } from 'rxjs'; import { EditPanelAction } from '../actions'; -import { EmbeddableInput, EmbeddableOutput, ErrorEmbeddable, IEmbeddable } from '../embeddables'; +import { EmbeddableInput, EmbeddableOutput, IEmbeddable } from '../embeddables'; interface EmbeddablePanelErrorProps { editPanelAction?: EditPanelAction; @@ -29,27 +28,25 @@ export function EmbeddablePanelError({ error, }: EmbeddablePanelErrorProps) { const [isEditable, setEditable] = useState(false); - const [node, setNode] = useState(); - const ref = useRef(null); const handleErrorClick = useMemo( () => (isEditable ? () => editPanelAction?.execute({ embeddable }) : undefined), [editPanelAction, embeddable, isEditable] ); - const title = embeddable.getTitle(); - const actionDisplayName = useMemo( + const label = useMemo( () => editPanelAction?.getDisplayName({ embeddable }), [editPanelAction, embeddable] ); + const title = useMemo(() => embeddable.getTitle(), [embeddable]); const ariaLabel = useMemo( () => !title - ? actionDisplayName + ? label : i18n.translate('embeddableApi.panel.editPanel.displayName', { defaultMessage: 'Edit {value}', values: { value: title }, }), - [title, actionDisplayName] + [label, title] ); useEffect(() => { @@ -62,42 +59,29 @@ export function EmbeddablePanelError({ return () => subscription.unsubscribe(); }, [editPanelAction, embeddable]); - useEffect(() => { - if (!ref.current) { - return; - } - - if (!embeddable.catchError) { - const errorEmbeddable = new ErrorEmbeddable(error, { id: embeddable.id }); - setNode(errorEmbeddable.render()); - - return () => errorEmbeddable.destroy(); - } - - const renderedNode = embeddable.catchError(error, ref.current); - if (isFunction(renderedNode)) { - return renderedNode; - } - if (isPromise(renderedNode)) { - renderedNode.then(setNode); - } else { - setNode(renderedNode); - } - }, [embeddable, error]); return ( - - {node} - + + + + } + data-test-subj="embeddableStackError" + iconType="alert" + iconColor="danger" + layout="vertical" + actions={ + isEditable && ( + + {label} + + ) + } + /> ); } diff --git a/src/plugins/event_annotation/kibana.json b/src/plugins/event_annotation/kibana.json index d981af8ab165b4..deccb699617bae 100644 --- a/src/plugins/event_annotation/kibana.json +++ b/src/plugins/event_annotation/kibana.json @@ -13,6 +13,6 @@ ], "owner": { "name": "Vis Editors", - "githubTeam": "kibana-vis-editors" + "githubTeam": "kibana-visualizations" } } \ No newline at end of file diff --git a/src/plugins/management/kibana.json b/src/plugins/management/kibana.json index bf285cbbeadd34..c3659ce2232fac 100644 --- a/src/plugins/management/kibana.json +++ b/src/plugins/management/kibana.json @@ -7,6 +7,6 @@ "requiredBundles": ["kibanaReact", "kibanaUtils"], "owner": { "name": "Vis Editors", - "githubTeam": "kibana-vis-editors" + "githubTeam": "kibana-visualizations" } } diff --git a/src/plugins/url_forwarding/kibana.json b/src/plugins/url_forwarding/kibana.json index 3e48cf73de5ef4..12132c2a096669 100644 --- a/src/plugins/url_forwarding/kibana.json +++ b/src/plugins/url_forwarding/kibana.json @@ -5,6 +5,6 @@ "ui": true, "owner": { "name": "Vis Editors", - "githubTeam": "kibana-vis-editors" + "githubTeam": "kibana-visualizations" } } diff --git a/src/plugins/vis_default_editor/kibana.json b/src/plugins/vis_default_editor/kibana.json index 7ae2321828a555..e5385724cf4a36 100644 --- a/src/plugins/vis_default_editor/kibana.json +++ b/src/plugins/vis_default_editor/kibana.json @@ -16,7 +16,7 @@ ], "owner": { "name": "Vis Editors", - "githubTeam": "kibana-vis-editors" + "githubTeam": "kibana-visualizations" }, "description": "The default editor used in most aggregation-based visualizations." } diff --git a/src/plugins/vis_types/gauge/kibana.json b/src/plugins/vis_types/gauge/kibana.json index 428ee970c4e7f1..942fa032e1e0a2 100755 --- a/src/plugins/vis_types/gauge/kibana.json +++ b/src/plugins/vis_types/gauge/kibana.json @@ -23,7 +23,7 @@ ], "owner": { "name": "Vis Editors", - "githubTeam": "kibana-vis-editors" + "githubTeam": "kibana-visualizations" }, "description": "Contains the gauge chart implementation using the elastic-charts library. The goal is to eventually deprecate the old implementation and keep only this. Until then, the library used is defined by the Legacy charts library advanced setting." } \ No newline at end of file diff --git a/src/plugins/vis_types/heatmap/kibana.json b/src/plugins/vis_types/heatmap/kibana.json index b7f4a3bacbb906..077e9015b00af5 100644 --- a/src/plugins/vis_types/heatmap/kibana.json +++ b/src/plugins/vis_types/heatmap/kibana.json @@ -21,7 +21,7 @@ ], "owner": { "name": "Vis Editors", - "githubTeam": "kibana-vis-editors" + "githubTeam": "kibana-visualizations" }, "description": "Contains the heatmap implementation using the elastic-charts library. The goal is to eventually deprecate the old implementation and keep only this. Until then, the library used is defined by the Legacy heatmap charts library advanced setting." } \ No newline at end of file diff --git a/src/plugins/vis_types/metric/kibana.json b/src/plugins/vis_types/metric/kibana.json index 4d8f776d2a0bba..07b3586b950e00 100644 --- a/src/plugins/vis_types/metric/kibana.json +++ b/src/plugins/vis_types/metric/kibana.json @@ -17,7 +17,7 @@ ], "owner": { "name": "Vis Editors", - "githubTeam": "kibana-vis-editors" + "githubTeam": "kibana-visualizations" }, "description": "Registers the Metric aggregation-based visualization." } \ No newline at end of file diff --git a/src/plugins/vis_types/pie/kibana.json b/src/plugins/vis_types/pie/kibana.json index d9dca861e33be4..13bc61667dfd73 100644 --- a/src/plugins/vis_types/pie/kibana.json +++ b/src/plugins/vis_types/pie/kibana.json @@ -21,7 +21,7 @@ ], "owner": { "name": "Vis Editors", - "githubTeam": "kibana-vis-editors" + "githubTeam": "kibana-visualizations" }, "description": "Contains the pie chart implementation using the elastic-charts library. The goal is to eventually deprecate the old implementation and keep only this. Until then, the library used is defined by the Legacy charts library advanced setting." } \ No newline at end of file diff --git a/src/plugins/vis_types/table/kibana.json b/src/plugins/vis_types/table/kibana.json index d0ab6489ae61e5..ba8b90e7df337f 100644 --- a/src/plugins/vis_types/table/kibana.json +++ b/src/plugins/vis_types/table/kibana.json @@ -19,7 +19,7 @@ ], "owner": { "name": "Vis Editors", - "githubTeam": "kibana-vis-editors" + "githubTeam": "kibana-visualizations" }, "description": "Registers the datatable aggregation-based visualization." } diff --git a/src/plugins/vis_types/tagcloud/kibana.json b/src/plugins/vis_types/tagcloud/kibana.json index 67d57dec9f1fac..53e6141b9fb0da 100644 --- a/src/plugins/vis_types/tagcloud/kibana.json +++ b/src/plugins/vis_types/tagcloud/kibana.json @@ -7,7 +7,7 @@ "requiredBundles": ["kibanaReact", "visDefaultEditor"], "owner": { "name": "Vis Editors", - "githubTeam": "kibana-vis-editors" + "githubTeam": "kibana-visualizations" }, "description": "Registers the tagcloud visualization. It is based on elastic-charts wordcloud." diff --git a/src/plugins/vis_types/timelion/kibana.json b/src/plugins/vis_types/timelion/kibana.json index cf02808ec5c40e..584593d69a546f 100644 --- a/src/plugins/vis_types/timelion/kibana.json +++ b/src/plugins/vis_types/timelion/kibana.json @@ -9,7 +9,7 @@ "optionalPlugins": ["usageCollection"], "owner": { "name": "Vis Editors", - "githubTeam": "kibana-vis-editors" + "githubTeam": "kibana-visualizations" }, "description": "Registers the timelion visualization. Also contains the backend for both timelion app and timelion visualization." } diff --git a/src/plugins/vis_types/timeseries/kibana.json b/src/plugins/vis_types/timeseries/kibana.json index 049bd6beffd6f0..9ce16f65ec7538 100644 --- a/src/plugins/vis_types/timeseries/kibana.json +++ b/src/plugins/vis_types/timeseries/kibana.json @@ -9,7 +9,7 @@ "requiredBundles": ["unifiedSearch", "kibanaUtils", "kibanaReact", "fieldFormats"], "owner": { "name": "Vis Editors", - "githubTeam": "kibana-vis-editors" + "githubTeam": "kibana-visualizations" }, "description": "Registers the TSVB visualization. TSVB has its one editor, works with index patterns and index strings and contains 6 types of charts: timeseries, topN, table. markdown, metric and gauge." } diff --git a/src/plugins/vis_types/vega/kibana.json b/src/plugins/vis_types/vega/kibana.json index 5fbaabec722aa2..da5e8c40714020 100644 --- a/src/plugins/vis_types/vega/kibana.json +++ b/src/plugins/vis_types/vega/kibana.json @@ -8,7 +8,7 @@ "requiredBundles": ["kibanaUtils", "kibanaReact", "visDefaultEditor"], "owner": { "name": "Vis Editors", - "githubTeam": "kibana-vis-editors" + "githubTeam": "kibana-visualizations" }, "description": "Registers the vega visualization. Is the elastic version of vega and vega-lite libraries." } diff --git a/src/plugins/vis_types/vislib/kibana.json b/src/plugins/vis_types/vislib/kibana.json index 1f0a76bd364f8b..e12149bb5ab017 100644 --- a/src/plugins/vis_types/vislib/kibana.json +++ b/src/plugins/vis_types/vislib/kibana.json @@ -8,7 +8,7 @@ "requiredBundles": ["kibanaUtils", "visTypePie", "visTypeHeatmap", "visTypeGauge", "kibanaReact"], "owner": { "name": "Vis Editors", - "githubTeam": "kibana-vis-editors" + "githubTeam": "kibana-visualizations" }, "description": "Contains the vislib visualizations. These are the classical area/line/bar, pie, gauge/goal and heatmap charts. We want to replace them with elastic-charts." } diff --git a/src/plugins/vis_types/xy/kibana.json b/src/plugins/vis_types/xy/kibana.json index 474a70431fc73d..567c56fbcf9db9 100644 --- a/src/plugins/vis_types/xy/kibana.json +++ b/src/plugins/vis_types/xy/kibana.json @@ -8,7 +8,7 @@ "extraPublicDirs": ["common/index"], "owner": { "name": "Vis Editors", - "githubTeam": "kibana-vis-editors" + "githubTeam": "kibana-visualizations" }, "description": "Contains the new xy-axis chart using the elastic-charts library, which will eventually replace the vislib xy-axis charts including bar, area, and line." } diff --git a/src/plugins/visualizations/kibana.json b/src/plugins/visualizations/kibana.json index fc35feb51039cc..f650b85dd71e1a 100644 --- a/src/plugins/visualizations/kibana.json +++ b/src/plugins/visualizations/kibana.json @@ -25,7 +25,7 @@ "extraPublicDirs": ["common/constants", "common/utils", "common/expression_functions", "common/convert_to_lens"], "owner": { "name": "Vis Editors", - "githubTeam": "kibana-vis-editors" + "githubTeam": "kibana-visualizations" }, "description": "Contains the shared architecture among all the legacy visualizations, e.g. the visualization type registry or the visualization embeddable." } diff --git a/src/plugins/visualizations/public/components/visualization_missed_saved_object_error.tsx b/src/plugins/visualizations/public/components/visualization_missed_saved_object_error.tsx index 767a2d38f85819..338a8f6fe72015 100644 --- a/src/plugins/visualizations/public/components/visualization_missed_saved_object_error.tsx +++ b/src/plugins/visualizations/public/components/visualization_missed_saved_object_error.tsx @@ -12,28 +12,25 @@ import React from 'react'; import { RedirectAppLinks } from '@kbn/shared-ux-link-redirect-app'; import type { ApplicationStart } from '@kbn/core/public'; import { DATA_VIEW_SAVED_OBJECT_TYPE } from '@kbn/data-plugin/common'; -import type { ViewMode } from '@kbn/embeddable-plugin/common'; import type { RenderMode } from '@kbn/expressions-plugin/common'; interface VisualizationMissedSavedObjectErrorProps { savedObjectMeta: { savedObjectType: typeof DATA_VIEW_SAVED_OBJECT_TYPE | 'search'; - savedObjectId?: string; }; application: ApplicationStart; - viewMode: ViewMode; + message: string; renderMode: RenderMode; } export const VisualizationMissedSavedObjectError = ({ savedObjectMeta, application, - viewMode, + message, renderMode, }: VisualizationMissedSavedObjectErrorProps) => { const { management: isManagementEnabled } = application.capabilities.navLinks; const isIndexPatternManagementEnabled = application.capabilities.management.kibana.indexPatterns; - const isEditVisEnabled = application.capabilities.visualize?.save; return ( ) : null } - body={ - <> -

- {i18n.translate('visualizations.missedDataView.errorMessage', { - defaultMessage: `Could not find the {type}: {id}`, - values: { - id: savedObjectMeta.savedObjectId ?? '-', - type: - savedObjectMeta.savedObjectType === 'search' - ? i18n.translate('visualizations.noSearch.label', { - defaultMessage: 'search', - }) - : i18n.translate('visualizations.noDataView.label', { - defaultMessage: 'data view', - }), - }, - })} -

- {viewMode === 'edit' && renderMode !== 'edit' && isEditVisEnabled ? ( -

- {i18n.translate('visualizations.missedDataView.editInVisualizeEditor', { - defaultMessage: `Edit in Visualize editor to fix the error`, - })} -

- ) : null} - - } + body={

{message}

} /> ); }; diff --git a/src/plugins/visualizations/public/embeddable/visualize_embeddable.tsx b/src/plugins/visualizations/public/embeddable/visualize_embeddable.tsx index f2a2a7f8ae000b..663d015c429de3 100644 --- a/src/plugins/visualizations/public/embeddable/visualize_embeddable.tsx +++ b/src/plugins/visualizations/public/embeddable/visualize_embeddable.tsx @@ -29,7 +29,6 @@ import { IContainer, ReferenceOrValueEmbeddable, SavedObjectEmbeddableInput, - ViewMode, } from '@kbn/embeddable-plugin/public'; import { ExpressionAstExpression, @@ -401,6 +400,25 @@ export class VisualizeEmbeddable this.abortController.abort(); } this.renderComplete.dispatchError(); + + if (isFallbackDataView(this.vis.data.indexPattern)) { + error = new Error( + i18n.translate('visualizations.missedDataView.errorMessage', { + defaultMessage: `Could not find the {type}: {id}`, + values: { + id: this.vis.data.indexPattern.id ?? '-', + type: this.vis.data.savedSearchId + ? i18n.translate('visualizations.noSearch.label', { + defaultMessage: 'search', + }) + : i18n.translate('visualizations.noDataView.label', { + defaultMessage: 'data view', + }), + }, + }) + ); + } + this.updateOutput({ ...this.getOutput(), rendered: true, @@ -503,7 +521,7 @@ export class VisualizeEmbeddable const { error } = this.getOutput(); if (error) { - render(this.catchError(error), this.domNode); + render(this.renderError(error), this.domNode); } }) ); @@ -511,17 +529,16 @@ export class VisualizeEmbeddable await this.updateHandler(); } - public catchError(error: ErrorLike | string) { + private renderError(error: ErrorLike | string) { if (isFallbackDataView(this.vis.data.indexPattern)) { return ( ); } diff --git a/src/plugins/visualizations/public/embeddable/visualize_embeddable_factory.tsx b/src/plugins/visualizations/public/embeddable/visualize_embeddable_factory.tsx index 4dcaa582511c31..93b19953b9b91c 100644 --- a/src/plugins/visualizations/public/embeddable/visualize_embeddable_factory.tsx +++ b/src/plugins/visualizations/public/embeddable/visualize_embeddable_factory.tsx @@ -134,7 +134,7 @@ export class VisualizeEmbeddableFactory public getDisplayName() { return i18n.translate('visualizations.displayName', { - defaultMessage: 'Visualization', + defaultMessage: 'visualization', }); } diff --git a/test/functional/apps/dashboard/group6/dashboard_error_handling.ts b/test/functional/apps/dashboard/group6/dashboard_error_handling.ts index 7e1956b82daf25..b00aec24809cc1 100644 --- a/test/functional/apps/dashboard/group6/dashboard_error_handling.ts +++ b/test/functional/apps/dashboard/group6/dashboard_error_handling.ts @@ -51,14 +51,15 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // wrapping into own describe to make sure new tab is cleaned up even if test failed // see: https://github.com/elastic/kibana/pull/67280#discussion_r430528122 - describe('recreate index pattern link works', () => { - it('recreate index pattern link works', async () => { + describe('when the saved object is missing', () => { + it('shows the missing data view error message', async () => { await PageObjects.dashboard.gotoDashboardLandingPage(); await PageObjects.dashboard.loadSavedDashboard('dashboard with missing index pattern'); await PageObjects.header.waitUntilLoadingHasFinished(); - const errorEmbeddable = await testSubjects.find('visualization-missed-data-view-error'); + const embeddableError = await testSubjects.find('embeddableError'); + const errorMessage = await embeddableError.getVisibleText(); - expect(await errorEmbeddable.isDisplayed()).to.be(true); + expect(errorMessage).to.contain('Could not find the data view'); }); }); }); diff --git a/test/functional/apps/dashboard_elements/controls/control_group_chaining.ts b/test/functional/apps/dashboard_elements/controls/control_group_chaining.ts index 89a435430f9e9a..652864471a04a3 100644 --- a/test/functional/apps/dashboard_elements/controls/control_group_chaining.ts +++ b/test/functional/apps/dashboard_elements/controls/control_group_chaining.ts @@ -14,26 +14,58 @@ import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { const retry = getService('retry'); const security = getService('security'); - const { dashboardControls, common, dashboard, timePicker } = getPageObjects([ + const { common, console, dashboard, dashboardControls, header, timePicker } = getPageObjects([ 'dashboardControls', 'timePicker', 'dashboard', + 'console', 'common', + 'header', ]); describe('Dashboard control group hierarchical chaining', () => { + const newDocuments: Array<{ index: string; id: string }> = []; let controlIds: string[]; - const ensureAvailableOptionsEql = async (controlId: string, expectation: string[]) => { + const ensureAvailableOptionsEql = async ( + controlId: string, + expectation: string[], + filterOutExists: boolean = true + ) => { await dashboardControls.optionsListOpenPopover(controlId); await retry.try(async () => { - expect(await dashboardControls.optionsListPopoverGetAvailableOptions()).to.eql(expectation); + expect( + await dashboardControls.optionsListPopoverGetAvailableOptions(filterOutExists) + ).to.eql(expectation); }); await dashboardControls.optionsListEnsurePopoverIsClosed(controlId); }; + const addDocument = async (index: string, document: string) => { + await console.enterRequest('\nPOST ' + index + '/_doc/ \n{\n ' + document); + await console.clickPlay(); + await header.waitUntilLoadingHasFinished(); + const response = JSON.parse(await console.getResponse()); + newDocuments.push({ index, id: response._id }); + }; + before(async () => { await security.testUser.setRoles(['kibana_admin', 'test_logstash_reader', 'animals']); + + /* start by adding some incomplete data so that we can test `exists` query */ + await common.navigateToApp('console'); + await console.collapseHelp(); + await console.clearTextArea(); + await addDocument( + 'animals-cats-2018-01-01', + '"@timestamp": "2018-01-01T16:00:00.000Z", \n"animal": "cat"' + ); + await addDocument( + 'animals-dogs-2018-01-01', + '"@timestamp": "2018-01-01T16:00:00.000Z", \n"name": "Max", \n"sound": "woof"' + ); + + /* then, create our testing dashboard */ await common.navigateToApp('dashboard'); await dashboard.gotoDashboardLandingPage(); await dashboard.clickNewDashboard(); @@ -65,6 +97,14 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); after(async () => { + await common.navigateToApp('console'); + await console.collapseHelp(); + await console.clearTextArea(); + for (const { index, id } of newDocuments) { + await console.enterRequest(`\nDELETE /${index}/_doc/${id}`); + await console.clickPlay(); + await header.waitUntilLoadingHasFinished(); + } await security.testUser.restoreDefaults(); }); @@ -128,7 +168,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await dashboardControls.optionsListPopoverSetIncludeSelections(false); await dashboardControls.optionsListEnsurePopoverIsClosed(controlIds[0]); - await ensureAvailableOptionsEql(controlIds[1], ['Tiger', 'sylvester']); + await ensureAvailableOptionsEql(controlIds[1], ['Tiger', 'sylvester', 'Max']); await ensureAvailableOptionsEql(controlIds[2], ['meow', 'hiss']); }); @@ -138,9 +178,42 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await dashboardControls.optionsListEnsurePopoverIsClosed(controlIds[0]); await dashboardControls.optionsListOpenPopover(controlIds[1]); - expect(await dashboardControls.optionsListPopoverGetAvailableOptionsCount()).to.be(0); + expect(await dashboardControls.optionsListPopoverGetAvailableOptionsCount()).to.be(1); + await dashboardControls.optionsListOpenPopover(controlIds[2]); + expect(await dashboardControls.optionsListPopoverGetAvailableOptionsCount()).to.be(1); + await dashboardControls.optionsListEnsurePopoverIsClosed(controlIds[2]); + }); + + it('Creating "does not exist" query from first control filters the second and third controls', async () => { + await dashboardControls.optionsListOpenPopover(controlIds[0]); + await dashboardControls.optionsListPopoverSelectOption('exists'); + await dashboardControls.optionsListEnsurePopoverIsClosed(controlIds[0]); + await dashboard.waitForRenderComplete(); + + await dashboardControls.optionsListOpenPopover(controlIds[1]); + await dashboardControls.optionsListPopoverClearSelections(); + expect(await dashboardControls.optionsListPopoverGetAvailableOptionsCount()).to.be(1); + expect(await dashboardControls.optionsListPopoverGetAvailableOptions()).to.eql(['Max']); + + await dashboardControls.optionsListOpenPopover(controlIds[2]); + await dashboardControls.optionsListPopoverClearSelections(); + expect(await dashboardControls.optionsListPopoverGetAvailableOptionsCount()).to.be(1); + expect(await dashboardControls.optionsListPopoverGetAvailableOptions()).to.eql(['woof']); + await dashboardControls.optionsListEnsurePopoverIsClosed(controlIds[2]); + }); + + it('Creating "exists" query from first control filters the second and third controls', async () => { + await dashboardControls.optionsListOpenPopover(controlIds[0]); + await dashboardControls.optionsListPopoverSetIncludeSelections(true); + await dashboardControls.optionsListEnsurePopoverIsClosed(controlIds[0]); + await dashboard.waitForRenderComplete(); + + await dashboardControls.optionsListOpenPopover(controlIds[1]); + expect(await dashboardControls.optionsListPopoverGetAvailableOptions()).to.not.contain('Max'); await dashboardControls.optionsListOpenPopover(controlIds[2]); - expect(await dashboardControls.optionsListPopoverGetAvailableOptionsCount()).to.be(0); + expect(await dashboardControls.optionsListPopoverGetAvailableOptions()).to.not.contain( + 'woof' + ); await dashboardControls.optionsListEnsurePopoverIsClosed(controlIds[2]); }); @@ -151,7 +224,6 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('Selecting an option in the first Options List will not filter the second or third controls', async () => { await dashboardControls.optionsListOpenPopover(controlIds[0]); - await dashboardControls.optionsListPopoverSetIncludeSelections(true); await dashboardControls.optionsListPopoverSelectOption('cat'); await dashboardControls.optionsListEnsurePopoverIsClosed(controlIds[0]); @@ -161,6 +233,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { 'sylvester', 'Fee Fee', 'Rover', + 'Max', ]); await ensureAvailableOptionsEql(controlIds[2], [ 'hiss', @@ -171,6 +244,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { 'growl', 'grr', 'bow ow ow', + 'woof', ]); }); }); diff --git a/test/functional/apps/dashboard_elements/controls/options_list.ts b/test/functional/apps/dashboard_elements/controls/options_list.ts index 091f893eec2cf6..6cfe2c31fa0c12 100644 --- a/test/functional/apps/dashboard_elements/controls/options_list.ts +++ b/test/functional/apps/dashboard_elements/controls/options_list.ts @@ -21,10 +21,12 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const testSubjects = getService('testSubjects'); const dashboardAddPanel = getService('dashboardAddPanel'); const dashboardPanelActions = getService('dashboardPanelActions'); - const { dashboardControls, timePicker, common, dashboard, header } = getPageObjects([ + + const { dashboardControls, timePicker, console, common, dashboard, header } = getPageObjects([ 'dashboardControls', 'timePicker', 'dashboard', + 'console', 'common', 'header', ]); @@ -32,8 +34,29 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const DASHBOARD_NAME = 'Test Options List Control'; describe('Dashboard options list integration', () => { + const newDocuments: Array<{ index: string; id: string }> = []; + + const addDocument = async (index: string, document: string) => { + await console.enterRequest('\nPOST ' + index + '/_doc/ \n{\n ' + document); + await console.clickPlay(); + await header.waitUntilLoadingHasFinished(); + const response = JSON.parse(await console.getResponse()); + newDocuments.push({ index, id: response._id }); + }; + before(async () => { await security.testUser.setRoles(['kibana_admin', 'test_logstash_reader', 'animals']); + + /* start by adding some incomplete data so that we can test `exists` query */ + await common.navigateToApp('console'); + await console.collapseHelp(); + await console.clearTextArea(); + await addDocument( + 'animals-cats-2018-01-01', + '"@timestamp": "2018-01-01T16:00:00.000Z", \n"name": "Rosie", \n"sound": "hiss"' + ); + + /* then, create our testing dashboard */ await common.navigateToApp('dashboard'); await dashboard.gotoDashboardLandingPage(); await dashboard.clickNewDashboard(); @@ -215,7 +238,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('Applies query settings to controls', async () => { it('Applies dashboard query to options list control', async () => { - await queryBar.setQuery('isDog : true '); + await queryBar.setQuery('animal.keyword : "dog" '); await queryBar.submitQuery(); await dashboard.waitForRenderComplete(); await header.waitUntilLoadingHasFinished(); @@ -336,10 +359,75 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const selectionString = await dashboardControls.optionsListGetSelectionsString(controlId); expect(selectionString).to.be('hiss, grr'); + }); + + it('excluding selections has expected results', async () => { + await dashboard.clickQuickSave(); + await dashboard.waitForRenderComplete(); await dashboardControls.optionsListOpenPopover(controlId); - await dashboardControls.optionsListPopoverClearSelections(); + await dashboardControls.optionsListPopoverSetIncludeSelections(false); await dashboardControls.optionsListEnsurePopoverIsClosed(controlId); + await dashboard.waitForRenderComplete(); + + expect(await pieChart.getPieSliceCount()).to.be(5); + await dashboard.clearUnsavedChanges(); + }); + + it('including selections has expected results', async () => { + await dashboardControls.optionsListOpenPopover(controlId); + await dashboardControls.optionsListPopoverSetIncludeSelections(true); + await dashboardControls.optionsListEnsurePopoverIsClosed(controlId); + await dashboard.waitForRenderComplete(); + + expect(await pieChart.getPieSliceCount()).to.be(2); + await dashboard.clearUnsavedChanges(); + }); + + describe('test exists query', async () => { + before(async () => { + await dashboardControls.deleteAllControls(); + await dashboardControls.createControl({ + controlType: OPTIONS_LIST_CONTROL, + dataViewTitle: 'animals-*', + fieldName: 'animal.keyword', + title: 'Animal', + }); + controlId = (await dashboardControls.getAllControlIds())[0]; + }); + + it('creating exists query has expected results', async () => { + expect((await pieChart.getPieChartValues())[0]).to.be(6); + await dashboardControls.optionsListOpenPopover(controlId); + await dashboardControls.optionsListPopoverSelectOption('exists'); + await dashboardControls.optionsListEnsurePopoverIsClosed(controlId); + await dashboard.waitForRenderComplete(); + + expect(await pieChart.getPieSliceCount()).to.be(5); + expect((await pieChart.getPieChartValues())[0]).to.be(5); + }); + + it('negating exists query has expected results', async () => { + await dashboardControls.optionsListOpenPopover(controlId); + await dashboardControls.optionsListPopoverSetIncludeSelections(false); + await dashboardControls.optionsListEnsurePopoverIsClosed(controlId); + await dashboard.waitForRenderComplete(); + + expect(await pieChart.getPieSliceCount()).to.be(1); + expect((await pieChart.getPieChartValues())[0]).to.be(1); + }); + }); + + after(async () => { + await dashboardControls.deleteAllControls(); + + await dashboardControls.createControl({ + controlType: OPTIONS_LIST_CONTROL, + dataViewTitle: 'animals-*', + fieldName: 'sound.keyword', + title: 'Animal Sounds', + }); + controlId = (await dashboardControls.getAllControlIds())[0]; }); }); @@ -359,7 +447,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('Can mark selections invalid with Query', async () => { - await queryBar.setQuery('isDog : false '); + await queryBar.setQuery('NOT animal.keyword : "dog" '); await queryBar.submitQuery(); await dashboard.waitForRenderComplete(); await header.waitUntilLoadingHasFinished(); @@ -385,27 +473,6 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { expect(await pieChart.getPieSliceCount()).to.be(2); }); - it('excluding selections has expected results', async () => { - await dashboard.clickQuickSave(); - await dashboard.waitForRenderComplete(); - - await dashboardControls.optionsListOpenPopover(controlId); - await dashboardControls.optionsListPopoverSetIncludeSelections(false); - await dashboard.waitForRenderComplete(); - - expect(await pieChart.getPieSliceCount()).to.be(5); - await dashboard.clearUnsavedChanges(); - }); - - it('including selections has expected results', async () => { - await dashboardControls.optionsListOpenPopover(controlId); - await dashboardControls.optionsListPopoverSetIncludeSelections(true); - await dashboard.waitForRenderComplete(); - - expect(await pieChart.getPieSliceCount()).to.be(2); - await dashboard.clearUnsavedChanges(); - }); - it('Can mark multiple selections invalid with Filter', async () => { await filterBar.addFilter('sound.keyword', 'is', ['hiss']); await dashboard.waitForRenderComplete(); @@ -429,7 +496,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('Does not mark selections invalid with Query', async () => { - await queryBar.setQuery('isDog : false '); + await queryBar.setQuery('NOT animal.keyword : "dog" '); await queryBar.submitQuery(); await dashboard.waitForRenderComplete(); await header.waitUntilLoadingHasFinished(); @@ -448,8 +515,19 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await filterBar.removeAllFilters(); await queryBar.clickQuerySubmitButton(); await dashboardControls.clearAllControls(); - await security.testUser.restoreDefaults(); }); }); + + after(async () => { + await common.navigateToApp('console'); + await console.collapseHelp(); + await console.clearTextArea(); + for (const { index, id } of newDocuments) { + await console.enterRequest(`\nDELETE /${index}/_doc/${id}`); + await console.clickPlay(); + await header.waitUntilLoadingHasFinished(); + } + await security.testUser.restoreDefaults(); + }); }); } diff --git a/test/functional/page_objects/dashboard_page_controls.ts b/test/functional/page_objects/dashboard_page_controls.ts index 1e04ebb467d892..461734c61d0ce3 100644 --- a/test/functional/page_objects/dashboard_page_controls.ts +++ b/test/functional/page_objects/dashboard_page_controls.ts @@ -346,10 +346,11 @@ export class DashboardPageControls extends FtrService { return +(await availableOptions.getAttribute('data-option-count')); } - public async optionsListPopoverGetAvailableOptions() { - this.log.debug(`getting available options count from options list`); + public async optionsListPopoverGetAvailableOptions(filterOutExists: boolean = true) { + this.log.debug(`getting available options from options list`); const availableOptions = await this.testSubjects.find(`optionsList-control-available-options`); - return (await availableOptions.getVisibleText()).split('\n'); + const availableOptionsArray = (await availableOptions.getVisibleText()).split('\n'); + return filterOutExists ? availableOptionsArray.slice(1) : availableOptionsArray; } public async optionsListPopoverSearchForOption(search: string) { diff --git a/test/functional/services/visualizations/pie_chart.ts b/test/functional/services/visualizations/pie_chart.ts index 0669bb6e91e52e..4067c2f1868c5c 100644 --- a/test/functional/services/visualizations/pie_chart.ts +++ b/test/functional/services/visualizations/pie_chart.ts @@ -178,6 +178,22 @@ export class PieChartService extends FtrService { ); } + async getPieChartValues(isNewLibrary: boolean = true) { + this.log.debug('PieChart.getPieChartValues'); + if (isNewLibrary) { + const slices = + (await this.visChart.getEsChartDebugState(partitionVisChartSelector))?.partition?.[0] + ?.partitions ?? []; + return slices.map((slice) => { + return slice.value; + }); + } + const chartTypes = await this.find.allByCssSelector('path.slice', this.defaultFindTimeout * 2); + return await Promise.all( + chartTypes.map(async (chart) => await chart.getAttribute('data-value')) + ); + } + async getPieSliceCount(isNewLibrary: boolean = true) { this.log.debug('PieChart.getPieSliceCount'); if (isNewLibrary) { diff --git a/test/plugin_functional/plugins/kbn_tp_custom_visualizations/kibana.json b/test/plugin_functional/plugins/kbn_tp_custom_visualizations/kibana.json index 35be433601f45e..25be1386e52321 100644 --- a/test/plugin_functional/plugins/kbn_tp_custom_visualizations/kibana.json +++ b/test/plugin_functional/plugins/kbn_tp_custom_visualizations/kibana.json @@ -2,7 +2,7 @@ "id": "kbnTpCustomVisualizations", "owner": { "name": "Vis Editors", - "githubTeam": "kibana-vis-editors" + "githubTeam": "kibana-visualizations" }, "version": "0.0.1", "kibanaVersion": "kibana", diff --git a/x-pack/examples/embedded_lens_example/kibana.json b/x-pack/examples/embedded_lens_example/kibana.json index dc979e21aeff57..735118211647d3 100644 --- a/x-pack/examples/embedded_lens_example/kibana.json +++ b/x-pack/examples/embedded_lens_example/kibana.json @@ -15,6 +15,6 @@ "requiredBundles": [], "owner": { "name": "Vis Editors", - "githubTeam": "kibana-vis-editors" + "githubTeam": "kibana-visualizations" } } diff --git a/x-pack/examples/testing_embedded_lens/kibana.json b/x-pack/examples/testing_embedded_lens/kibana.json index febfc95bcecc25..2d4250165a1599 100644 --- a/x-pack/examples/testing_embedded_lens/kibana.json +++ b/x-pack/examples/testing_embedded_lens/kibana.json @@ -16,6 +16,6 @@ "requiredBundles": [], "owner": { "name": "Vis Editors", - "githubTeam": "kibana-vis-editors" + "githubTeam": "kibana-visualizations" } } diff --git a/x-pack/examples/third_party_lens_navigation_prompt/kibana.json b/x-pack/examples/third_party_lens_navigation_prompt/kibana.json index 81af0557a92c66..76618ca62bfe14 100644 --- a/x-pack/examples/third_party_lens_navigation_prompt/kibana.json +++ b/x-pack/examples/third_party_lens_navigation_prompt/kibana.json @@ -17,6 +17,6 @@ ], "owner": { "name": "Vis Editors", - "githubTeam": "kibana-vis-editors" + "githubTeam": "kibana-visualizations" } } diff --git a/x-pack/examples/third_party_vis_lens_example/kibana.json b/x-pack/examples/third_party_vis_lens_example/kibana.json index 858466f7f76404..9a00bf0750c6e0 100644 --- a/x-pack/examples/third_party_vis_lens_example/kibana.json +++ b/x-pack/examples/third_party_vis_lens_example/kibana.json @@ -19,6 +19,6 @@ ], "owner": { "name": "Vis Editors", - "githubTeam": "kibana-vis-editors" + "githubTeam": "kibana-visualizations" } } diff --git a/x-pack/plugins/aiops/server/routes/explain_log_rate_spikes.ts b/x-pack/plugins/aiops/server/routes/explain_log_rate_spikes.ts index 1e1c85d5e4b303..9324b70d7225ba 100644 --- a/x-pack/plugins/aiops/server/routes/explain_log_rate_spikes.ts +++ b/x-pack/plugins/aiops/server/routes/explain_log_rate_spikes.ts @@ -5,18 +5,22 @@ * 2.0. */ -import { chunk } from 'lodash'; +import { queue } from 'async'; import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { i18n } from '@kbn/i18n'; -import { asyncForEach } from '@kbn/std'; import type { IRouter } from '@kbn/core/server'; import { KBN_FIELD_TYPES } from '@kbn/field-types'; import type { Logger } from '@kbn/logging'; import type { DataRequestHandlerContext } from '@kbn/data-plugin/server'; import { streamFactory } from '@kbn/aiops-utils'; -import type { ChangePoint, NumericChartData, NumericHistogramField } from '@kbn/ml-agg-utils'; +import type { + ChangePoint, + ChangePointGroup, + NumericChartData, + NumericHistogramField, +} from '@kbn/ml-agg-utils'; import { fetchHistogramsForFields } from '@kbn/ml-agg-utils'; import { stringHash } from '@kbn/ml-string-hash'; @@ -209,6 +213,8 @@ export const defineExplainLogRateSpikesRoute = ( loaded += LOADED_FIELD_CANDIDATES; + const fieldCandidatesCount = fieldCandidates.length; + push( updateLoadingStateAction({ ccsWarning: false, @@ -219,14 +225,14 @@ export const defineExplainLogRateSpikesRoute = ( defaultMessage: 'Identified {fieldCandidatesCount, plural, one {# field candidate} other {# field candidates}}.', values: { - fieldCandidatesCount: fieldCandidates.length, + fieldCandidatesCount, }, } ), }) ); - if (fieldCandidates.length === 0) { + if (fieldCandidatesCount === 0) { endWithUpdatedLoadingState(); } else if (shouldStop) { logDebugMessage('shouldStop after fetching field candidates.'); @@ -239,24 +245,20 @@ export const defineExplainLogRateSpikesRoute = ( // Don't use more than 10 here otherwise Kibana will emit an error // regarding a limit of abort signal listeners of more than 10. - const CHUNK_SIZE = 10; - let chunkCount = 0; - - const fieldCandidatesChunks = chunk(fieldCandidates, CHUNK_SIZE); + const MAX_CONCURRENT_QUERIES = 10; logDebugMessage('Fetch p-values.'); - for (const fieldCandidatesChunk of fieldCandidatesChunks) { - chunkCount++; - logDebugMessage( - `Fetch p-values. Chunk ${chunkCount} of ${fieldCandidatesChunks.length}` - ); + const pValuesQueue = queue(async function (fieldCandidate: string) { + loaded += (1 / fieldCandidatesCount) * PROGRESS_STEP_P_VALUES; + let pValues: Awaited>; + try { pValues = await fetchChangePointPValues( client, request.body, - fieldCandidatesChunk, + [fieldCandidate], logger, sampleProbability, pushError, @@ -265,13 +267,11 @@ export const defineExplainLogRateSpikesRoute = ( } catch (e) { if (!isRequestAbortedError(e)) { logger.error( - `Failed to fetch p-values for ${JSON.stringify( - fieldCandidatesChunk - )}, got: \n${e.toString()}` + `Failed to fetch p-values for '${fieldCandidate}', got: \n${e.toString()}` ); - pushError(`Failed to fetch p-values for ${JSON.stringify(fieldCandidatesChunk)}.`); - } // Still continue the analysis even if chunks of p-value queries fail. - continue; + pushError(`Failed to fetch p-values for '${fieldCandidate}'.`); + } + return; } if (pValues.length > 0) { @@ -279,12 +279,10 @@ export const defineExplainLogRateSpikesRoute = ( fieldsToSample.add(d.fieldName); }); changePoints.push(...pValues); - } - loaded += (1 / fieldCandidatesChunks.length) * PROGRESS_STEP_P_VALUES; - if (pValues.length > 0) { push(addChangePointsAction(pValues)); } + push( updateLoadingStateAction({ ccsWarning: false, @@ -304,10 +302,13 @@ export const defineExplainLogRateSpikesRoute = ( if (shouldStop) { logDebugMessage('shouldStop fetching p-values.'); + pValuesQueue.kill(); end(); - return; } - } + }, MAX_CONCURRENT_QUERIES); + + pValuesQueue.push(fieldCandidates); + await pValuesQueue.drain(); if (changePoints.length === 0) { logDebugMessage('Stopping analysis, did not find change points.'); @@ -572,84 +573,84 @@ export const defineExplainLogRateSpikesRoute = ( logDebugMessage(`Fetch ${changePointGroups.length} group histograms.`); - const changePointGroupsChunks = chunk(changePointGroups, CHUNK_SIZE); - - for (const changePointGroupsChunk of changePointGroupsChunks) { + const groupHistogramQueue = queue(async function (cpg: ChangePointGroup) { if (shouldStop) { logDebugMessage('shouldStop abort fetching group histograms.'); + groupHistogramQueue.kill(); end(); return; } - await asyncForEach(changePointGroupsChunk, async (cpg) => { - if (overallTimeSeries !== undefined) { - const histogramQuery = getHistogramQuery( - request.body, - cpg.group.map((d) => ({ - term: { [d.fieldName]: d.fieldValue }, - })) - ); + if (overallTimeSeries !== undefined) { + const histogramQuery = getHistogramQuery( + request.body, + cpg.group.map((d) => ({ + term: { [d.fieldName]: d.fieldValue }, + })) + ); - let cpgTimeSeries: NumericChartData; - try { - cpgTimeSeries = ( - (await fetchHistogramsForFields( - client, - request.body.index, - histogramQuery, - // fields - [ - { - fieldName: request.body.timeFieldName, - type: KBN_FIELD_TYPES.DATE, - interval: overallTimeSeries.interval, - min: overallTimeSeries.stats[0], - max: overallTimeSeries.stats[1], - }, - ], - // samplerShardSize - -1, - undefined, - abortSignal - )) as [NumericChartData] - )[0]; - } catch (e) { - if (!isRequestAbortedError(e)) { - logger.error( - `Failed to fetch the histogram data for group #${ - cpg.id - }, got: \n${e.toString()}` - ); - pushError(`Failed to fetch the histogram data for group #${cpg.id}.`); - } - return; + let cpgTimeSeries: NumericChartData; + try { + cpgTimeSeries = ( + (await fetchHistogramsForFields( + client, + request.body.index, + histogramQuery, + // fields + [ + { + fieldName: request.body.timeFieldName, + type: KBN_FIELD_TYPES.DATE, + interval: overallTimeSeries.interval, + min: overallTimeSeries.stats[0], + max: overallTimeSeries.stats[1], + }, + ], + // samplerShardSize + -1, + undefined, + abortSignal + )) as [NumericChartData] + )[0]; + } catch (e) { + if (!isRequestAbortedError(e)) { + logger.error( + `Failed to fetch the histogram data for group #${ + cpg.id + }, got: \n${e.toString()}` + ); + pushError(`Failed to fetch the histogram data for group #${cpg.id}.`); } - const histogram = - overallTimeSeries.data.map((o, i) => { - const current = cpgTimeSeries.data.find( - (d1) => d1.key_as_string === o.key_as_string - ) ?? { - doc_count: 0, - }; - return { - key: o.key, - key_as_string: o.key_as_string ?? '', - doc_count_change_point: current.doc_count, - doc_count_overall: Math.max(0, o.doc_count - current.doc_count), - }; - }) ?? []; - - push( - addChangePointsGroupHistogramAction([ - { - id: cpg.id, - histogram, - }, - ]) - ); + return; } - }); - } + const histogram = + overallTimeSeries.data.map((o, i) => { + const current = cpgTimeSeries.data.find( + (d1) => d1.key_as_string === o.key_as_string + ) ?? { + doc_count: 0, + }; + return { + key: o.key, + key_as_string: o.key_as_string ?? '', + doc_count_change_point: current.doc_count, + doc_count_overall: Math.max(0, o.doc_count - current.doc_count), + }; + }) ?? []; + + push( + addChangePointsGroupHistogramAction([ + { + id: cpg.id, + histogram, + }, + ]) + ); + } + }, MAX_CONCURRENT_QUERIES); + + groupHistogramQueue.push(changePointGroups); + await groupHistogramQueue.drain(); } } catch (e) { if (!isRequestAbortedError(e)) { @@ -667,90 +668,90 @@ export const defineExplainLogRateSpikesRoute = ( // time series filtered by fields if (changePoints.length > 0 && overallTimeSeries !== undefined) { - const changePointsChunks = chunk(changePoints, CHUNK_SIZE); - - for (const changePointsChunk of changePointsChunks) { + const fieldValueHistogramQueue = queue(async function (cp: ChangePoint) { if (shouldStop) { logDebugMessage('shouldStop abort fetching field/value histograms.'); + fieldValueHistogramQueue.kill(); end(); return; } - await asyncForEach(changePointsChunk, async (cp) => { - if (overallTimeSeries !== undefined) { - const histogramQuery = getHistogramQuery(request.body, [ + if (overallTimeSeries !== undefined) { + const histogramQuery = getHistogramQuery(request.body, [ + { + term: { [cp.fieldName]: cp.fieldValue }, + }, + ]); + + let cpTimeSeries: NumericChartData; + + try { + cpTimeSeries = ( + (await fetchHistogramsForFields( + client, + request.body.index, + histogramQuery, + // fields + [ + { + fieldName: request.body.timeFieldName, + type: KBN_FIELD_TYPES.DATE, + interval: overallTimeSeries.interval, + min: overallTimeSeries.stats[0], + max: overallTimeSeries.stats[1], + }, + ], + // samplerShardSize + -1, + undefined, + abortSignal + )) as [NumericChartData] + )[0]; + } catch (e) { + logger.error( + `Failed to fetch the histogram data for field/value pair "${cp.fieldName}:${ + cp.fieldValue + }", got: \n${e.toString()}` + ); + pushError( + `Failed to fetch the histogram data for field/value pair "${cp.fieldName}:${cp.fieldValue}".` + ); + return; + } + + const histogram = + overallTimeSeries.data.map((o, i) => { + const current = cpTimeSeries.data.find( + (d1) => d1.key_as_string === o.key_as_string + ) ?? { + doc_count: 0, + }; + return { + key: o.key, + key_as_string: o.key_as_string ?? '', + doc_count_change_point: current.doc_count, + doc_count_overall: Math.max(0, o.doc_count - current.doc_count), + }; + }) ?? []; + + const { fieldName, fieldValue } = cp; + + loaded += (1 / changePoints.length) * PROGRESS_STEP_HISTOGRAMS; + pushHistogramDataLoadingState(); + push( + addChangePointsHistogramAction([ { - term: { [cp.fieldName]: cp.fieldValue }, + fieldName, + fieldValue, + histogram, }, - ]); - - let cpTimeSeries: NumericChartData; - - try { - cpTimeSeries = ( - (await fetchHistogramsForFields( - client, - request.body.index, - histogramQuery, - // fields - [ - { - fieldName: request.body.timeFieldName, - type: KBN_FIELD_TYPES.DATE, - interval: overallTimeSeries.interval, - min: overallTimeSeries.stats[0], - max: overallTimeSeries.stats[1], - }, - ], - // samplerShardSize - -1, - undefined, - abortSignal - )) as [NumericChartData] - )[0]; - } catch (e) { - logger.error( - `Failed to fetch the histogram data for field/value pair "${cp.fieldName}:${ - cp.fieldValue - }", got: \n${e.toString()}` - ); - pushError( - `Failed to fetch the histogram data for field/value pair "${cp.fieldName}:${cp.fieldValue}".` - ); - return; - } + ]) + ); + } + }, MAX_CONCURRENT_QUERIES); - const histogram = - overallTimeSeries.data.map((o, i) => { - const current = cpTimeSeries.data.find( - (d1) => d1.key_as_string === o.key_as_string - ) ?? { - doc_count: 0, - }; - return { - key: o.key, - key_as_string: o.key_as_string ?? '', - doc_count_change_point: current.doc_count, - doc_count_overall: Math.max(0, o.doc_count - current.doc_count), - }; - }) ?? []; - - const { fieldName, fieldValue } = cp; - - loaded += (1 / changePoints.length) * PROGRESS_STEP_HISTOGRAMS; - pushHistogramDataLoadingState(); - push( - addChangePointsHistogramAction([ - { - fieldName, - fieldValue, - histogram, - }, - ]) - ); - } - }); - } + fieldValueHistogramQueue.push(changePoints); + await fieldValueHistogramQueue.drain(); } endWithUpdatedLoadingState(); diff --git a/x-pack/plugins/apm/public/utils/test_helpers.tsx b/x-pack/plugins/apm/public/utils/test_helpers.tsx index 4510493fccef53..bb81f73ef77054 100644 --- a/x-pack/plugins/apm/public/utils/test_helpers.tsx +++ b/x-pack/plugins/apm/public/utils/test_helpers.tsx @@ -19,8 +19,6 @@ import { Moment } from 'moment-timezone'; import React from 'react'; import { MemoryRouter } from 'react-router-dom'; import { EuiThemeProvider } from '@kbn/kibana-react-plugin/common'; -import type { ESSearchRequest, ESSearchResponse } from '@kbn/es-types'; -import { APMConfig } from '../../server'; import { MockApmPluginContextWrapper } from '../context/apm_plugin/mock_apm_plugin_context'; import { UrlParamsProvider } from '../context/url_params_context/url_params_context'; @@ -110,95 +108,6 @@ export function expectTextsInDocument(output: any, texts: string[]) { }); } -interface MockSetup { - apmEventClient: any; - internalClient: any; - config: APMConfig; - indices: { - sourcemap: string; - error: string; - onboarding: string; - span: string; - transaction: string; - metric: string; - apmAgentConfigurationIndex: string; - apmCustomLinkIndex: string; - }; -} - -interface Options { - mockResponse?: ( - request: ESSearchRequest - ) => ESSearchResponse; -} - -export async function inspectSearchParams( - fn: (mockSetup: MockSetup) => Promise, - options: Options = {} -) { - const spy = jest.fn().mockImplementation(async (request) => { - return options.mockResponse - ? options.mockResponse(request) - : { - hits: { - hits: { - total: { - value: 0, - }, - }, - }, - }; - }); - - let response; - let error; - - const mockSetup = { - apmEventClient: { search: spy } as any, - internalClient: { search: spy } as any, - config: new Proxy( - {}, - { - get: (_, key) => { - switch (key) { - default: - return 'myIndex'; - - case 'xpack.apm.metricsInterval': - return 30; - } - }, - } - ) as APMConfig, - indices: { - sourcemap: 'myIndex', - error: 'myIndex', - onboarding: 'myIndex', - span: 'myIndex', - transaction: 'myIndex', - metric: 'myIndex', - apmAgentConfigurationIndex: 'myIndex', - apmCustomLinkIndex: 'myIndex', - }, - }; - try { - response = await fn(mockSetup); - } catch (err) { - error = err; - // we're only extracting the search params - } - - return { - params: spy.mock.calls[0][0], - response, - error, - spy, - teardown: () => spy.mockClear(), - }; -} - -export type SearchParamsMock = Awaited>; - export function renderWithTheme( component: React.ReactNode, params?: any, diff --git a/x-pack/plugins/apm/server/lib/anomaly_detection/anomaly_search.ts b/x-pack/plugins/apm/server/lib/anomaly_detection/anomaly_search.ts index b6d54dd5c63ee9..0017e948638281 100644 --- a/x-pack/plugins/apm/server/lib/anomaly_detection/anomaly_search.ts +++ b/x-pack/plugins/apm/server/lib/anomaly_detection/anomaly_search.ts @@ -6,7 +6,7 @@ */ import type { ESSearchRequest, ESSearchResponse } from '@kbn/es-types'; -import { Setup } from '../helpers/setup_request'; +import { MlClient } from '../helpers/get_ml_client'; interface SharedFields { job_id: string; @@ -43,7 +43,7 @@ interface MlRecord extends SharedFields { type AnomalyDocument = MlRecord | MlModelPlot; export async function anomalySearch( - mlAnomalySearch: Required['ml']['mlSystem']['mlAnomalySearch'], + mlAnomalySearch: Required['mlSystem']['mlAnomalySearch'], params: TParams ): Promise> { const response = await mlAnomalySearch(params, []); diff --git a/x-pack/plugins/apm/server/lib/anomaly_detection/create_anomaly_detection_jobs.ts b/x-pack/plugins/apm/server/lib/anomaly_detection/create_anomaly_detection_jobs.ts index fd369cd1328f21..7480fd1c847f3f 100644 --- a/x-pack/plugins/apm/server/lib/anomaly_detection/create_anomaly_detection_jobs.ts +++ b/x-pack/plugins/apm/server/lib/anomaly_detection/create_anomaly_detection_jobs.ts @@ -19,22 +19,31 @@ import { import { Environment } from '../../../common/environment_rt'; import { environmentQuery } from '../../../common/utils/environment_query'; import { withApmSpan } from '../../utils/with_apm_span'; -import { Setup } from '../helpers/setup_request'; +import { MlClient } from '../helpers/get_ml_client'; import { APM_ML_JOB_GROUP, ML_MODULE_ID_APM_TRANSACTION } from './constants'; import { getAnomalyDetectionJobs } from './get_anomaly_detection_jobs'; +import { ApmIndicesConfig } from '../../routes/settings/apm_indices/get_apm_indices'; -export async function createAnomalyDetectionJobs( - setup: Setup, - environments: Environment[], - logger: Logger -) { - const { ml, indices } = setup; - - if (!ml) { +export async function createAnomalyDetectionJobs({ + mlClient, + indices, + environments, + logger, +}: { + mlClient?: MlClient; + indices: ApmIndicesConfig; + environments: Environment[]; + logger: Logger; +}) { + if (!mlClient) { throw Boom.notImplemented(ML_ERRORS.ML_NOT_AVAILABLE); } - const uniqueMlJobEnvs = await getUniqueMlJobEnvs(setup, environments, logger); + const uniqueMlJobEnvs = await getUniqueMlJobEnvs( + mlClient, + environments, + logger + ); if (uniqueMlJobEnvs.length === 0) { return []; } @@ -44,10 +53,10 @@ export async function createAnomalyDetectionJobs( `Creating ML anomaly detection jobs for environments: [${uniqueMlJobEnvs}].` ); - const dataViewName = indices.metric; + const apmMetricIndex = indices.metric; const responses = await Promise.all( uniqueMlJobEnvs.map((environment) => - createAnomalyDetectionJob({ ml, environment, dataViewName }) + createAnomalyDetectionJob({ mlClient, environment, apmMetricIndex }) ) ); @@ -66,22 +75,22 @@ export async function createAnomalyDetectionJobs( } async function createAnomalyDetectionJob({ - ml, + mlClient, environment, - dataViewName, + apmMetricIndex, }: { - ml: Required['ml']; + mlClient: Required; environment: string; - dataViewName: string; + apmMetricIndex: string; }) { return withApmSpan('create_anomaly_detection_job', async () => { const randomToken = uuid().substr(-4); - return ml.modules.setup({ + return mlClient.modules.setup({ moduleId: ML_MODULE_ID_APM_TRANSACTION, prefix: `${APM_ML_JOB_GROUP}-${snakeCase(environment)}-${randomToken}-`, groups: [APM_ML_JOB_GROUP], - indexPatternName: dataViewName, + indexPatternName: apmMetricIndex, applyToAllSpaces: true, start: moment().subtract(4, 'weeks').valueOf(), query: { @@ -110,12 +119,12 @@ async function createAnomalyDetectionJob({ } async function getUniqueMlJobEnvs( - setup: Setup, + mlClient: MlClient, environments: Environment[], logger: Logger ) { // skip creation of duplicate ML jobs - const jobs = await getAnomalyDetectionJobs(setup); + const jobs = await getAnomalyDetectionJobs(mlClient); const existingMlJobEnvs = jobs .filter((job) => job.version === 3) .map(({ environment }) => environment); diff --git a/x-pack/plugins/apm/server/lib/anomaly_detection/get_anomaly_detection_jobs.ts b/x-pack/plugins/apm/server/lib/anomaly_detection/get_anomaly_detection_jobs.ts index 9047ae9ed90d01..46b87f6247dcb5 100644 --- a/x-pack/plugins/apm/server/lib/anomaly_detection/get_anomaly_detection_jobs.ts +++ b/x-pack/plugins/apm/server/lib/anomaly_detection/get_anomaly_detection_jobs.ts @@ -6,15 +6,13 @@ */ import Boom from '@hapi/boom'; import { ML_ERRORS } from '../../../common/anomaly_detection'; -import { Setup } from '../helpers/setup_request'; +import { MlClient } from '../helpers/get_ml_client'; import { getMlJobsWithAPMGroup } from './get_ml_jobs_with_apm_group'; -export function getAnomalyDetectionJobs(setup: Setup) { - const { ml } = setup; - - if (!ml) { +export function getAnomalyDetectionJobs(mlClient?: MlClient) { + if (!mlClient) { throw Boom.notImplemented(ML_ERRORS.ML_NOT_AVAILABLE); } - return getMlJobsWithAPMGroup(ml.anomalyDetectors); + return getMlJobsWithAPMGroup(mlClient.anomalyDetectors); } diff --git a/x-pack/plugins/apm/server/lib/anomaly_detection/get_anomaly_timeseries.ts b/x-pack/plugins/apm/server/lib/anomaly_detection/get_anomaly_timeseries.ts index b1c77a4fe43720..50b8eef4001c98 100644 --- a/x-pack/plugins/apm/server/lib/anomaly_detection/get_anomaly_timeseries.ts +++ b/x-pack/plugins/apm/server/lib/anomaly_detection/get_anomaly_timeseries.ts @@ -19,7 +19,7 @@ import type { ServiceAnomalyTimeseries } from '../../../common/anomaly_detection import { apmMlJobsQuery } from './apm_ml_jobs_query'; import { asMutableArray } from '../../../common/utils/as_mutable_array'; import { maybe } from '../../../common/utils/maybe'; -import type { Setup } from '../helpers/setup_request'; +import type { MlClient } from '../helpers/get_ml_client'; import { anomalySearch } from './anomaly_search'; import { getAnomalyResultBucketSize } from './get_anomaly_result_bucket_size'; import { getMlJobsWithAPMGroup } from './get_ml_jobs_with_apm_group'; @@ -51,7 +51,7 @@ export async function getAnomalyTimeseries({ start, end, logger, - mlSetup, + mlClient, environment: preferredEnvironment, }: { serviceName: string; @@ -60,13 +60,13 @@ export async function getAnomalyTimeseries({ end: number; environment: Environment; logger: Logger; - mlSetup: Required['ml']; + mlClient: MlClient; }): Promise { - if (!mlSetup) { + if (!mlClient) { return []; } - const mlJobs = await getMlJobsWithAPMGroup(mlSetup.anomalyDetectors); + const mlJobs = await getMlJobsWithAPMGroup(mlClient.anomalyDetectors); if (!mlJobs.length) { return []; @@ -98,7 +98,7 @@ export async function getAnomalyTimeseries({ minBucketSize, }); const anomaliesResponse = await anomalySearch( - mlSetup.mlSystem.mlAnomalySearch, + mlClient.mlSystem.mlAnomalySearch, { body: { size: 0, diff --git a/x-pack/plugins/apm/server/lib/helpers/create_es_client/create_apm_event_client/index.ts b/x-pack/plugins/apm/server/lib/helpers/create_es_client/create_apm_event_client/index.ts index a22db0bb58b6f9..ed2d3e123fdb5b 100644 --- a/x-pack/plugins/apm/server/lib/helpers/create_es_client/create_apm_event_client/index.ts +++ b/x-pack/plugins/apm/server/lib/helpers/create_es_client/create_apm_event_client/index.ts @@ -88,7 +88,7 @@ export class APMEventClient { private readonly esClient: ElasticsearchClient; private readonly debug: boolean; private readonly request: KibanaRequest; - private readonly indices: ApmIndicesConfig; + public readonly indices: ApmIndicesConfig; private readonly includeFrozen: boolean; private readonly forceSyntheticSource: boolean; diff --git a/x-pack/plugins/apm/server/lib/helpers/create_es_client/create_internal_es_client/index.ts b/x-pack/plugins/apm/server/lib/helpers/create_es_client/create_internal_es_client/index.ts index 4fe02385947577..f48971588a050d 100644 --- a/x-pack/plugins/apm/server/lib/helpers/create_es_client/create_internal_es_client/index.ts +++ b/x-pack/plugins/apm/server/lib/helpers/create_es_client/create_internal_es_client/index.ts @@ -15,10 +15,11 @@ import { getDebugTitle, } from '../call_async_with_debug'; import { cancelEsRequestOnAbort } from '../cancel_es_request_on_abort'; +import { getApmIndices } from '../../../../routes/settings/apm_indices/get_apm_indices'; export type APMIndexDocumentParams = estypes.IndexRequest; -export type APMInternalClient = Awaited< +export type APMInternalESClient = Awaited< ReturnType >; @@ -26,8 +27,13 @@ export async function createInternalESClient({ context, debug, request, -}: Pick & { debug: boolean }) { - const { asInternalUser } = (await context.core).elasticsearch.client; + config, +}: Pick & { + debug: boolean; +}) { + const coreContext = await context.core; + const { asInternalUser } = coreContext.elasticsearch.client; + const savedObjectsClient = coreContext.savedObjects.client; function callEs( operationName: string, @@ -62,6 +68,7 @@ export async function createInternalESClient({ } return { + apmIndices: await getApmIndices({ savedObjectsClient, config }), search: async < TDocument = unknown, TSearchRequest extends ESSearchRequest = ESSearchRequest diff --git a/x-pack/plugins/apm/server/lib/helpers/get_ml_client.ts b/x-pack/plugins/apm/server/lib/helpers/get_ml_client.ts new file mode 100644 index 00000000000000..372df50be6d4d0 --- /dev/null +++ b/x-pack/plugins/apm/server/lib/helpers/get_ml_client.ts @@ -0,0 +1,46 @@ +/* + * 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 { isActivePlatinumLicense } from '../../../common/license_check'; +import { APMRouteHandlerResources } from '../../routes/typings'; + +export interface MlClient { + mlSystem: any; + anomalyDetectors: any; + modules: any; +} + +export async function getMlClient({ + plugins, + context, + request, +}: APMRouteHandlerResources) { + const [coreContext, licensingContext] = await Promise.all([ + context.core, + context.licensing, + ]); + + const mlplugin = plugins.ml; + + if (!mlplugin || !isActivePlatinumLicense(licensingContext.license)) { + return; + } + return { + mlSystem: mlplugin.setup.mlSystemProvider( + request, + coreContext.savedObjects.client + ), + anomalyDetectors: mlplugin.setup.anomalyDetectorsProvider( + request, + coreContext.savedObjects.client + ), + modules: mlplugin.setup.modulesProvider( + request, + coreContext.savedObjects.client + ), + }; +} diff --git a/x-pack/plugins/apm/server/lib/helpers/setup_request.test.ts b/x-pack/plugins/apm/server/lib/helpers/setup_request.test.ts deleted file mode 100644 index ef8dcbbe63ee22..00000000000000 --- a/x-pack/plugins/apm/server/lib/helpers/setup_request.test.ts +++ /dev/null @@ -1,122 +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 { elasticsearchServiceMock } from '@kbn/core/server/mocks'; -import { setupRequest } from './setup_request'; -import { APMConfig } from '../..'; -import { APMRouteHandlerResources } from '../../routes/typings'; -import { getApmIndices } from '../../routes/settings/apm_indices/get_apm_indices'; - -jest.mock('../../routes/settings/apm_indices/get_apm_indices', () => ({ - getApmIndices: async () => - ({ - sourcemap: 'apm-*', - error: 'apm-*', - onboarding: 'apm-*', - span: 'apm-*', - transaction: 'apm-*', - metric: 'apm-*', - apmAgentConfigurationIndex: 'apm-*', - } as Awaited>), -})); - -function getMockResources() { - const esClientMock = elasticsearchServiceMock.createScopedClusterClient(); - // @ts-expect-error incomplete definition - esClientMock.asCurrentUser.search.mockResponse({}); - // @ts-expect-error incomplete definition - esClientMock.asInternalUser.search.mockResponse({}); - - const mockResources = { - config: new Proxy( - {}, - { - get: () => 'apm-*', - } - ) as APMConfig, - params: { - query: { - _inspect: false, - }, - }, - context: { - core: { - elasticsearch: { - client: esClientMock, - }, - uiSettings: { - client: { - get: jest.fn().mockResolvedValue(false), - }, - }, - savedObjects: { - client: { - get: jest.fn(), - }, - }, - }, - }, - plugins: { - ml: undefined, - }, - request: { - url: '', - events: { - aborted$: { - subscribe: jest.fn().mockReturnValue({ unsubscribe: jest.fn() }), - }, - }, - }, - } as unknown as APMRouteHandlerResources & { - context: { - core: { - elasticsearch: { - client: typeof esClientMock; - }; - uiSettings: { - client: { - get: jest.Mock; - }; - }; - savedObjects: { - client: { - get: jest.Mock; - }; - }; - }; - }; - }; - - return mockResources; -} - -describe('setupRequest', () => { - describe('with default args', () => { - it('calls callWithInternalUser', async () => { - const mockResources = getMockResources(); - const { internalClient } = await setupRequest(mockResources); - await internalClient.search('foo', { - index: ['apm-*'], - body: { foo: 'bar' }, - } as any); - expect( - mockResources.context.core.elasticsearch.client.asInternalUser.search - ).toHaveBeenCalledWith( - { - index: ['apm-*'], - body: { - foo: 'bar', - }, - }, - { - signal: expect.any(Object), - meta: true, - } - ); - }); - }); -}); diff --git a/x-pack/plugins/apm/server/lib/helpers/setup_request.ts b/x-pack/plugins/apm/server/lib/helpers/setup_request.ts deleted file mode 100644 index 457c002c67b97d..00000000000000 --- a/x-pack/plugins/apm/server/lib/helpers/setup_request.ts +++ /dev/null @@ -1,90 +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 { KibanaRequest } from '@kbn/core/server'; -import { UI_SETTINGS } from '@kbn/data-plugin/common'; -import { isActivePlatinumLicense } from '../../../common/license_check'; -import { APMConfig } from '../..'; -import { APMRouteHandlerResources } from '../../routes/typings'; -import { - ApmIndicesConfig, - getApmIndices, -} from '../../routes/settings/apm_indices/get_apm_indices'; -import { - APMInternalClient, - createInternalESClient, -} from './create_es_client/create_internal_es_client'; -import { withApmSpan } from '../../utils/with_apm_span'; - -// Explicitly type Setup to prevent TS initialization errors -// https://github.com/microsoft/TypeScript/issues/34933 - -export interface Setup { - internalClient: APMInternalClient; - ml?: ReturnType; - config: APMConfig; - indices: ApmIndicesConfig; -} - -export async function setupRequest({ - context, - params, - core, - plugins, - request, - config, -}: APMRouteHandlerResources): Promise { - return withApmSpan('setup_request', async () => { - const { query } = params; - const coreContext = await context.core; - const licensingContext = await context.licensing; - - const [indices] = await Promise.all([ - getApmIndices({ - savedObjectsClient: coreContext.savedObjects.client, - config, - }), - withApmSpan('get_ui_settings', () => - coreContext.uiSettings.client.get( - UI_SETTINGS.SEARCH_INCLUDE_FROZEN - ) - ), - ]); - - return { - indices, - internalClient: await createInternalESClient({ - context, - request, - debug: query._inspect, - }), - ml: - plugins.ml && isActivePlatinumLicense(licensingContext.license) - ? getMlSetup( - plugins.ml.setup, - coreContext.savedObjects.client, - request - ) - : undefined, - config, - }; - }); -} - -function getMlSetup( - ml: Required['ml']['setup'], - savedObjectsClient: Awaited< - APMRouteHandlerResources['context']['core'] - >['savedObjects']['client'], - request: KibanaRequest -) { - return { - mlSystem: ml.mlSystemProvider(request, savedObjectsClient), - anomalyDetectors: ml.anomalyDetectorsProvider(request, savedObjectsClient), - modules: ml.modulesProvider(request, savedObjectsClient), - }; -} diff --git a/x-pack/plugins/apm/server/lib/helpers/transactions/get_is_using_transaction_events.test.ts b/x-pack/plugins/apm/server/lib/helpers/transactions/get_is_using_transaction_events.test.ts index 97b4fcbf9584ca..ff118ed5b16c63 100644 --- a/x-pack/plugins/apm/server/lib/helpers/transactions/get_is_using_transaction_events.test.ts +++ b/x-pack/plugins/apm/server/lib/helpers/transactions/get_is_using_transaction_events.test.ts @@ -63,10 +63,10 @@ describe('getIsUsingTransactionEvents', () => { it('should be false', async () => { mock = await inspectSearchParams( - (setup, apmEventClient) => + ({ mockApmEventClient, mockConfig }) => getIsUsingTransactionEvents({ - config: setup.config, - apmEventClient, + config: mockConfig, + apmEventClient: mockApmEventClient, kuery: '', }), { config } @@ -76,10 +76,10 @@ describe('getIsUsingTransactionEvents', () => { it('should not query for data', async () => { mock = await inspectSearchParams( - (setup, apmEventClient) => + ({ mockApmEventClient, mockConfig }) => getIsUsingTransactionEvents({ - config: setup.config, - apmEventClient, + config: mockConfig, + apmEventClient: mockApmEventClient, kuery: '', }), { config } @@ -94,10 +94,10 @@ describe('getIsUsingTransactionEvents', () => { }; it('should be false when kuery is empty', async () => { mock = await inspectSearchParams( - (setup, apmEventClient) => + ({ mockApmEventClient, mockConfig }) => getIsUsingTransactionEvents({ - config: setup.config, - apmEventClient, + config: mockConfig, + apmEventClient: mockApmEventClient, kuery: '', }), { config } @@ -107,10 +107,10 @@ describe('getIsUsingTransactionEvents', () => { it('should be false when kuery is set and metrics data found', async () => { mock = await inspectSearchParams( - (setup, apmEventClient) => + ({ mockApmEventClient, mockConfig }) => getIsUsingTransactionEvents({ - config: setup.config, - apmEventClient, + config: mockConfig, + apmEventClient: mockApmEventClient, kuery: 'proccessor.event: "transaction"', }), { @@ -132,10 +132,10 @@ describe('getIsUsingTransactionEvents', () => { it('should be true when kuery is set and metrics data are not found', async () => { mock = await inspectSearchParams( - (setup, apmEventClient) => + ({ mockApmEventClient, mockConfig }) => getIsUsingTransactionEvents({ - config: setup.config, - apmEventClient, + config: mockConfig, + apmEventClient: mockApmEventClient, kuery: 'proccessor.event: "transaction"', }), { @@ -157,10 +157,10 @@ describe('getIsUsingTransactionEvents', () => { it('should not query for data when kuery is empty', async () => { mock = await inspectSearchParams( - (setup, apmEventClient) => + ({ mockApmEventClient, mockConfig }) => getIsUsingTransactionEvents({ - config: setup.config, - apmEventClient, + config: mockConfig, + apmEventClient: mockApmEventClient, kuery: '', }), { config } @@ -170,10 +170,10 @@ describe('getIsUsingTransactionEvents', () => { it('should query for data when kuery is set', async () => { mock = await inspectSearchParams( - (setup, apmEventClient) => + ({ mockApmEventClient, mockConfig }) => getIsUsingTransactionEvents({ - config: setup.config, - apmEventClient, + config: mockConfig, + apmEventClient: mockApmEventClient, kuery: 'proccessor.event: "transaction"', }), { config } @@ -190,10 +190,10 @@ describe('getIsUsingTransactionEvents', () => { it('should query for data once if metrics data found', async () => { mock = await inspectSearchParams( - (setup, apmEventClient) => + ({ mockApmEventClient, mockConfig }) => getIsUsingTransactionEvents({ - config: setup.config, - apmEventClient, + config: mockConfig, + apmEventClient: mockApmEventClient, kuery: '', }), { @@ -215,10 +215,10 @@ describe('getIsUsingTransactionEvents', () => { it('should query for data twice if metrics data not found', async () => { mock = await inspectSearchParams( - (setup, apmEventClient) => + ({ mockApmEventClient, mockConfig }) => getIsUsingTransactionEvents({ - config: setup.config, - apmEventClient, + config: mockConfig, + apmEventClient: mockApmEventClient, kuery: '', }), { @@ -240,10 +240,10 @@ describe('getIsUsingTransactionEvents', () => { it('should be false if metrics data are found', async () => { mock = await inspectSearchParams( - (setup, apmEventClient) => + ({ mockApmEventClient, mockConfig }) => getIsUsingTransactionEvents({ - config: setup.config, - apmEventClient, + config: mockConfig, + apmEventClient: mockApmEventClient, kuery: '', }), { @@ -264,10 +264,10 @@ describe('getIsUsingTransactionEvents', () => { it('should be true if no metrics data are found', async () => { mock = await inspectSearchParams( - (setup, apmEventClient) => + ({ mockApmEventClient, mockConfig }) => getIsUsingTransactionEvents({ - config: setup.config, - apmEventClient, + config: mockConfig, + apmEventClient: mockApmEventClient, kuery: '', }), { @@ -288,10 +288,10 @@ describe('getIsUsingTransactionEvents', () => { it('should be false if no metrics or transactions data are found', async () => { mock = await inspectSearchParams( - (setup, apmEventClient) => + ({ mockApmEventClient, mockConfig }) => getIsUsingTransactionEvents({ - config: setup.config, - apmEventClient, + config: mockConfig, + apmEventClient: mockApmEventClient, kuery: '', }), { config, mockResponse: () => mockResponseNoHits } diff --git a/x-pack/plugins/apm/server/routes/alerts/route.ts b/x-pack/plugins/apm/server/routes/alerts/route.ts index 389f6fc87c24b9..c040c00387d076 100644 --- a/x-pack/plugins/apm/server/routes/alerts/route.ts +++ b/x-pack/plugins/apm/server/routes/alerts/route.ts @@ -9,7 +9,6 @@ import * as t from 'io-ts'; import { getTransactionDurationChartPreview } from './rule_types/transaction_duration/get_transaction_duration_chart_preview'; import { getTransactionErrorCountChartPreview } from './rule_types/error_count/get_error_count_chart_preview'; import { getTransactionErrorRateChartPreview } from './rule_types/transaction_error_rate/get_transaction_error_rate_chart_preview'; -import { setupRequest } from '../../lib/helpers/setup_request'; import { createApmServerRoute } from '../apm_routes/create_apm_server_route'; import { environmentRt, rangeRt } from '../default_api_types'; import { AggregationType } from '../../../common/rules/apm_rule_types'; @@ -41,15 +40,12 @@ const transactionErrorRateChartPreview = createApmServerRoute({ handler: async ( resources ): Promise<{ errorRateChartPreview: Array<{ x: number; y: number }> }> => { - const [setup, apmEventClient] = await Promise.all([ - setupRequest(resources), - getApmEventClient(resources), - ]); - const { params } = resources; + const apmEventClient = await getApmEventClient(resources); + const { params, config } = resources; const { _inspect, ...alertParams } = params.query; const errorRateChartPreview = await getTransactionErrorRateChartPreview({ - config: setup.config, + config, apmEventClient, alertParams, }); @@ -91,18 +87,15 @@ const transactionDurationChartPreview = createApmServerRoute({ data: Array<{ x: number; y: number | null }>; }>; }> => { - const [setup, apmEventClient] = await Promise.all([ - setupRequest(resources), - getApmEventClient(resources), - ]); + const apmEventClient = await getApmEventClient(resources); - const { params } = resources; + const { params, config } = resources; const { _inspect, ...alertParams } = params.query; const latencyChartPreview = await getTransactionDurationChartPreview({ alertParams, - config: setup.config, + config, apmEventClient, }); diff --git a/x-pack/plugins/apm/server/routes/correlations/queries/fetch_p_values.ts b/x-pack/plugins/apm/server/routes/correlations/queries/fetch_p_values.ts index 8f2e46b3f4d3f7..2c94473ccaa41c 100644 --- a/x-pack/plugins/apm/server/routes/correlations/queries/fetch_p_values.ts +++ b/x-pack/plugins/apm/server/routes/correlations/queries/fetch_p_values.ts @@ -11,13 +11,11 @@ import type { FailedTransactionsCorrelation } from '../../../../common/correlati import { CommonCorrelationsQueryParams } from '../../../../common/correlations/types'; import { LatencyDistributionChartType } from '../../../../common/latency_distribution_chart_types'; import { APMEventClient } from '../../../lib/helpers/create_es_client/create_apm_event_client'; -import { Setup } from '../../../lib/helpers/setup_request'; import { splitAllSettledPromises, getEventType } from '../utils'; import { fetchDurationHistogramRangeSteps } from './fetch_duration_histogram_range_steps'; import { fetchFailedEventsCorrelationPValues } from './fetch_failed_events_correlation_p_values'; export const fetchPValues = async ({ - setup, apmEventClient, start, end, @@ -28,7 +26,6 @@ export const fetchPValues = async ({ durationMax, fieldCandidates, }: CommonCorrelationsQueryParams & { - setup: Setup; apmEventClient: APMEventClient; durationMin?: number; durationMax?: number; @@ -99,7 +96,8 @@ export const fetchPValues = async ({ } }); - const index = setup.indices[eventType as keyof typeof setup.indices]; + const index = + apmEventClient.indices[eventType as keyof typeof apmEventClient.indices]; const ccsWarning = rejected.length > 0 && index.includes(':'); diff --git a/x-pack/plugins/apm/server/routes/correlations/queries/fetch_significant_correlations.ts b/x-pack/plugins/apm/server/routes/correlations/queries/fetch_significant_correlations.ts index 3bfa96423dca4e..82e91167f19d2b 100644 --- a/x-pack/plugins/apm/server/routes/correlations/queries/fetch_significant_correlations.ts +++ b/x-pack/plugins/apm/server/routes/correlations/queries/fetch_significant_correlations.ts @@ -15,7 +15,6 @@ import type { } from '../../../../common/correlations/types'; import { LatencyDistributionChartType } from '../../../../common/latency_distribution_chart_types'; -import { Setup } from '../../../lib/helpers/setup_request'; import { computeExpectationsAndRanges, splitAllSettledPromises, @@ -29,7 +28,6 @@ import { getEventType } from '../utils'; import { APMEventClient } from '../../../lib/helpers/create_es_client/create_apm_event_client'; export const fetchSignificantCorrelations = async ({ - setup, apmEventClient, start, end, @@ -40,7 +38,6 @@ export const fetchSignificantCorrelations = async ({ durationMaxOverride, fieldValuePairs, }: CommonCorrelationsQueryParams & { - setup: Setup; apmEventClient: APMEventClient; durationMinOverride?: number; durationMaxOverride?: number; @@ -168,7 +165,8 @@ export const fetchSignificantCorrelations = async ({ } } - const index = setup.indices[eventType as keyof typeof setup.indices]; + const index = + apmEventClient.indices[eventType as keyof typeof apmEventClient.indices]; const ccsWarning = rejected.length > 0 && index.includes(':'); diff --git a/x-pack/plugins/apm/server/routes/correlations/route.ts b/x-pack/plugins/apm/server/routes/correlations/route.ts index 4af95e7a31c1c7..cdadd7053f517a 100644 --- a/x-pack/plugins/apm/server/routes/correlations/route.ts +++ b/x-pack/plugins/apm/server/routes/correlations/route.ts @@ -15,8 +15,6 @@ import { termQuery } from '@kbn/observability-plugin/server'; import { ProcessorEvent } from '@kbn/observability-plugin/common'; import { isActivePlatinumLicense } from '../../../common/license_check'; -import { setupRequest } from '../../lib/helpers/setup_request'; - import { createApmServerRoute } from '../apm_routes/create_apm_server_route'; import { environmentRt, kueryRt, rangeRt } from '../default_api_types'; import { fetchDurationFieldCandidates } from './queries/fetch_duration_field_candidates'; @@ -335,10 +333,7 @@ const significantCorrelationsTransactionsRoute = createApmServerRoute({ totalDocCount: number; fallbackResult?: import('./../../../common/correlations/latency_correlations/types').LatencyCorrelation; }> => { - const [setup, apmEventClient] = await Promise.all([ - setupRequest(resources), - getApmEventClient(resources), - ]); + const apmEventClient = await getApmEventClient(resources); const { body: { serviceName, @@ -355,7 +350,6 @@ const significantCorrelationsTransactionsRoute = createApmServerRoute({ } = resources.params; return fetchSignificantCorrelations({ - setup, apmEventClient, start, end, @@ -406,10 +400,7 @@ const pValuesTransactionsRoute = createApmServerRoute({ ccsWarning: boolean; fallbackResult?: import('./../../../common/correlations/failed_transactions_correlations/types').FailedTransactionsCorrelation; }> => { - const [setup, apmEventClient] = await Promise.all([ - setupRequest(resources), - getApmEventClient(resources), - ]); + const apmEventClient = await getApmEventClient(resources); const { body: { @@ -427,7 +418,6 @@ const pValuesTransactionsRoute = createApmServerRoute({ } = resources.params; return fetchPValues({ - setup, apmEventClient, start, end, diff --git a/x-pack/plugins/apm/server/routes/data_view/create_static_data_view.test.ts b/x-pack/plugins/apm/server/routes/data_view/create_static_data_view.test.ts index be38d78fb208f8..512a1f78a62b77 100644 --- a/x-pack/plugins/apm/server/routes/data_view/create_static_data_view.test.ts +++ b/x-pack/plugins/apm/server/routes/data_view/create_static_data_view.test.ts @@ -6,12 +6,11 @@ */ import { createStaticDataView } from './create_static_data_view'; -import { Setup } from '../../lib/helpers/setup_request'; import * as HistoricalAgentData from '../historical_data/has_historical_agent_data'; import { DataViewsService } from '@kbn/data-views-plugin/common'; import { APMRouteHandlerResources, APMCore } from '../typings'; -import { APMConfig } from '../..'; import { APMEventClient } from '../../lib/helpers/create_es_client/create_apm_event_client'; +import { APMConfig } from '../..'; function getMockedDataViewService(existingDataViewTitle: string) { return { @@ -22,15 +21,6 @@ function getMockedDataViewService(existingDataViewTitle: string) { } as unknown as DataViewsService; } -const setupMock = { - indices: { - transaction: 'apm-*-transaction-*', - span: 'apm-*-span-*', - error: 'apm-*-error-*', - metric: 'apm-*-metrics-*', - } as APMConfig['indices'], -} as unknown as Setup; - const coreMock = { start: () => { return { @@ -45,13 +35,20 @@ const coreMock = { }, } as unknown as APMCore; -const apmEventClientMock = { search: jest.fn() } as unknown as APMEventClient; +const apmEventClientMock = { + search: jest.fn(), + indices: { + transaction: 'apm-*-transaction-*', + span: 'apm-*-span-*', + error: 'apm-*-error-*', + metric: 'apm-*-metrics-*', + } as APMConfig['indices'], +} as unknown as APMEventClient; describe('createStaticDataView', () => { it(`should not create data view if 'xpack.apm.autocreateApmIndexPattern=false'`, async () => { const dataViewService = getMockedDataViewService('apm-*'); await createStaticDataView({ - setup: setupMock, apmEventClient: apmEventClientMock, resources: { config: { autoCreateApmDataView: false }, @@ -70,7 +67,6 @@ describe('createStaticDataView', () => { const dataViewService = getMockedDataViewService('apm-*'); await createStaticDataView({ - setup: setupMock, apmEventClient: apmEventClientMock, resources: { config: { autoCreateApmDataView: false }, @@ -89,7 +85,6 @@ describe('createStaticDataView', () => { const dataViewService = getMockedDataViewService('apm-*'); await createStaticDataView({ - setup: setupMock, apmEventClient: apmEventClientMock, resources: { core: coreMock, @@ -112,7 +107,6 @@ describe('createStaticDataView', () => { 'apm-*-transaction-*,apm-*-span-*,apm-*-error-*,apm-*-metrics-*'; await createStaticDataView({ - setup: setupMock, apmEventClient: apmEventClientMock, resources: { core: coreMock, @@ -142,7 +136,6 @@ describe('createStaticDataView', () => { ); await createStaticDataView({ - setup: setupMock, apmEventClient: apmEventClientMock, resources: { core: coreMock, diff --git a/x-pack/plugins/apm/server/routes/data_view/create_static_data_view.ts b/x-pack/plugins/apm/server/routes/data_view/create_static_data_view.ts index 21292d51f6dcc0..61fbe9b3623477 100644 --- a/x-pack/plugins/apm/server/routes/data_view/create_static_data_view.ts +++ b/x-pack/plugins/apm/server/routes/data_view/create_static_data_view.ts @@ -19,7 +19,6 @@ import { withApmSpan } from '../../utils/with_apm_span'; import { getApmDataViewTitle } from './get_apm_data_view_title'; import { APMRouteHandlerResources } from '../typings'; -import { Setup } from '../../lib/helpers/setup_request'; import { APMEventClient } from '../../lib/helpers/create_es_client/create_apm_event_client'; export type CreateDataViewResponse = Promise< @@ -30,12 +29,10 @@ export type CreateDataViewResponse = Promise< export async function createStaticDataView({ dataViewService, resources, - setup, apmEventClient, }: { dataViewService: DataViewsService; resources: APMRouteHandlerResources; - setup: Setup; apmEventClient: APMEventClient; }): CreateDataViewResponse { const { config } = resources; @@ -65,7 +62,7 @@ export async function createStaticDataView({ }; } - const apmDataViewTitle = getApmDataViewTitle(setup.indices); + const apmDataViewTitle = getApmDataViewTitle(apmEventClient.indices); const shouldCreateOrUpdate = await getShouldCreateOrUpdate({ apmDataViewTitle, dataViewService, diff --git a/x-pack/plugins/apm/server/routes/data_view/route.ts b/x-pack/plugins/apm/server/routes/data_view/route.ts index 8af2a522b7dcda..12055e32337ca5 100644 --- a/x-pack/plugins/apm/server/routes/data_view/route.ts +++ b/x-pack/plugins/apm/server/routes/data_view/route.ts @@ -12,7 +12,6 @@ import { import { createApmServerRoute } from '../apm_routes/create_apm_server_route'; import { getApmDataViewTitle } from './get_apm_data_view_title'; import { getApmIndices } from '../settings/apm_indices/get_apm_indices'; -import { setupRequest } from '../../lib/helpers/setup_request'; import { getApmEventClient } from '../../lib/helpers/get_apm_event_client'; const staticDataViewRoute = createApmServerRoute({ @@ -20,10 +19,7 @@ const staticDataViewRoute = createApmServerRoute({ options: { tags: ['access:apm'] }, handler: async (resources): CreateDataViewResponse => { const { context, plugins, request } = resources; - const [setup, apmEventClient] = await Promise.all([ - setupRequest(resources), - getApmEventClient(resources), - ]); + const apmEventClient = await getApmEventClient(resources); const coreContext = await context.core; const dataViewStart = await plugins.dataViews.start(); @@ -37,7 +33,6 @@ const staticDataViewRoute = createApmServerRoute({ const res = await createStaticDataView({ dataViewService, resources, - setup, apmEventClient, }); diff --git a/x-pack/plugins/apm/server/routes/environments/get_all_environments.test.ts b/x-pack/plugins/apm/server/routes/environments/get_all_environments.test.ts index dd8dcfb31ba618..7a70bbff5f1657 100644 --- a/x-pack/plugins/apm/server/routes/environments/get_all_environments.test.ts +++ b/x-pack/plugins/apm/server/routes/environments/get_all_environments.test.ts @@ -19,11 +19,11 @@ describe('getAllEnvironments', () => { }); it('fetches all environments', async () => { - mock = await inspectSearchParams((setup, apmEventClient) => + mock = await inspectSearchParams(({ mockApmEventClient }) => getAllEnvironments({ searchAggregatedTransactions: false, serviceName: 'test', - apmEventClient, + apmEventClient: mockApmEventClient, size: 50, }) ); @@ -32,12 +32,12 @@ describe('getAllEnvironments', () => { }); it('fetches all environments with includeMissing', async () => { - mock = await inspectSearchParams((setup, apmEventClient) => + mock = await inspectSearchParams(({ mockApmEventClient }) => getAllEnvironments({ includeMissing: true, searchAggregatedTransactions: false, serviceName: 'test', - apmEventClient, + apmEventClient: mockApmEventClient, size: 50, }) ); diff --git a/x-pack/plugins/apm/server/routes/environments/get_environments.test.ts b/x-pack/plugins/apm/server/routes/environments/get_environments.test.ts index 21daac57a75214..0cc84dfe6517b0 100644 --- a/x-pack/plugins/apm/server/routes/environments/get_environments.test.ts +++ b/x-pack/plugins/apm/server/routes/environments/get_environments.test.ts @@ -19,9 +19,9 @@ describe('getEnvironments', () => { }); it('fetches environments', async () => { - mock = await inspectSearchParams((setup, apmEventClient) => + mock = await inspectSearchParams(({ mockApmEventClient }) => getEnvironments({ - apmEventClient, + apmEventClient: mockApmEventClient, serviceName: 'foo', searchAggregatedTransactions: false, size: 50, @@ -34,9 +34,9 @@ describe('getEnvironments', () => { }); it('fetches environments without a service name', async () => { - mock = await inspectSearchParams((setup, apmEventClient) => + mock = await inspectSearchParams(({ mockApmEventClient }) => getEnvironments({ - apmEventClient, + apmEventClient: mockApmEventClient, searchAggregatedTransactions: false, size: 50, start: 0, diff --git a/x-pack/plugins/apm/server/routes/environments/route.ts b/x-pack/plugins/apm/server/routes/environments/route.ts index cfe3db58fcf605..32b7d2a5117d59 100644 --- a/x-pack/plugins/apm/server/routes/environments/route.ts +++ b/x-pack/plugins/apm/server/routes/environments/route.ts @@ -8,7 +8,6 @@ import * as t from 'io-ts'; import { maxSuggestions } from '@kbn/observability-plugin/common'; import { getSearchTransactionsEvents } from '../../lib/helpers/transactions'; -import { setupRequest } from '../../lib/helpers/setup_request'; import { getEnvironments } from './get_environments'; import { rangeRt } from '../default_api_types'; import { createApmServerRoute } from '../apm_routes/create_apm_server_route'; @@ -34,15 +33,12 @@ const environmentsRoute = createApmServerRoute({ | t.Branded >; }> => { - const [setup, apmEventClient] = await Promise.all([ - setupRequest(resources), - getApmEventClient(resources), - ]); - const { context, params } = resources; + const apmEventClient = await getApmEventClient(resources); + const { context, params, config } = resources; const { serviceName, start, end } = params.query; const searchAggregatedTransactions = await getSearchTransactionsEvents({ apmEventClient, - config: setup.config, + config, start, end, kuery: '', diff --git a/x-pack/plugins/apm/server/routes/errors/distribution/queries.test.ts b/x-pack/plugins/apm/server/routes/errors/distribution/queries.test.ts index cbb606b8a0c96f..2030239a68eaa3 100644 --- a/x-pack/plugins/apm/server/routes/errors/distribution/queries.test.ts +++ b/x-pack/plugins/apm/server/routes/errors/distribution/queries.test.ts @@ -20,10 +20,10 @@ describe('error distribution queries', () => { }); it('fetches an error distribution', async () => { - mock = await inspectSearchParams((setup, apmEventClient) => + mock = await inspectSearchParams(({ mockApmEventClient }) => getErrorDistribution({ serviceName: 'serviceName', - apmEventClient, + apmEventClient: mockApmEventClient, environment: ENVIRONMENT_ALL.value, kuery: '', start: 0, @@ -35,11 +35,11 @@ describe('error distribution queries', () => { }); it('fetches an error distribution with a group id', async () => { - mock = await inspectSearchParams((setup, apmEventClient) => + mock = await inspectSearchParams(({ mockApmEventClient }) => getErrorDistribution({ serviceName: 'serviceName', groupId: 'foo', - apmEventClient, + apmEventClient: mockApmEventClient, environment: ENVIRONMENT_ALL.value, kuery: '', start: 0, diff --git a/x-pack/plugins/apm/server/routes/errors/queries.test.ts b/x-pack/plugins/apm/server/routes/errors/queries.test.ts index 080f175c2d5e85..bc0f18884d1b0b 100644 --- a/x-pack/plugins/apm/server/routes/errors/queries.test.ts +++ b/x-pack/plugins/apm/server/routes/errors/queries.test.ts @@ -21,11 +21,11 @@ describe('error queries', () => { }); it('fetches a single error group', async () => { - mock = await inspectSearchParams((setup, apmEventClient) => + mock = await inspectSearchParams(({ mockApmEventClient }) => getErrorGroupSample({ groupId: 'groupId', serviceName: 'serviceName', - apmEventClient, + apmEventClient: mockApmEventClient, environment: ENVIRONMENT_ALL.value, kuery: '', start: 0, @@ -37,12 +37,12 @@ describe('error queries', () => { }); it('fetches multiple error groups', async () => { - mock = await inspectSearchParams((setup, apmEventClient) => + mock = await inspectSearchParams(({ mockApmEventClient }) => getErrorGroupMainStatistics({ sortDirection: 'asc', sortField: 'foo', serviceName: 'serviceName', - apmEventClient, + apmEventClient: mockApmEventClient, environment: ENVIRONMENT_ALL.value, kuery: '', start: 0, @@ -54,12 +54,12 @@ describe('error queries', () => { }); it('fetches multiple error groups when sortField = lastSeen', async () => { - mock = await inspectSearchParams((setup, apmEventClient) => + mock = await inspectSearchParams(({ mockApmEventClient }) => getErrorGroupMainStatistics({ sortDirection: 'asc', sortField: 'lastSeen', serviceName: 'serviceName', - apmEventClient, + apmEventClient: mockApmEventClient, environment: ENVIRONMENT_ALL.value, kuery: '', start: 0, diff --git a/x-pack/plugins/apm/server/routes/fallback_to_transactions/route.ts b/x-pack/plugins/apm/server/routes/fallback_to_transactions/route.ts index 2e056df7ee891e..2b9af46c0ac4de 100644 --- a/x-pack/plugins/apm/server/routes/fallback_to_transactions/route.ts +++ b/x-pack/plugins/apm/server/routes/fallback_to_transactions/route.ts @@ -7,7 +7,6 @@ import * as t from 'io-ts'; import { getIsUsingTransactionEvents } from '../../lib/helpers/transactions/get_is_using_transaction_events'; -import { setupRequest } from '../../lib/helpers/setup_request'; import { createApmServerRoute } from '../apm_routes/create_apm_server_route'; import { kueryRt, rangeRt } from '../default_api_types'; import { getApmEventClient } from '../../lib/helpers/get_apm_event_client'; @@ -19,18 +18,16 @@ const fallbackToTransactionsRoute = createApmServerRoute({ }), options: { tags: ['access:apm'] }, handler: async (resources): Promise<{ fallbackToTransactions: boolean }> => { - const [setup, apmEventClient] = await Promise.all([ - setupRequest(resources), - getApmEventClient(resources), - ]); + const apmEventClient = await getApmEventClient(resources); const { + config, params: { query: { kuery, start, end }, }, } = resources; return { fallbackToTransactions: await getIsUsingTransactionEvents({ - config: setup.config, + config, apmEventClient, kuery, start, diff --git a/x-pack/plugins/apm/server/routes/fleet/create_cloud_apm_package_policy.ts b/x-pack/plugins/apm/server/routes/fleet/create_cloud_apm_package_policy.ts index 1feeab80875e06..e3a0ccd5345c8f 100644 --- a/x-pack/plugins/apm/server/routes/fleet/create_cloud_apm_package_policy.ts +++ b/x-pack/plugins/apm/server/routes/fleet/create_cloud_apm_package_policy.ts @@ -21,9 +21,9 @@ import { APMPluginStartDependencies, } from '../../types'; import { getApmPackagePolicyDefinition } from './get_apm_package_policy_definition'; -import { Setup } from '../../lib/helpers/setup_request'; import { mergePackagePolicyWithApm } from './merge_package_policy_with_apm'; import { ELASTIC_CLOUD_APM_AGENT_POLICY_ID } from '../../../common/fleet'; +import { APMInternalESClient } from '../../lib/helpers/create_es_client/create_internal_es_client'; export async function createCloudApmPackgePolicy({ cloudPluginSetup, @@ -31,7 +31,7 @@ export async function createCloudApmPackgePolicy({ savedObjectsClient, esClient, logger, - setup, + internalESClient, request, }: { cloudPluginSetup: APMPluginSetupDependencies['cloud']; @@ -39,7 +39,7 @@ export async function createCloudApmPackgePolicy({ savedObjectsClient: SavedObjectsClientContract; esClient: ElasticsearchClient; logger: Logger; - setup: Setup; + internalESClient: APMInternalESClient; request: KibanaRequest; }): Promise { const { attributes } = await savedObjectsClient.get( @@ -57,7 +57,7 @@ export async function createCloudApmPackgePolicy({ request, }); const mergedAPMPackagePolicy = await mergePackagePolicyWithApm({ - setup, + internalESClient, packagePolicy: apmPackagePolicyDefinition, fleetPluginStart, }); diff --git a/x-pack/plugins/apm/server/routes/fleet/merge_package_policy_with_apm.ts b/x-pack/plugins/apm/server/routes/fleet/merge_package_policy_with_apm.ts index 5442185decde3e..37f0705904770d 100644 --- a/x-pack/plugins/apm/server/routes/fleet/merge_package_policy_with_apm.ts +++ b/x-pack/plugins/apm/server/routes/fleet/merge_package_policy_with_apm.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { Setup } from '../../lib/helpers/setup_request'; +import { APMInternalESClient } from '../../lib/helpers/create_es_client/create_internal_es_client'; import { APMPluginStartDependencies } from '../../types'; import { listConfigurations } from '../settings/agent_configuration/list_configurations'; import { @@ -16,14 +16,14 @@ import { getPackagePolicyWithSourceMap, listArtifacts } from './source_maps'; export async function mergePackagePolicyWithApm({ packagePolicy, - setup, + internalESClient, fleetPluginStart, }: { packagePolicy: PackagePolicy; - setup: Setup; + internalESClient: APMInternalESClient; fleetPluginStart: NonNullable; }) { - const agentConfigurations = await listConfigurations({ setup }); + const agentConfigurations = await listConfigurations(internalESClient); const artifacts = await listArtifacts({ fleetPluginStart }); return getPackagePolicyWithAgentConfigurations( getPackagePolicyWithSourceMap({ packagePolicy, artifacts }), diff --git a/x-pack/plugins/apm/server/routes/fleet/register_fleet_policy_callbacks.ts b/x-pack/plugins/apm/server/routes/fleet/register_fleet_policy_callbacks.ts index 5235ddb9cb9d90..52e77f3643bcd3 100644 --- a/x-pack/plugins/apm/server/routes/fleet/register_fleet_policy_callbacks.ts +++ b/x-pack/plugins/apm/server/routes/fleet/register_fleet_policy_callbacks.ts @@ -14,10 +14,10 @@ import { UpdatePackagePolicy, } from '@kbn/fleet-plugin/common'; import { APMPlugin, APMRouteHandlerResources } from '../..'; +import { createInternalESClient } from '../../lib/helpers/create_es_client/create_internal_es_client'; import { AgentConfiguration } from '../../../common/agent_configuration/configuration_types'; import { AGENT_NAME } from '../../../common/elasticsearch_fieldnames'; import { APMPluginStartDependencies } from '../../types'; -import { setupRequest } from '../../lib/helpers/setup_request'; import { mergePackagePolicyWithApm } from './merge_package_policy_with_apm'; export async function registerFleetPolicyCallbacks({ @@ -97,19 +97,16 @@ function registerPackagePolicyExternalCallback({ if (packagePolicy.package?.name !== 'apm') { return packagePolicy; } - const setup = await setupRequest({ + + const internalESClient = await createInternalESClient({ context: context as any, - params: { query: { _inspect: false } }, - core: null as any, - plugins, + debug: false, request, config, - logger, - ruleDataClient, - kibanaVersion, }); + return await mergePackagePolicyWithApm({ - setup, + internalESClient, fleetPluginStart, packagePolicy, }); diff --git a/x-pack/plugins/apm/server/routes/fleet/route.ts b/x-pack/plugins/apm/server/routes/fleet/route.ts index 418f85a0d53b96..f988e2bba7f5b7 100644 --- a/x-pack/plugins/apm/server/routes/fleet/route.ts +++ b/x-pack/plugins/apm/server/routes/fleet/route.ts @@ -23,10 +23,10 @@ import { import { getUnsupportedApmServerSchema } from './get_unsupported_apm_server_schema'; import { isSuperuser } from './is_superuser'; import { getInternalSavedObjectsClient } from '../../lib/helpers/get_internal_saved_objects_client'; -import { setupRequest } from '../../lib/helpers/setup_request'; import { createApmServerRoute } from '../apm_routes/create_apm_server_route'; import { getLatestApmPackage } from './get_latest_apm_package'; import { getJavaAgentVersionsFromRegistry } from './get_java_agent_versions'; +import { createInternalESClient } from '../../lib/helpers/create_es_client/create_internal_es_client'; const hasFleetDataRoute = createApmServerRoute({ endpoint: 'GET /internal/apm/fleet/has_apm_policies', @@ -245,7 +245,12 @@ const createCloudApmPackagePolicyRoute = createApmServerRoute({ throw Boom.forbidden(CLOUD_SUPERUSER_REQUIRED_MESSAGE); } - const setup = await setupRequest(resources); + const internalESClient = await createInternalESClient({ + context, + request, + debug: resources.params.query._inspect, + config: resources.config, + }); const cloudApmPackagePolicy = await createCloudApmPackgePolicy({ cloudPluginSetup, @@ -253,7 +258,7 @@ const createCloudApmPackagePolicyRoute = createApmServerRoute({ savedObjectsClient, esClient, logger, - setup, + internalESClient, request, }); diff --git a/x-pack/plugins/apm/server/routes/fleet/sync_agent_configs_to_apm_package_policies.ts b/x-pack/plugins/apm/server/routes/fleet/sync_agent_configs_to_apm_package_policies.ts index c36be18c6b2513..5d8e7147ad1f2e 100644 --- a/x-pack/plugins/apm/server/routes/fleet/sync_agent_configs_to_apm_package_policies.ts +++ b/x-pack/plugins/apm/server/routes/fleet/sync_agent_configs_to_apm_package_policies.ts @@ -13,20 +13,20 @@ import { import { TelemetryUsageCounter } from '../typings'; import { APMPluginStartDependencies } from '../../types'; import { getInternalSavedObjectsClient } from '../../lib/helpers/get_internal_saved_objects_client'; -import { Setup } from '../../lib/helpers/setup_request'; import { listConfigurations } from '../settings/agent_configuration/list_configurations'; import { getApmPackagePolicies } from './get_apm_package_policies'; import { getPackagePolicyWithAgentConfigurations } from './register_fleet_policy_callbacks'; +import { APMInternalESClient } from '../../lib/helpers/create_es_client/create_internal_es_client'; export async function syncAgentConfigsToApmPackagePolicies({ core, fleetPluginStart, - setup, + internalESClient, telemetryUsageCounter, }: { core: { setup: CoreSetup; start: () => Promise }; fleetPluginStart: NonNullable; - setup: Setup; + internalESClient: APMInternalESClient; telemetryUsageCounter?: TelemetryUsageCounter; }) { if (telemetryUsageCounter) { @@ -40,7 +40,7 @@ export async function syncAgentConfigsToApmPackagePolicies({ const [savedObjectsClient, agentConfigurations, packagePolicies] = await Promise.all([ getInternalSavedObjectsClient(core.setup), - listConfigurations({ setup }), + listConfigurations(internalESClient), getApmPackagePolicies({ core, fleetPluginStart, diff --git a/x-pack/plugins/apm/server/routes/latency_distribution/route.ts b/x-pack/plugins/apm/server/routes/latency_distribution/route.ts index d2e6dee2795e75..0208d0a979b7e2 100644 --- a/x-pack/plugins/apm/server/routes/latency_distribution/route.ts +++ b/x-pack/plugins/apm/server/routes/latency_distribution/route.ts @@ -10,7 +10,6 @@ import { toNumberRt } from '@kbn/io-ts-utils'; import { termQuery } from '@kbn/observability-plugin/server'; import { QueryDslQueryContainer } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { getOverallLatencyDistribution } from './get_overall_latency_distribution'; -import { setupRequest } from '../../lib/helpers/setup_request'; import { getSearchTransactionsEvents } from '../../lib/helpers/transactions'; import { createApmServerRoute } from '../apm_routes/create_apm_server_route'; import { environmentRt, kueryRt, rangeRt } from '../default_api_types'; @@ -55,10 +54,7 @@ const latencyOverallTransactionDistributionRoute = createApmServerRoute({ handler: async ( resources ): Promise => { - const [setup, apmEventClient] = await Promise.all([ - setupRequest(resources), - getApmEventClient(resources), - ]); + const apmEventClient = await getApmEventClient(resources); const { environment, @@ -79,7 +75,7 @@ const latencyOverallTransactionDistributionRoute = createApmServerRoute({ const searchAggregatedTransactions = chartType === LatencyDistributionChartType.transactionLatency ? await getSearchTransactionsEvents({ - config: setup.config, + config: resources.config, apmEventClient, kuery, start, diff --git a/x-pack/plugins/apm/server/routes/latency_distribution/types.ts b/x-pack/plugins/apm/server/routes/latency_distribution/types.ts index 4fb19eba4e57d6..79e386381a3034 100644 --- a/x-pack/plugins/apm/server/routes/latency_distribution/types.ts +++ b/x-pack/plugins/apm/server/routes/latency_distribution/types.ts @@ -5,18 +5,6 @@ * 2.0. */ -import { QueryDslQueryContainer } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; -import type { FieldValuePair } from '../../../common/correlations/types'; - -import { Setup } from '../../lib/helpers/setup_request'; - -export interface OverallLatencyDistributionOptions { - query: QueryDslQueryContainer; - percentileThreshold: number; - termFilters?: FieldValuePair[]; - setup: Setup; -} - export interface OverallLatencyDistributionResponse { durationMin?: number; durationMax?: number; diff --git a/x-pack/plugins/apm/server/routes/metrics/by_agent/java/gc/fetch_and_transform_gc_metrics.test.ts b/x-pack/plugins/apm/server/routes/metrics/by_agent/java/gc/fetch_and_transform_gc_metrics.test.ts index d6e60cf713d544..debb20c11f1a5a 100644 --- a/x-pack/plugins/apm/server/routes/metrics/by_agent/java/gc/fetch_and_transform_gc_metrics.test.ts +++ b/x-pack/plugins/apm/server/routes/metrics/by_agent/java/gc/fetch_and_transform_gc_metrics.test.ts @@ -5,12 +5,12 @@ * 2.0. */ +import { APMConfig } from '../../../../..'; import { METRIC_JAVA_GC_COUNT, METRIC_JAVA_GC_TIME, } from '../../../../../../common/elasticsearch_fieldnames'; import { APMEventClient } from '../../../../../lib/helpers/create_es_client/create_apm_event_client'; -import { Setup } from '../../../../../lib/helpers/setup_request'; import { ChartBase } from '../../../types'; import { fetchAndTransformGcMetrics } from './fetch_and_transform_gc_metrics'; @@ -50,9 +50,7 @@ describe('fetchAndTransformGcMetrics', () => { }, }, }; - const setup = { - config: { 'xpack.gc.metricsInterval': 0 }, - } as unknown as Setup; + const config = { 'xpack.gc.metricsInterval': 0 } as unknown as APMConfig; const apmEventClient = { search: () => Promise.resolve(response), } as unknown as APMEventClient; @@ -64,7 +62,7 @@ describe('fetchAndTransformGcMetrics', () => { fieldName, kuery: '', operationName: 'test operation name', - config: setup.config, + config, apmEventClient, serviceName: 'test service name', start: 1633456140000, @@ -113,9 +111,7 @@ describe('fetchAndTransformGcMetrics', () => { }, }, }; - const setup = { - config: { 'xpack.gc.metricsInterval': 0 }, - } as unknown as Setup; + const config = { 'xpack.gc.metricsInterval': 0 } as unknown as APMConfig; const apmEventClient = { search: () => Promise.resolve(response), } as unknown as APMEventClient; @@ -127,7 +123,7 @@ describe('fetchAndTransformGcMetrics', () => { fieldName, kuery: '', operationName: 'test operation name', - config: setup.config, + config, apmEventClient, serviceName: 'test service name', start: 1633456140000, diff --git a/x-pack/plugins/apm/server/routes/metrics/queries.test.ts b/x-pack/plugins/apm/server/routes/metrics/queries.test.ts index ea14dc2082921f..015cde00ece3e8 100644 --- a/x-pack/plugins/apm/server/routes/metrics/queries.test.ts +++ b/x-pack/plugins/apm/server/routes/metrics/queries.test.ts @@ -22,10 +22,10 @@ describe('metrics queries', () => { const createTests = (serviceNodeName?: string) => { it('fetches cpu chart data', async () => { - mock = await inspectSearchParams((setup, apmEventClient) => + mock = await inspectSearchParams(({ mockApmEventClient, mockConfig }) => getCPUChartData({ - config: setup.config, - apmEventClient, + config: mockConfig, + apmEventClient: mockApmEventClient, serviceName: 'foo', serviceNodeName, environment: ENVIRONMENT_ALL.value, @@ -39,10 +39,10 @@ describe('metrics queries', () => { }); it('fetches memory chart data', async () => { - mock = await inspectSearchParams((setup, apmEventClient) => + mock = await inspectSearchParams(({ mockApmEventClient, mockConfig }) => getMemoryChartData({ - config: setup.config, - apmEventClient, + config: mockConfig, + apmEventClient: mockApmEventClient, serviceName: 'foo', serviceNodeName, environment: ENVIRONMENT_ALL.value, @@ -56,10 +56,10 @@ describe('metrics queries', () => { }); it('fetches heap memory chart data', async () => { - mock = await inspectSearchParams((setup, apmEventClient) => + mock = await inspectSearchParams(({ mockApmEventClient, mockConfig }) => getHeapMemoryChart({ - config: setup.config, - apmEventClient, + config: mockConfig, + apmEventClient: mockApmEventClient, serviceName: 'foo', serviceNodeName, environment: ENVIRONMENT_ALL.value, @@ -73,10 +73,10 @@ describe('metrics queries', () => { }); it('fetches non heap memory chart data', async () => { - mock = await inspectSearchParams((setup, apmEventClient) => + mock = await inspectSearchParams(({ mockApmEventClient, mockConfig }) => getNonHeapMemoryChart({ - config: setup.config, - apmEventClient, + config: mockConfig, + apmEventClient: mockApmEventClient, serviceName: 'foo', serviceNodeName, environment: ENVIRONMENT_ALL.value, @@ -90,10 +90,10 @@ describe('metrics queries', () => { }); it('fetches thread count chart data', async () => { - mock = await inspectSearchParams((setup, apmEventClient) => + mock = await inspectSearchParams(({ mockApmEventClient, mockConfig }) => getThreadCountChart({ - config: setup.config, - apmEventClient, + config: mockConfig, + apmEventClient: mockApmEventClient, serviceName: 'foo', serviceNodeName, environment: ENVIRONMENT_ALL.value, diff --git a/x-pack/plugins/apm/server/routes/metrics/route.ts b/x-pack/plugins/apm/server/routes/metrics/route.ts index 8fd878222fc52b..c8fb71c3455f9b 100644 --- a/x-pack/plugins/apm/server/routes/metrics/route.ts +++ b/x-pack/plugins/apm/server/routes/metrics/route.ts @@ -7,7 +7,6 @@ import * as t from 'io-ts'; import { getApmEventClient } from '../../lib/helpers/get_apm_event_client'; -import { setupRequest } from '../../lib/helpers/setup_request'; import { createApmServerRoute } from '../apm_routes/create_apm_server_route'; import { environmentRt, kueryRt, rangeRt } from '../default_api_types'; import { FetchAndTransformMetrics } from './fetch_and_transform_metrics'; @@ -39,11 +38,8 @@ const metricsChartsRoute = createApmServerRoute({ ): Promise<{ charts: FetchAndTransformMetrics[]; }> => { - const { params } = resources; - const [setup, apmEventClient] = await Promise.all([ - setupRequest(resources), - getApmEventClient(resources), - ]); + const { params, config } = resources; + const apmEventClient = await getApmEventClient(resources); const { serviceName } = params.path; const { agentName, environment, kuery, serviceNodeName, start, end } = params.query; @@ -51,7 +47,7 @@ const metricsChartsRoute = createApmServerRoute({ const charts = await getMetricsChartDataByAgent({ environment, kuery, - config: setup.config, + config, apmEventClient, serviceName, agentName, diff --git a/x-pack/plugins/apm/server/routes/metrics/serverless/route.ts b/x-pack/plugins/apm/server/routes/metrics/serverless/route.ts index 7fdf4dca1e2cd2..af907851623b5b 100644 --- a/x-pack/plugins/apm/server/routes/metrics/serverless/route.ts +++ b/x-pack/plugins/apm/server/routes/metrics/serverless/route.ts @@ -10,7 +10,6 @@ import { apmAWSLambdaPriceFactor, apmAWSLambdaRequestCostPerMillion, } from '@kbn/observability-plugin/common'; -import { setupRequest } from '../../../lib/helpers/setup_request'; import { createApmServerRoute } from '../../apm_routes/create_apm_server_route'; import { environmentRt, kueryRt, rangeRt } from '../../default_api_types'; import { getServerlessAgentMetricsCharts } from './get_serverless_agent_metrics_chart'; @@ -43,11 +42,8 @@ const serverlessMetricsChartsRoute = createApmServerRoute({ ): Promise<{ charts: Awaited>; }> => { - const { params } = resources; - const [setup, apmEventClient] = await Promise.all([ - setupRequest(resources), - getApmEventClient(resources), - ]); + const { params, config } = resources; + const apmEventClient = await getApmEventClient(resources); const { serviceName } = params.path; const { environment, kuery, start, end, serverlessId } = params.query; @@ -57,7 +53,7 @@ const serverlessMetricsChartsRoute = createApmServerRoute({ start, end, kuery, - config: setup.config, + config, apmEventClient, serviceName, serverlessId, @@ -89,11 +85,8 @@ const serverlessMetricsActiveInstancesRoute = createApmServerRoute({ >; timeseries: Awaited>; }> => { - const { params } = resources; - const [setup, apmEventClient] = await Promise.all([ - setupRequest(resources), - getApmEventClient(resources), - ]); + const { params, config } = resources; + const apmEventClient = await getApmEventClient(resources); const { serviceName } = params.path; const { environment, kuery, start, end, serverlessId } = params.query; @@ -103,7 +96,6 @@ const serverlessMetricsActiveInstancesRoute = createApmServerRoute({ start, end, kuery, - setup, serviceName, serverlessId, apmEventClient, @@ -111,7 +103,7 @@ const serverlessMetricsActiveInstancesRoute = createApmServerRoute({ const [activeInstances, timeseries] = await Promise.all([ getServerlessActiveInstancesOverview(options), - getActiveInstancesTimeseries({ ...options, config: setup.config }), + getActiveInstancesTimeseries({ ...options, config }), ]); return { activeInstances, timeseries }; }, diff --git a/x-pack/plugins/apm/server/routes/observability_overview/route.ts b/x-pack/plugins/apm/server/routes/observability_overview/route.ts index 7128d664b0cef9..600b3929d7e6e2 100644 --- a/x-pack/plugins/apm/server/routes/observability_overview/route.ts +++ b/x-pack/plugins/apm/server/routes/observability_overview/route.ts @@ -7,7 +7,6 @@ import * as t from 'io-ts'; import { toNumberRt } from '@kbn/io-ts-utils'; -import { setupRequest } from '../../lib/helpers/setup_request'; import { getServiceCount } from './get_service_count'; import { getTransactionsPerMinute } from './get_transactions_per_minute'; import { getHasData } from './has_data'; @@ -26,11 +25,11 @@ const observabilityOverviewHasDataRoute = createApmServerRoute({ hasData: boolean; indices: import('./../../../../observability/common/typings').ApmIndicesConfig; }> => { - const [setup, apmEventClient] = await Promise.all([ - setupRequest(resources), - getApmEventClient(resources), - ]); - return await getHasData({ indices: setup.indices, apmEventClient }); + const apmEventClient = await getApmEventClient(resources); + return await getHasData({ + indices: apmEventClient.indices, + apmEventClient, + }); }, }); @@ -51,15 +50,12 @@ const observabilityOverviewRoute = createApmServerRoute({ | { value: undefined; timeseries: never[] } | { value: number; timeseries: Array<{ x: number; y: number | null }> }; }> => { - const [setup, apmEventClient] = await Promise.all([ - setupRequest(resources), - getApmEventClient(resources), - ]); + const apmEventClient = await getApmEventClient(resources); const { bucketSize, intervalString, start, end } = resources.params.query; const searchAggregatedTransactions = await getSearchTransactionsEvents({ apmEventClient, - config: setup.config, + config: resources.config, start, end, kuery: '', diff --git a/x-pack/plugins/apm/server/routes/service_map/get_service_anomalies.ts b/x-pack/plugins/apm/server/routes/service_map/get_service_anomalies.ts index e67b2b554df050..f03ada8b0e81b9 100644 --- a/x-pack/plugins/apm/server/routes/service_map/get_service_anomalies.ts +++ b/x-pack/plugins/apm/server/routes/service_map/get_service_anomalies.ts @@ -20,7 +20,7 @@ import { } from '../../../common/transaction_types'; import { withApmSpan } from '../../utils/with_apm_span'; import { getMlJobsWithAPMGroup } from '../../lib/anomaly_detection/get_ml_jobs_with_apm_group'; -import { Setup } from '../../lib/helpers/setup_request'; +import { MlClient } from '../../lib/helpers/get_ml_client'; import { apmMlAnomalyQuery } from '../../lib/anomaly_detection/apm_ml_anomaly_query'; import { ApmMlDetectorType } from '../../../common/anomaly_detection/apm_ml_detectors'; @@ -33,20 +33,18 @@ export type ServiceAnomaliesResponse = Awaited< ReturnType >; export async function getServiceAnomalies({ - setup, + mlClient, environment, start, end, }: { - setup: Setup; + mlClient?: MlClient; environment: string; start: number; end: number; }) { return withApmSpan('get_service_anomalies', async () => { - const { ml } = setup; - - if (!ml) { + if (!mlClient) { throw Boom.notImplemented(ML_ERRORS.ML_NOT_AVAILABLE); } @@ -108,9 +106,9 @@ export async function getServiceAnomalies({ // pass an empty array of job ids to anomaly search // so any validation is skipped withApmSpan('ml_anomaly_search', () => - ml.mlSystem.mlAnomalySearch(params, []) + mlClient.mlSystem.mlAnomalySearch(params, []) ), - getMLJobIds(ml.anomalyDetectors, environment), + getMLJobIds(mlClient.anomalyDetectors, environment), ]); const typedAnomalyResponse: ESSearchResponse = diff --git a/x-pack/plugins/apm/server/routes/service_map/get_service_map.ts b/x-pack/plugins/apm/server/routes/service_map/get_service_map.ts index 36a4218ae6e4ac..d5a7c20b5204fe 100644 --- a/x-pack/plugins/apm/server/routes/service_map/get_service_map.ts +++ b/x-pack/plugins/apm/server/routes/service_map/get_service_map.ts @@ -16,7 +16,7 @@ import { } from '../../../common/elasticsearch_fieldnames'; import { environmentQuery } from '../../../common/utils/environment_query'; import { withApmSpan } from '../../utils/with_apm_span'; -import { Setup } from '../../lib/helpers/setup_request'; +import { MlClient } from '../../lib/helpers/get_ml_client'; import { DEFAULT_ANOMALIES, getServiceAnomalies, @@ -29,9 +29,11 @@ import { getProcessorEventForTransactions } from '../../lib/helpers/transactions import { ServiceGroup } from '../../../common/service_groups'; import { serviceGroupQuery } from '../../lib/service_group_query'; import { APMEventClient } from '../../lib/helpers/create_es_client/create_apm_event_client'; +import { APMConfig } from '../..'; export interface IEnvOptions { - setup: Setup; + mlClient?: MlClient; + config: APMConfig; apmEventClient: APMEventClient; serviceNames?: string[]; environment: string; @@ -43,7 +45,7 @@ export interface IEnvOptions { } async function getConnectionData({ - setup, + config, apmEventClient, serviceNames, environment, @@ -53,7 +55,7 @@ async function getConnectionData({ }: IEnvOptions) { return withApmSpan('get_service_map_connections', async () => { const { traceIds } = await getTraceSampleIds({ - config: setup.config, + config, apmEventClient, serviceNames, environment, @@ -62,7 +64,7 @@ async function getConnectionData({ serviceGroup, }); - const chunks = chunk(traceIds, setup.config.serviceMapMaxTracesPerRequest); + const chunks = chunk(traceIds, config.serviceMapMaxTracesPerRequest); const init = { connections: [], diff --git a/x-pack/plugins/apm/server/routes/service_map/route.ts b/x-pack/plugins/apm/server/routes/service_map/route.ts index f833ce195c442f..1cf4dd40afbcf9 100644 --- a/x-pack/plugins/apm/server/routes/service_map/route.ts +++ b/x-pack/plugins/apm/server/routes/service_map/route.ts @@ -13,7 +13,7 @@ import { isActivePlatinumLicense } from '../../../common/license_check'; import { invalidLicenseMessage } from '../../../common/service_map'; import { notifyFeatureUsage } from '../../feature'; import { getSearchTransactionsEvents } from '../../lib/helpers/transactions'; -import { setupRequest } from '../../lib/helpers/setup_request'; +import { getMlClient } from '../../lib/helpers/get_ml_client'; import { getServiceMap } from './get_service_map'; import { getServiceMapDependencyNodeInfo } from './get_service_map_dependency_node_info'; import { getServiceMapServiceNodeInfo } from './get_service_map_service_node_info'; @@ -116,9 +116,9 @@ const serviceMapRoute = createApmServerRoute({ savedObjects: { client: savedObjectsClient }, uiSettings: { client: uiSettingsClient }, } = await context.core; - const [setup, apmEventClient, serviceGroup, maxNumberOfServices] = + const [mlClient, apmEventClient, serviceGroup, maxNumberOfServices] = await Promise.all([ - setupRequest(resources), + getMlClient(resources), getApmEventClient(resources), serviceGroupId ? getServiceGroup({ @@ -133,13 +133,14 @@ const serviceMapRoute = createApmServerRoute({ const searchAggregatedTransactions = await getSearchTransactionsEvents({ apmEventClient, - config: setup.config, + config, start, end, kuery: '', }); return getServiceMap({ - setup, + mlClient, + config, apmEventClient, serviceNames, environment, @@ -180,10 +181,7 @@ const serviceMapServiceNodeRoute = createApmServerRoute({ if (!isActivePlatinumLicense(licensingContext.license)) { throw Boom.forbidden(invalidLicenseMessage); } - const [setup, apmEventClient] = await Promise.all([ - setupRequest(resources), - getApmEventClient(resources), - ]); + const apmEventClient = await getApmEventClient(resources); const { path: { serviceName }, @@ -192,7 +190,7 @@ const serviceMapServiceNodeRoute = createApmServerRoute({ const searchAggregatedTransactions = await getSearchTransactionsEvents({ apmEventClient, - config: setup.config, + config, start, end, kuery: '', diff --git a/x-pack/plugins/apm/server/routes/services/annotations/get_derived_service_annotations.test.ts b/x-pack/plugins/apm/server/routes/services/annotations/get_derived_service_annotations.test.ts index fef8a878f2e353..6c2ce8742dac10 100644 --- a/x-pack/plugins/apm/server/routes/services/annotations/get_derived_service_annotations.test.ts +++ b/x-pack/plugins/apm/server/routes/services/annotations/get_derived_service_annotations.test.ts @@ -26,9 +26,9 @@ describe('getDerivedServiceAnnotations', () => { describe('with 0 versions', () => { it('returns no annotations', async () => { mock = await inspectSearchParams( - (setup, apmEventClient) => + ({ mockApmEventClient }) => getDerivedServiceAnnotations({ - apmEventClient, + apmEventClient: mockApmEventClient, serviceName: 'foo', environment: 'bar', searchAggregatedTransactions: false, @@ -54,9 +54,9 @@ describe('getDerivedServiceAnnotations', () => { describe('with 1 version', () => { it('returns no annotations', async () => { mock = await inspectSearchParams( - (setup, apmEventClient) => + ({ mockApmEventClient }) => getDerivedServiceAnnotations({ - apmEventClient, + apmEventClient: mockApmEventClient, serviceName: 'foo', environment: 'bar', searchAggregatedTransactions: false, @@ -87,9 +87,9 @@ describe('getDerivedServiceAnnotations', () => { versionsFirstSeen, ]; mock = await inspectSearchParams( - (setup, apmEventClient) => + ({ mockApmEventClient }) => getDerivedServiceAnnotations({ - apmEventClient, + apmEventClient: mockApmEventClient, serviceName: 'foo', environment: 'bar', searchAggregatedTransactions: false, diff --git a/x-pack/plugins/apm/server/routes/services/get_services/get_health_statuses.ts b/x-pack/plugins/apm/server/routes/services/get_services/get_health_statuses.ts index 4fc1636deda2f3..1c3ed953122a07 100644 --- a/x-pack/plugins/apm/server/routes/services/get_services/get_health_statuses.ts +++ b/x-pack/plugins/apm/server/routes/services/get_services/get_health_statuses.ts @@ -10,30 +10,30 @@ import { getServiceHealthStatus, ServiceHealthStatus, } from '../../../../common/service_health_status'; +import { MlClient } from '../../../lib/helpers/get_ml_client'; import { getServiceAnomalies } from '../../service_map/get_service_anomalies'; -import { ServicesItemsSetup } from './get_services_items'; interface AggregationParams { environment: string; - setup: ServicesItemsSetup; + mlClient?: MlClient; start: number; end: number; } export const getHealthStatuses = async ({ environment, - setup, + mlClient, start, end, }: AggregationParams): Promise< Array<{ serviceName: string; healthStatus: ServiceHealthStatus }> > => { - if (!setup.ml) { + if (!mlClient) { return []; } const anomalies = await getServiceAnomalies({ - setup, + mlClient, environment, start, end, diff --git a/x-pack/plugins/apm/server/routes/services/get_services/get_services_items.ts b/x-pack/plugins/apm/server/routes/services/get_services/get_services_items.ts index e3d2b72ec56b2e..b72ab6f2860052 100644 --- a/x-pack/plugins/apm/server/routes/services/get_services/get_services_items.ts +++ b/x-pack/plugins/apm/server/routes/services/get_services/get_services_items.ts @@ -7,7 +7,7 @@ import { Logger } from '@kbn/logging'; import { withApmSpan } from '../../../utils/with_apm_span'; -import { Setup } from '../../../lib/helpers/setup_request'; +import { MlClient } from '../../../lib/helpers/get_ml_client'; import { getHealthStatuses } from './get_health_statuses'; import { getServicesFromErrorAndMetricDocuments } from './get_services_from_error_and_metric_documents'; import { getServiceTransactionStats } from './get_service_transaction_stats'; @@ -17,14 +17,12 @@ import { ServiceGroup } from '../../../../common/service_groups'; import { RandomSampler } from '../../../lib/helpers/get_random_sampler'; import { APMEventClient } from '../../../lib/helpers/create_es_client/create_apm_event_client'; -export type ServicesItemsSetup = Setup; - const MAX_NUMBER_OF_SERVICES = 500; export async function getServicesItems({ environment, kuery, - setup, + mlClient, apmEventClient, searchAggregatedTransactions, searchAggregatedServiceMetrics, @@ -36,7 +34,7 @@ export async function getServicesItems({ }: { environment: string; kuery: string; - setup: ServicesItemsSetup; + mlClient?: MlClient; apmEventClient: APMEventClient; searchAggregatedTransactions: boolean; searchAggregatedServiceMetrics: boolean; @@ -77,7 +75,7 @@ export async function getServicesItems({ ...commonParams, apmEventClient, }), - getHealthStatuses({ ...commonParams, setup }).catch((err) => { + getHealthStatuses({ ...commonParams, mlClient }).catch((err) => { logger.error(err); return []; }), diff --git a/x-pack/plugins/apm/server/routes/services/get_services/get_sorted_and_filtered_services.ts b/x-pack/plugins/apm/server/routes/services/get_services/get_sorted_and_filtered_services.ts index 62748c722ffee1..dff072cfc05f69 100644 --- a/x-pack/plugins/apm/server/routes/services/get_services/get_sorted_and_filtered_services.ts +++ b/x-pack/plugins/apm/server/routes/services/get_services/get_sorted_and_filtered_services.ts @@ -13,7 +13,7 @@ import { ENVIRONMENT_ALL } from '../../../../common/environment_filter_values'; import { Environment } from '../../../../common/environment_rt'; import { joinByKey } from '../../../../common/utils/join_by_key'; import { ServiceGroup } from '../../../../common/service_groups'; -import { Setup } from '../../../lib/helpers/setup_request'; +import { MlClient } from '../../../lib/helpers/get_ml_client'; import { getHealthStatuses } from './get_health_statuses'; import { lookupServices } from '../../service_groups/lookup_services'; @@ -51,7 +51,7 @@ export async function getServiceNamesFromTermsEnum({ } export async function getSortedAndFilteredServices({ - setup, + mlClient, apmEventClient, start, end, @@ -60,7 +60,7 @@ export async function getSortedAndFilteredServices({ serviceGroup, maxNumberOfServices, }: { - setup: Setup; + mlClient?: MlClient; apmEventClient: APMEventClient; start: number; end: number; @@ -71,7 +71,7 @@ export async function getSortedAndFilteredServices({ }) { const [servicesWithHealthStatuses, selectedServices] = await Promise.all([ getHealthStatuses({ - setup, + mlClient, start, end, environment, diff --git a/x-pack/plugins/apm/server/routes/services/get_services/index.ts b/x-pack/plugins/apm/server/routes/services/get_services/index.ts index d9eca887c8e087..d3a3952fff9631 100644 --- a/x-pack/plugins/apm/server/routes/services/get_services/index.ts +++ b/x-pack/plugins/apm/server/routes/services/get_services/index.ts @@ -7,7 +7,7 @@ import { Logger } from '@kbn/logging'; import { withApmSpan } from '../../../utils/with_apm_span'; -import { Setup } from '../../../lib/helpers/setup_request'; +import { MlClient } from '../../../lib/helpers/get_ml_client'; import { getServicesItems } from './get_services_items'; import { ServiceGroup } from '../../../../common/service_groups'; import { RandomSampler } from '../../../lib/helpers/get_random_sampler'; @@ -16,7 +16,7 @@ import { APMEventClient } from '../../../lib/helpers/create_es_client/create_apm export async function getServices({ environment, kuery, - setup, + mlClient, apmEventClient, searchAggregatedTransactions, searchAggregatedServiceMetrics, @@ -28,7 +28,7 @@ export async function getServices({ }: { environment: string; kuery: string; - setup: Setup; + mlClient?: MlClient; apmEventClient: APMEventClient; searchAggregatedTransactions: boolean; searchAggregatedServiceMetrics: boolean; @@ -42,7 +42,7 @@ export async function getServices({ const items = await getServicesItems({ environment, kuery, - setup, + mlClient, apmEventClient, searchAggregatedTransactions, searchAggregatedServiceMetrics, diff --git a/x-pack/plugins/apm/server/routes/services/queries.test.ts b/x-pack/plugins/apm/server/routes/services/queries.test.ts index 1410772704648b..f253fa175545b5 100644 --- a/x-pack/plugins/apm/server/routes/services/queries.test.ts +++ b/x-pack/plugins/apm/server/routes/services/queries.test.ts @@ -23,10 +23,10 @@ describe('services queries', () => { }); it('fetches the service agent name', async () => { - mock = await inspectSearchParams((setup, apmEventClient) => + mock = await inspectSearchParams(({ mockApmEventClient }) => getServiceAgent({ serviceName: 'foo', - apmEventClient, + apmEventClient: mockApmEventClient, start: 0, end: 50000, }) @@ -36,10 +36,10 @@ describe('services queries', () => { }); it('fetches the service transaction types', async () => { - mock = await inspectSearchParams((setup, apmEventClient) => + mock = await inspectSearchParams(({ mockApmEventClient }) => getServiceTransactionTypes({ serviceName: 'foo', - apmEventClient, + apmEventClient: mockApmEventClient, searchAggregatedTransactions: false, start: 0, end: 50000, @@ -50,10 +50,10 @@ describe('services queries', () => { }); it('fetches the service items', async () => { - mock = await inspectSearchParams((setup, apmEventClient) => + mock = await inspectSearchParams(({ mockApmEventClient }) => getServicesItems({ - setup, - apmEventClient, + mlClient: undefined, + apmEventClient: mockApmEventClient, searchAggregatedTransactions: false, searchAggregatedServiceMetrics: false, logger: {} as any, @@ -75,8 +75,8 @@ describe('services queries', () => { }); it('fetches the agent status', async () => { - mock = await inspectSearchParams((setup, apmEventClient) => - hasHistoricalAgentData(apmEventClient) + mock = await inspectSearchParams(({ mockApmEventClient }) => + hasHistoricalAgentData(mockApmEventClient) ); expect(mock.params).toMatchSnapshot(); diff --git a/x-pack/plugins/apm/server/routes/services/route.ts b/x-pack/plugins/apm/server/routes/services/route.ts index d1b0e25fb4d053..071b04faa52e75 100644 --- a/x-pack/plugins/apm/server/routes/services/route.ts +++ b/x-pack/plugins/apm/server/routes/services/route.ts @@ -21,7 +21,7 @@ import { apmServiceGroupMaxNumberOfServices } from '@kbn/observability-plugin/co import { latencyAggregationTypeRt } from '../../../common/latency_aggregation_types'; import { getSearchTransactionsEvents } from '../../lib/helpers/transactions'; import { getServiceInventorySearchSource } from '../../lib/helpers/get_service_inventory_search_source'; -import { setupRequest } from '../../lib/helpers/setup_request'; +import { getMlClient } from '../../lib/helpers/get_ml_client'; import { getServiceAnnotations } from './annotations'; import { getServices } from './get_services'; import { getServiceAgent } from './get_service_agent'; @@ -109,6 +109,7 @@ const servicesRoute = createApmServerRoute({ >; }> { const { + config, context, params, logger, @@ -127,9 +128,9 @@ const servicesRoute = createApmServerRoute({ const savedObjectsClient = (await context.core).savedObjects.client; const coreContext = await resources.context.core; - const [setup, apmEventClient, serviceGroup, randomSampler] = + const [mlClient, apmEventClient, serviceGroup, randomSampler] = await Promise.all([ - setupRequest(resources), + getMlClient(resources), getApmEventClient(resources), serviceGroupId ? getServiceGroup({ savedObjectsClient, serviceGroupId }) @@ -137,8 +138,6 @@ const servicesRoute = createApmServerRoute({ getRandomSampler({ security, request, probability }), ]); - const { config } = setup; - const serviceMetricsEnabled = await coreContext.uiSettings.client.get(enableServiceMetrics); @@ -155,7 +154,7 @@ const servicesRoute = createApmServerRoute({ return getServices({ environment, kuery, - setup, + mlClient, apmEventClient, searchAggregatedTransactions, searchAggregatedServiceMetrics, @@ -216,6 +215,7 @@ const servicesDetailedStatisticsRoute = createApmServerRoute({ }>; }> => { const { + config, params, request, plugins: { security }, @@ -227,14 +227,11 @@ const servicesDetailedStatisticsRoute = createApmServerRoute({ const { serviceNames } = params.body; - const [setup, apmEventClient, randomSampler] = await Promise.all([ - setupRequest(resources), + const [apmEventClient, randomSampler] = await Promise.all([ getApmEventClient(resources), getRandomSampler({ security, request, probability }), ]); - const { config } = setup; - const serviceMetricsEnabled = await coreContext.uiSettings.client.get(enableServiceMetrics); @@ -279,18 +276,15 @@ const serviceMetadataDetailsRoute = createApmServerRoute({ ): Promise< import('./get_service_metadata_details').ServiceMetadataDetails > => { - const [setup, apmEventClient] = await Promise.all([ - setupRequest(resources), - getApmEventClient(resources), - ]); + const apmEventClient = await getApmEventClient(resources); const infraMetricsClient = createInfraMetricsClient(resources); - const { params } = resources; + const { params, config } = resources; const { serviceName } = params.path; const { start, end } = params.query; const searchAggregatedTransactions = await getSearchTransactionsEvents({ apmEventClient, - config: setup.config, + config, start, end, kuery: '', @@ -329,17 +323,14 @@ const serviceMetadataIconsRoute = createApmServerRoute({ handler: async ( resources ): Promise => { - const [setup, apmEventClient] = await Promise.all([ - setupRequest(resources), - getApmEventClient(resources), - ]); - const { params } = resources; + const apmEventClient = await getApmEventClient(resources); + const { params, config } = resources; const { serviceName } = params.path; const { start, end } = params.query; const searchAggregatedTransactions = await getSearchTransactionsEvents({ apmEventClient, - config: setup.config, + config, start, end, kuery: '', @@ -394,11 +385,8 @@ const serviceTransactionTypesRoute = createApmServerRoute({ }), options: { tags: ['access:apm'] }, handler: async (resources): Promise<{ transactionTypes: string[] }> => { - const [setup, apmEventClient] = await Promise.all([ - setupRequest(resources), - getApmEventClient(resources), - ]); - const { params } = resources; + const apmEventClient = await getApmEventClient(resources); + const { params, config } = resources; const { serviceName } = params.path; const { start, end } = params.query; @@ -407,7 +395,7 @@ const serviceTransactionTypesRoute = createApmServerRoute({ apmEventClient, searchAggregatedTransactions: await getSearchTransactionsEvents({ apmEventClient, - config: setup.config, + config, start, end, kuery: '', @@ -463,11 +451,8 @@ const serviceAnnotationsRoute = createApmServerRoute({ ): Promise<{ annotations: Array; }> => { - const [setup, apmEventClient] = await Promise.all([ - setupRequest(resources), - getApmEventClient(resources), - ]); - const { params, plugins, context, request, logger } = resources; + const apmEventClient = await getApmEventClient(resources); + const { params, plugins, context, request, logger, config } = resources; const { serviceName } = params.path; const { environment, start, end } = params.query; const esClient = (await context.core).elasticsearch.client; @@ -485,7 +470,7 @@ const serviceAnnotationsRoute = createApmServerRoute({ : undefined, getSearchTransactionsEvents({ apmEventClient, - config: setup.config, + config, start, end, kuery: '', @@ -604,11 +589,8 @@ const serviceThroughputRoute = createApmServerRoute({ y: import('./../../../typings/common').Maybe; }>; }> => { - const [setup, apmEventClient] = await Promise.all([ - setupRequest(resources), - getApmEventClient(resources), - ]); - const { params } = resources; + const apmEventClient = await getApmEventClient(resources); + const { params, config } = resources; const { serviceName } = params.path; const { environment, @@ -620,7 +602,7 @@ const serviceThroughputRoute = createApmServerRoute({ end, } = params.query; const searchAggregatedTransactions = await getSearchTransactionsEvents({ - config: setup.config, + config, apmEventClient, kuery, start, @@ -702,11 +684,8 @@ const serviceInstancesMainStatisticsRoute = createApmServerRoute({ memoryUsage?: number | null | undefined; }>; }> => { - const [setup, apmEventClient] = await Promise.all([ - setupRequest(resources), - getApmEventClient(resources), - ]); - const { params } = resources; + const apmEventClient = await getApmEventClient(resources); + const { params, config } = resources; const { serviceName } = params.path; const { environment, @@ -719,7 +698,7 @@ const serviceInstancesMainStatisticsRoute = createApmServerRoute({ } = params.query; const searchAggregatedTransactions = await getSearchTransactionsEvents({ - config: setup.config, + config, apmEventClient, kuery, start, @@ -826,11 +805,8 @@ const serviceInstancesDetailedStatisticsRoute = createApmServerRoute({ serviceNodeName: string; }>; }> => { - const [setup, apmEventClient] = await Promise.all([ - setupRequest(resources), - getApmEventClient(resources), - ]); - const { params } = resources; + const apmEventClient = await getApmEventClient(resources); + const { params, config } = resources; const { serviceName } = params.path; const { environment, @@ -846,7 +822,7 @@ const serviceInstancesDetailedStatisticsRoute = createApmServerRoute({ const searchAggregatedTransactions = await getSearchTransactionsEvents({ apmEventClient, - config: setup.config, + config, kuery, start, end, @@ -1133,9 +1109,9 @@ const serviceAnomalyChartsRoute = createApmServerRoute({ import('./../../../common/anomaly_detection/service_anomaly_timeseries').ServiceAnomalyTimeseries >; }> => { - const setup = await setupRequest(resources); + const mlClient = await getMlClient(resources); - if (!setup.ml) { + if (!mlClient) { throw Boom.notImplemented(ML_ERRORS.ML_NOT_AVAILABLE); } @@ -1150,7 +1126,7 @@ const serviceAnomalyChartsRoute = createApmServerRoute({ transactionType, start, end, - mlSetup: setup.ml, + mlClient, logger: resources.logger, environment, }); @@ -1207,9 +1183,9 @@ const sortedAndFilteredServicesRoute = createApmServerRoute({ uiSettings: { client: uiSettingsClient }, } = await resources.context.core; - const [setup, apmEventClient, serviceGroup, maxNumberOfServices] = + const [mlClient, apmEventClient, serviceGroup, maxNumberOfServices] = await Promise.all([ - setupRequest(resources), + getMlClient(resources), getApmEventClient(resources), serviceGroupId ? getServiceGroup({ savedObjectsClient, serviceGroupId }) @@ -1218,7 +1194,7 @@ const sortedAndFilteredServicesRoute = createApmServerRoute({ ]); return { services: await getSortedAndFilteredServices({ - setup, + mlClient, apmEventClient, start, end, diff --git a/x-pack/plugins/apm/server/routes/settings/agent_configuration/__snapshots__/queries.test.ts.snap b/x-pack/plugins/apm/server/routes/settings/agent_configuration/__snapshots__/queries.test.ts.snap index 1e2380189dbec9..e626209fe75db5 100644 --- a/x-pack/plugins/apm/server/routes/settings/agent_configuration/__snapshots__/queries.test.ts.snap +++ b/x-pack/plugins/apm/server/routes/settings/agent_configuration/__snapshots__/queries.test.ts.snap @@ -1,88 +1,10 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`agent configuration queries findExactConfiguration find configuration by service.environment 1`] = ` -Object { - "body": Object { - "query": Object { - "bool": Object { - "filter": Array [ - Object { - "bool": Object { - "must_not": Array [ - Object { - "exists": Object { - "field": "service.name", - }, - }, - ], - }, - }, - Object { - "term": Object { - "service.environment": "bar", - }, - }, - ], - }, - }, - }, - "index": "myIndex", -} -`; +exports[`agent configuration queries findExactConfiguration find configuration by service.environment 1`] = `undefined`; -exports[`agent configuration queries findExactConfiguration find configuration by service.name 1`] = ` -Object { - "body": Object { - "query": Object { - "bool": Object { - "filter": Array [ - Object { - "term": Object { - "service.name": "foo", - }, - }, - Object { - "bool": Object { - "must_not": Array [ - Object { - "exists": Object { - "field": "service.environment", - }, - }, - ], - }, - }, - ], - }, - }, - }, - "index": "myIndex", -} -`; +exports[`agent configuration queries findExactConfiguration find configuration by service.name 1`] = `undefined`; -exports[`agent configuration queries findExactConfiguration find configuration by service.name and service.environment 1`] = ` -Object { - "body": Object { - "query": Object { - "bool": Object { - "filter": Array [ - Object { - "term": Object { - "service.name": "foo", - }, - }, - Object { - "term": Object { - "service.environment": "bar", - }, - }, - ], - }, - }, - }, - "index": "myIndex", -} -`; +exports[`agent configuration queries findExactConfiguration find configuration by service.name and service.environment 1`] = `undefined`; exports[`agent configuration queries getAllEnvironments fetches all environments 1`] = ` Object { @@ -120,142 +42,10 @@ Object { } `; -exports[`agent configuration queries getExistingEnvironmentsForService fetches unavailable environments 1`] = ` -Object { - "body": Object { - "aggs": Object { - "environments": Object { - "terms": Object { - "field": "service.environment", - "missing": "ALL_OPTION_VALUE", - "size": 50, - }, - }, - }, - "query": Object { - "bool": Object { - "filter": Array [ - Object { - "term": Object { - "service.name": "foo", - }, - }, - ], - }, - }, - "size": 0, - }, - "index": "myIndex", -} -`; +exports[`agent configuration queries getExistingEnvironmentsForService fetches unavailable environments 1`] = `undefined`; -exports[`agent configuration queries listConfigurations fetches configurations 1`] = ` -Object { - "index": "myIndex", - "size": 200, -} -`; +exports[`agent configuration queries listConfigurations fetches configurations 1`] = `undefined`; -exports[`agent configuration queries searchConfigurations fetches filtered configurations with an environment 1`] = ` -Object { - "body": Object { - "query": Object { - "bool": Object { - "minimum_should_match": 2, - "should": Array [ - Object { - "constant_score": Object { - "boost": 2, - "filter": Object { - "term": Object { - "service.name": "foo", - }, - }, - }, - }, - Object { - "constant_score": Object { - "boost": 1, - "filter": Object { - "term": Object { - "service.environment": "bar", - }, - }, - }, - }, - Object { - "bool": Object { - "must_not": Array [ - Object { - "exists": Object { - "field": "service.name", - }, - }, - ], - }, - }, - Object { - "bool": Object { - "must_not": Array [ - Object { - "exists": Object { - "field": "service.environment", - }, - }, - ], - }, - }, - ], - }, - }, - }, - "index": "myIndex", -} -`; +exports[`agent configuration queries searchConfigurations fetches filtered configurations with an environment 1`] = `undefined`; -exports[`agent configuration queries searchConfigurations fetches filtered configurations without an environment 1`] = ` -Object { - "body": Object { - "query": Object { - "bool": Object { - "minimum_should_match": 2, - "should": Array [ - Object { - "constant_score": Object { - "boost": 2, - "filter": Object { - "term": Object { - "service.name": "foo", - }, - }, - }, - }, - Object { - "bool": Object { - "must_not": Array [ - Object { - "exists": Object { - "field": "service.name", - }, - }, - ], - }, - }, - Object { - "bool": Object { - "must_not": Array [ - Object { - "exists": Object { - "field": "service.environment", - }, - }, - ], - }, - }, - ], - }, - }, - }, - "index": "myIndex", -} -`; +exports[`agent configuration queries searchConfigurations fetches filtered configurations without an environment 1`] = `undefined`; diff --git a/x-pack/plugins/apm/server/routes/settings/agent_configuration/create_or_update_configuration.ts b/x-pack/plugins/apm/server/routes/settings/agent_configuration/create_or_update_configuration.ts index 07a9f798293060..5e7a1551fdc6c8 100644 --- a/x-pack/plugins/apm/server/routes/settings/agent_configuration/create_or_update_configuration.ts +++ b/x-pack/plugins/apm/server/routes/settings/agent_configuration/create_or_update_configuration.ts @@ -6,27 +6,27 @@ */ import hash from 'object-hash'; -import { Setup } from '../../../lib/helpers/setup_request'; import { AgentConfiguration, AgentConfigurationIntake, } from '../../../../common/agent_configuration/configuration_types'; -import { APMIndexDocumentParams } from '../../../lib/helpers/create_es_client/create_internal_es_client'; +import { + APMIndexDocumentParams, + APMInternalESClient, +} from '../../../lib/helpers/create_es_client/create_internal_es_client'; export function createOrUpdateConfiguration({ configurationId, configurationIntake, - setup, + internalESClient, }: { configurationId?: string; configurationIntake: AgentConfigurationIntake; - setup: Setup; + internalESClient: APMInternalESClient; }) { - const { internalClient, indices } = setup; - const params: APMIndexDocumentParams = { refresh: true, - index: indices.apmAgentConfigurationIndex, + index: internalESClient.apmIndices.apmAgentConfigurationIndex, body: { agent_name: configurationIntake.agent_name, service: { @@ -45,5 +45,5 @@ export function createOrUpdateConfiguration({ params.id = configurationId; } - return internalClient.index('create_or_update_agent_configuration', params); + return internalESClient.index('create_or_update_agent_configuration', params); } diff --git a/x-pack/plugins/apm/server/routes/settings/agent_configuration/delete_configuration.ts b/x-pack/plugins/apm/server/routes/settings/agent_configuration/delete_configuration.ts index 5ac8437b157866..58896f40b2ede1 100644 --- a/x-pack/plugins/apm/server/routes/settings/agent_configuration/delete_configuration.ts +++ b/x-pack/plugins/apm/server/routes/settings/agent_configuration/delete_configuration.ts @@ -5,22 +5,20 @@ * 2.0. */ -import { Setup } from '../../../lib/helpers/setup_request'; +import { APMInternalESClient } from '../../../lib/helpers/create_es_client/create_internal_es_client'; export async function deleteConfiguration({ configurationId, - setup, + internalESClient, }: { configurationId: string; - setup: Setup; + internalESClient: APMInternalESClient; }) { - const { internalClient, indices } = setup; - const params = { refresh: 'wait_for' as const, - index: indices.apmAgentConfigurationIndex, + index: internalESClient.apmIndices.apmAgentConfigurationIndex, id: configurationId, }; - return internalClient.delete('delete_agent_configuration', params); + return internalESClient.delete('delete_agent_configuration', params); } diff --git a/x-pack/plugins/apm/server/routes/settings/agent_configuration/find_exact_configuration.ts b/x-pack/plugins/apm/server/routes/settings/agent_configuration/find_exact_configuration.ts index 053f1836c0303b..484357be294ae3 100644 --- a/x-pack/plugins/apm/server/routes/settings/agent_configuration/find_exact_configuration.ts +++ b/x-pack/plugins/apm/server/routes/settings/agent_configuration/find_exact_configuration.ts @@ -11,19 +11,17 @@ import { SERVICE_ENVIRONMENT, SERVICE_NAME, } from '../../../../common/elasticsearch_fieldnames'; -import { Setup } from '../../../lib/helpers/setup_request'; +import { APMInternalESClient } from '../../../lib/helpers/create_es_client/create_internal_es_client'; import { convertConfigSettingsToString } from './convert_settings_to_string'; import { getConfigsAppliedToAgentsThroughFleet } from './get_config_applied_to_agent_through_fleet'; export async function findExactConfiguration({ service, - setup, + internalESClient, }: { service: AgentConfiguration['service']; - setup: Setup; + internalESClient: APMInternalESClient; }) { - const { internalClient, indices } = setup; - const serviceNameFilter = service.name ? { term: { [SERVICE_NAME]: service.name } } : { bool: { must_not: [{ exists: { field: SERVICE_NAME } }] } }; @@ -33,7 +31,7 @@ export async function findExactConfiguration({ : { bool: { must_not: [{ exists: { field: SERVICE_ENVIRONMENT } }] } }; const params = { - index: indices.apmAgentConfigurationIndex, + index: internalESClient.apmIndices.apmAgentConfigurationIndex, body: { query: { bool: { filter: [serviceNameFilter, environmentFilter] }, @@ -42,11 +40,11 @@ export async function findExactConfiguration({ }; const [agentConfig, configsAppliedToAgentsThroughFleet] = await Promise.all([ - internalClient.search( + internalESClient.search( 'find_exact_agent_configuration', params ), - getConfigsAppliedToAgentsThroughFleet({ setup }), + getConfigsAppliedToAgentsThroughFleet(internalESClient), ]); const hit = agentConfig.hits.hits[0] as diff --git a/x-pack/plugins/apm/server/routes/settings/agent_configuration/get_config_applied_to_agent_through_fleet.ts b/x-pack/plugins/apm/server/routes/settings/agent_configuration/get_config_applied_to_agent_through_fleet.ts index 351c21b43c1e9c..1e5099966ea7c6 100644 --- a/x-pack/plugins/apm/server/routes/settings/agent_configuration/get_config_applied_to_agent_through_fleet.ts +++ b/x-pack/plugins/apm/server/routes/settings/agent_configuration/get_config_applied_to_agent_through_fleet.ts @@ -8,17 +8,13 @@ import { termQuery, rangeQuery } from '@kbn/observability-plugin/server'; import datemath from '@kbn/datemath'; import { METRICSET_NAME } from '../../../../common/elasticsearch_fieldnames'; -import { Setup } from '../../../lib/helpers/setup_request'; - -export async function getConfigsAppliedToAgentsThroughFleet({ - setup, -}: { - setup: Setup; -}) { - const { internalClient, indices } = setup; +import { APMInternalESClient } from '../../../lib/helpers/create_es_client/create_internal_es_client'; +export async function getConfigsAppliedToAgentsThroughFleet( + internalESClient: APMInternalESClient +) { const params = { - index: indices.metric, + index: internalESClient.apmIndices.metric, size: 0, body: { query: { @@ -43,7 +39,7 @@ export async function getConfigsAppliedToAgentsThroughFleet({ }, }; - const response = await internalClient.search( + const response = await internalESClient.search( 'get_config_applied_to_agent_through_fleet', params ); diff --git a/x-pack/plugins/apm/server/routes/settings/agent_configuration/get_environments/get_existing_environments_for_service.ts b/x-pack/plugins/apm/server/routes/settings/agent_configuration/get_environments/get_existing_environments_for_service.ts index a3925c060a1c54..336a992da7b2ca 100644 --- a/x-pack/plugins/apm/server/routes/settings/agent_configuration/get_environments/get_existing_environments_for_service.ts +++ b/x-pack/plugins/apm/server/routes/settings/agent_configuration/get_environments/get_existing_environments_for_service.ts @@ -5,30 +5,28 @@ * 2.0. */ -import { Setup } from '../../../../lib/helpers/setup_request'; import { SERVICE_NAME, SERVICE_ENVIRONMENT, } from '../../../../../common/elasticsearch_fieldnames'; import { ALL_OPTION_VALUE } from '../../../../../common/agent_configuration/all_option'; +import { APMInternalESClient } from '../../../../lib/helpers/create_es_client/create_internal_es_client'; export async function getExistingEnvironmentsForService({ serviceName, - setup, + internalESClient, size, }: { serviceName: string | undefined; - setup: Setup; + internalESClient: APMInternalESClient; size: number; }) { - const { internalClient, indices } = setup; - const bool = serviceName ? { filter: [{ term: { [SERVICE_NAME]: serviceName } }] } : { must_not: [{ exists: { field: SERVICE_NAME } }] }; const params = { - index: indices.apmAgentConfigurationIndex, + index: internalESClient.apmIndices.apmAgentConfigurationIndex, body: { size: 0, query: { bool }, @@ -44,7 +42,7 @@ export async function getExistingEnvironmentsForService({ }, }; - const resp = await internalClient.search( + const resp = await internalESClient.search( 'get_existing_environments_for_service', params ); diff --git a/x-pack/plugins/apm/server/routes/settings/agent_configuration/get_environments/index.ts b/x-pack/plugins/apm/server/routes/settings/agent_configuration/get_environments/index.ts index fb335fa231be1c..298d7d58173883 100644 --- a/x-pack/plugins/apm/server/routes/settings/agent_configuration/get_environments/index.ts +++ b/x-pack/plugins/apm/server/routes/settings/agent_configuration/get_environments/index.ts @@ -7,20 +7,20 @@ import { withApmSpan } from '../../../../utils/with_apm_span'; import { getAllEnvironments } from '../../../environments/get_all_environments'; -import { Setup } from '../../../../lib/helpers/setup_request'; import { getExistingEnvironmentsForService } from './get_existing_environments_for_service'; import { ALL_OPTION_VALUE } from '../../../../../common/agent_configuration/all_option'; import { APMEventClient } from '../../../../lib/helpers/create_es_client/create_apm_event_client'; +import { APMInternalESClient } from '../../../../lib/helpers/create_es_client/create_internal_es_client'; export async function getEnvironments({ serviceName, - setup, + internalESClient, apmEventClient, searchAggregatedTransactions, size, }: { serviceName: string | undefined; - setup: Setup; + internalESClient: APMInternalESClient; apmEventClient: APMEventClient; searchAggregatedTransactions: boolean; size: number; @@ -33,7 +33,11 @@ export async function getEnvironments({ apmEventClient, size, }), - getExistingEnvironmentsForService({ serviceName, setup, size }), + getExistingEnvironmentsForService({ + serviceName, + internalESClient, + size, + }), ]); return [ALL_OPTION_VALUE, ...allEnvironments].map((environment) => { diff --git a/x-pack/plugins/apm/server/routes/settings/agent_configuration/list_configurations.ts b/x-pack/plugins/apm/server/routes/settings/agent_configuration/list_configurations.ts index 416cb50c0a8014..7f6a5dd20bf0b8 100644 --- a/x-pack/plugins/apm/server/routes/settings/agent_configuration/list_configurations.ts +++ b/x-pack/plugins/apm/server/routes/settings/agent_configuration/list_configurations.ts @@ -5,25 +5,25 @@ * 2.0. */ -import { Setup } from '../../../lib/helpers/setup_request'; import { AgentConfiguration } from '../../../../common/agent_configuration/configuration_types'; import { convertConfigSettingsToString } from './convert_settings_to_string'; import { getConfigsAppliedToAgentsThroughFleet } from './get_config_applied_to_agent_through_fleet'; +import { APMInternalESClient } from '../../../lib/helpers/create_es_client/create_internal_es_client'; -export async function listConfigurations({ setup }: { setup: Setup }) { - const { internalClient, indices } = setup; - +export async function listConfigurations( + internalESClient: APMInternalESClient +) { const params = { - index: indices.apmAgentConfigurationIndex, + index: internalESClient.apmIndices.apmAgentConfigurationIndex, size: 200, }; const [agentConfigs, configsAppliedToAgentsThroughFleet] = await Promise.all([ - internalClient.search( + internalESClient.search( 'list_agent_configuration', params ), - getConfigsAppliedToAgentsThroughFleet({ setup }), + getConfigsAppliedToAgentsThroughFleet(internalESClient), ]); return agentConfigs.hits.hits diff --git a/x-pack/plugins/apm/server/routes/settings/agent_configuration/mark_applied_by_agent.ts b/x-pack/plugins/apm/server/routes/settings/agent_configuration/mark_applied_by_agent.ts index 78e0ce68624a64..c104b4743df91c 100644 --- a/x-pack/plugins/apm/server/routes/settings/agent_configuration/mark_applied_by_agent.ts +++ b/x-pack/plugins/apm/server/routes/settings/agent_configuration/mark_applied_by_agent.ts @@ -5,23 +5,21 @@ * 2.0. */ -import { Setup } from '../../../lib/helpers/setup_request'; import { AgentConfiguration } from '../../../../common/agent_configuration/configuration_types'; +import { APMInternalESClient } from '../../../lib/helpers/create_es_client/create_internal_es_client'; // We're not wrapping this function with a span as it is not blocking the request export async function markAppliedByAgent({ id, body, - setup, + internalESClient, }: { id: string; body: AgentConfiguration; - setup: Setup; + internalESClient: APMInternalESClient; }) { - const { internalClient, indices } = setup; - const params = { - index: indices.apmAgentConfigurationIndex, + index: internalESClient.apmIndices.apmAgentConfigurationIndex, id, // by specifying the `id` elasticsearch will do an "upsert" body: { ...body, @@ -29,7 +27,7 @@ export async function markAppliedByAgent({ }, }; - return internalClient.index( + return internalESClient.index( 'mark_configuration_applied_by_agent', params ); diff --git a/x-pack/plugins/apm/server/routes/settings/agent_configuration/queries.test.ts b/x-pack/plugins/apm/server/routes/settings/agent_configuration/queries.test.ts index 59c52c37601cd0..4d2fb4f768ec6a 100644 --- a/x-pack/plugins/apm/server/routes/settings/agent_configuration/queries.test.ts +++ b/x-pack/plugins/apm/server/routes/settings/agent_configuration/queries.test.ts @@ -24,11 +24,11 @@ describe('agent configuration queries', () => { describe('getAllEnvironments', () => { it('fetches all environments', async () => { - mock = await inspectSearchParams((setup, apmEventClient) => + mock = await inspectSearchParams(({ mockApmEventClient }) => getAllEnvironments({ searchAggregatedTransactions: false, serviceName: 'foo', - apmEventClient, + apmEventClient: mockApmEventClient, size: 50, }) ); @@ -39,10 +39,10 @@ describe('agent configuration queries', () => { describe('getExistingEnvironmentsForService', () => { it('fetches unavailable environments', async () => { - mock = await inspectSearchParams((setup) => + mock = await inspectSearchParams(({ mockInternalESClient }) => getExistingEnvironmentsForService({ serviceName: 'foo', - setup, + internalESClient: mockInternalESClient, size: 50, }) ); @@ -53,10 +53,8 @@ describe('agent configuration queries', () => { describe('listConfigurations', () => { it('fetches configurations', async () => { - mock = await inspectSearchParams((setup) => - listConfigurations({ - setup, - }) + mock = await inspectSearchParams(({ mockInternalESClient }) => + listConfigurations(mockInternalESClient) ); expect(mock.params).toMatchSnapshot(); @@ -65,12 +63,12 @@ describe('agent configuration queries', () => { describe('searchConfigurations', () => { it('fetches filtered configurations without an environment', async () => { - mock = await inspectSearchParams((setup) => + mock = await inspectSearchParams(({ mockInternalESClient }) => searchConfigurations({ service: { name: 'foo', }, - setup, + internalESClient: mockInternalESClient, }) ); @@ -78,13 +76,13 @@ describe('agent configuration queries', () => { }); it('fetches filtered configurations with an environment', async () => { - mock = await inspectSearchParams((setup) => + mock = await inspectSearchParams(({ mockInternalESClient }) => searchConfigurations({ service: { name: 'foo', environment: 'bar', }, - setup, + internalESClient: mockInternalESClient, }) ); @@ -94,10 +92,10 @@ describe('agent configuration queries', () => { describe('findExactConfiguration', () => { it('find configuration by service.name', async () => { - mock = await inspectSearchParams((setup) => + mock = await inspectSearchParams(({ mockInternalESClient }) => findExactConfiguration({ service: { name: 'foo' }, - setup, + internalESClient: mockInternalESClient, }) ); @@ -105,10 +103,10 @@ describe('agent configuration queries', () => { }); it('find configuration by service.environment', async () => { - mock = await inspectSearchParams((setup) => + mock = await inspectSearchParams(({ mockInternalESClient }) => findExactConfiguration({ service: { environment: 'bar' }, - setup, + internalESClient: mockInternalESClient, }) ); @@ -116,10 +114,10 @@ describe('agent configuration queries', () => { }); it('find configuration by service.name and service.environment', async () => { - mock = await inspectSearchParams((setup) => + mock = await inspectSearchParams(({ mockInternalESClient }) => findExactConfiguration({ service: { name: 'foo', environment: 'bar' }, - setup, + internalESClient: mockInternalESClient, }) ); diff --git a/x-pack/plugins/apm/server/routes/settings/agent_configuration/route.ts b/x-pack/plugins/apm/server/routes/settings/agent_configuration/route.ts index 77eb625c0b0167..d9fddf51dc7377 100644 --- a/x-pack/plugins/apm/server/routes/settings/agent_configuration/route.ts +++ b/x-pack/plugins/apm/server/routes/settings/agent_configuration/route.ts @@ -9,7 +9,6 @@ import * as t from 'io-ts'; import Boom from '@hapi/boom'; import { toBooleanRt } from '@kbn/io-ts-utils'; import { maxSuggestions } from '@kbn/observability-plugin/common'; -import { setupRequest } from '../../../lib/helpers/setup_request'; import { createOrUpdateConfiguration } from './create_or_update_configuration'; import { searchConfigurations } from './search_configurations'; import { findExactConfiguration } from './find_exact_configuration'; @@ -26,6 +25,7 @@ import { import { getSearchTransactionsEvents } from '../../../lib/helpers/transactions'; import { syncAgentConfigsToApmPackagePolicies } from '../../fleet/sync_agent_configs_to_apm_package_policies'; import { getApmEventClient } from '../../../lib/helpers/get_apm_event_client'; +import { createInternalESClient } from '../../../lib/helpers/create_es_client/create_internal_es_client'; // get list of configurations const agentConfigurationRoute = createApmServerRoute({ @@ -38,9 +38,15 @@ const agentConfigurationRoute = createApmServerRoute({ import('./../../../../common/agent_configuration/configuration_types').AgentConfiguration >; }> => { - const setup = await setupRequest(resources); + const { context, request, params, config } = resources; + const internalESClient = await createInternalESClient({ + context, + request, + debug: params.query._inspect, + config, + }); - const configurations = await listConfigurations({ setup }); + const configurations = await listConfigurations(internalESClient); return { configurations }; }, @@ -58,15 +64,22 @@ const getSingleAgentConfigurationRoute = createApmServerRoute({ ): Promise< import('./../../../../common/agent_configuration/configuration_types').AgentConfiguration > => { - const setup = await setupRequest(resources); - const { params, logger } = resources; - - const { name, environment } = params.query; - + const { params, logger, context, request, config } = resources; + const { name, environment, _inspect } = params.query; const service = { name, environment }; - const config = await findExactConfiguration({ service, setup }); - if (!config) { + const internalESClient = await createInternalESClient({ + context, + request, + debug: _inspect, + config, + }); + const exactConfig = await findExactConfiguration({ + service, + internalESClient, + }); + + if (!exactConfig) { logger.info( `Config was not found for ${service.name}/${service.environment}` ); @@ -74,7 +87,7 @@ const getSingleAgentConfigurationRoute = createApmServerRoute({ throw Boom.notFound(); } - return config; + return exactConfig; }, }); @@ -90,13 +103,28 @@ const deleteAgentConfigurationRoute = createApmServerRoute({ }), }), handler: async (resources): Promise<{ result: string }> => { - const setup = await setupRequest(resources); - const { params, logger, core, telemetryUsageCounter } = resources; - + const { + params, + logger, + core, + telemetryUsageCounter, + context, + request, + config, + } = resources; const { service } = params.body; - const config = await findExactConfiguration({ service, setup }); - if (!config) { + const internalESClient = await createInternalESClient({ + context, + request, + debug: params.query._inspect, + config, + }); + const exactConfig = await findExactConfiguration({ + service, + internalESClient, + }); + if (!exactConfig) { logger.info( `Config was not found for ${service.name}/${service.environment}` ); @@ -105,19 +133,19 @@ const deleteAgentConfigurationRoute = createApmServerRoute({ } logger.info( - `Deleting config ${service.name}/${service.environment} (${config.id})` + `Deleting config ${service.name}/${service.environment} (${exactConfig.id})` ); const deleteConfigurationResult = await deleteConfiguration({ - configurationId: config.id, - setup, + configurationId: exactConfig.id, + internalESClient, }); if (resources.plugins.fleet) { await syncAgentConfigsToApmPackagePolicies({ core, fleetPluginStart: await resources.plugins.fleet.start(), - setup, + internalESClient, telemetryUsageCounter, }); logger.info( @@ -140,41 +168,55 @@ const createOrUpdateAgentConfigurationRoute = createApmServerRoute({ t.type({ body: agentConfigurationIntakeRt }), ]), handler: async (resources): Promise => { - const setup = await setupRequest(resources); - const { params, logger, core, telemetryUsageCounter } = resources; + const { + params, + logger, + core, + telemetryUsageCounter, + context, + request, + config, + } = resources; const { body, query } = params; + const internalESClient = await createInternalESClient({ + context, + request, + debug: params.query._inspect, + config, + }); + // if the config already exists, it is fetched and updated // this is to avoid creating two configs with identical service params - const config = await findExactConfiguration({ + const exactConfig = await findExactConfiguration({ service: body.service, - setup, + internalESClient, }); // if the config exists ?overwrite=true is required - if (config && !query.overwrite) { + if (exactConfig && !query.overwrite) { throw Boom.badRequest( `A configuration already exists for "${body.service.name}/${body.service.environment}. Use ?overwrite=true to overwrite the existing configuration.` ); } logger.info( - `${config ? 'Updating' : 'Creating'} config ${body.service.name}/${ + `${exactConfig ? 'Updating' : 'Creating'} config ${body.service.name}/${ body.service.environment }` ); await createOrUpdateConfiguration({ - configurationId: config?.id, + configurationId: exactConfig?.id, configurationIntake: body, - setup, + internalESClient, }); if (resources.plugins.fleet) { await syncAgentConfigsToApmPackagePolicies({ core, fleetPluginStart: await resources.plugins.fleet.start(), - setup, + internalESClient, telemetryUsageCounter, }); logger.info( @@ -208,7 +250,7 @@ const agentConfigurationSearchRoute = createApmServerRoute({ > | null > => { - const { params, logger } = resources; + const { params, logger, context, config, request } = resources; const { service, @@ -216,13 +258,18 @@ const agentConfigurationSearchRoute = createApmServerRoute({ mark_as_applied_by_agent: markAsAppliedByAgent, } = params.body; - const setup = await setupRequest(resources); - const config = await searchConfigurations({ + const internalESClient = await createInternalESClient({ + context, + request, + debug: params.query._inspect, + config, + }); + const configuration = await searchConfigurations({ service, - setup, + internalESClient, }); - if (!config) { + if (!configuration) { logger.debug( `[Central configuration] Config was not found for ${service.name}/${service.environment}` ); @@ -233,24 +280,28 @@ const agentConfigurationSearchRoute = createApmServerRoute({ // It will be set to true of the etags match or if `markAsAppliedByAgent=true` // `markAsAppliedByAgent=true` means "force setting it to true regardless of etag". This is needed for Jaeger agent that doesn't have etags const willMarkAsApplied = - (markAsAppliedByAgent || etag === config._source.etag) && - !config._source.applied_by_agent; + (markAsAppliedByAgent || etag === configuration._source.etag) && + !configuration._source.applied_by_agent; logger.debug( `[Central configuration] Config was found for: service.name = ${service.name}, service.environment = ${service.environment}, etag (requested) = ${etag}, - etag (existing) = ${config._source.etag}, + etag (existing) = ${configuration._source.etag}, markAsAppliedByAgent = ${markAsAppliedByAgent}, willMarkAsApplied = ${willMarkAsApplied}` ); if (willMarkAsApplied) { - markAppliedByAgent({ id: config._id, body: config._source, setup }); + markAppliedByAgent({ + id: configuration._id, + body: configuration._source, + internalESClient, + }); } - return config; + return configuration; }, }); @@ -270,17 +321,22 @@ const listAgentConfigurationEnvironmentsRoute = createApmServerRoute({ ): Promise<{ environments: Array<{ name: string; alreadyConfigured: boolean }>; }> => { - const [setup, apmEventClient] = await Promise.all([ - setupRequest(resources), + const { context, request, params, config } = resources; + const [internalESClient, apmEventClient] = await Promise.all([ + createInternalESClient({ + context, + request, + debug: params.query._inspect, + config, + }), getApmEventClient(resources), ]); - const { context, params } = resources; const coreContext = await context.core; const { serviceName, start, end } = params.query; const searchAggregatedTransactions = await getSearchTransactionsEvents({ apmEventClient, - config: setup.config, + config, kuery: '', start, end, @@ -290,7 +346,7 @@ const listAgentConfigurationEnvironmentsRoute = createApmServerRoute({ ); const environments = await getEnvironments({ serviceName, - setup, + internalESClient, apmEventClient, searchAggregatedTransactions, size, diff --git a/x-pack/plugins/apm/server/routes/settings/agent_configuration/search_configurations.ts b/x-pack/plugins/apm/server/routes/settings/agent_configuration/search_configurations.ts index 665615d09db093..ea58a92eca7caf 100644 --- a/x-pack/plugins/apm/server/routes/settings/agent_configuration/search_configurations.ts +++ b/x-pack/plugins/apm/server/routes/settings/agent_configuration/search_configurations.ts @@ -10,19 +10,17 @@ import { SERVICE_NAME, SERVICE_ENVIRONMENT, } from '../../../../common/elasticsearch_fieldnames'; -import { Setup } from '../../../lib/helpers/setup_request'; import { AgentConfiguration } from '../../../../common/agent_configuration/configuration_types'; import { convertConfigSettingsToString } from './convert_settings_to_string'; +import { APMInternalESClient } from '../../../lib/helpers/create_es_client/create_internal_es_client'; export async function searchConfigurations({ service, - setup, + internalESClient, }: { service: AgentConfiguration['service']; - setup: Setup; + internalESClient: APMInternalESClient; }) { - const { internalClient, indices } = setup; - // In the following `constant_score` is being used to disable IDF calculation (where frequency of a term influences scoring). // Additionally a boost has been added to service.name to ensure it scores higher. // If there is tie between a config with a matching service.name and a config with a matching environment, the config that matches service.name wins @@ -49,7 +47,7 @@ export async function searchConfigurations({ : []; const params = { - index: indices.apmAgentConfigurationIndex, + index: internalESClient.apmIndices.apmAgentConfigurationIndex, body: { query: { bool: { @@ -69,7 +67,7 @@ export async function searchConfigurations({ }, }; - const resp = await internalClient.search( + const resp = await internalESClient.search( 'search_agent_configurations', params ); diff --git a/x-pack/plugins/apm/server/routes/settings/anomaly_detection/route.ts b/x-pack/plugins/apm/server/routes/settings/anomaly_detection/route.ts index 68b4ab7e55c03a..5d0825f55992d0 100644 --- a/x-pack/plugins/apm/server/routes/settings/anomaly_detection/route.ts +++ b/x-pack/plugins/apm/server/routes/settings/anomaly_detection/route.ts @@ -13,7 +13,7 @@ import { isActivePlatinumLicense } from '../../../../common/license_check'; import { ML_ERRORS } from '../../../../common/anomaly_detection'; import { createApmServerRoute } from '../../apm_routes/create_apm_server_route'; import { createAnomalyDetectionJobs } from '../../../lib/anomaly_detection/create_anomaly_detection_jobs'; -import { setupRequest } from '../../../lib/helpers/setup_request'; +import { getMlClient } from '../../../lib/helpers/get_ml_client'; import { getAllEnvironments } from '../../environments/get_all_environments'; import { getSearchTransactionsEvents } from '../../../lib/helpers/transactions'; import { notifyFeatureUsage } from '../../../feature'; @@ -21,7 +21,7 @@ import { updateToV3 } from './update_to_v3'; import { environmentStringRt } from '../../../../common/environment_rt'; import { getMlJobsWithAPMGroup } from '../../../lib/anomaly_detection/get_ml_jobs_with_apm_group'; import { getApmEventClient } from '../../../lib/helpers/get_apm_event_client'; - +import { getApmIndices } from '../apm_indices/get_apm_indices'; // get ML anomaly detection jobs for each environment const anomalyDetectionJobsRoute = createApmServerRoute({ endpoint: 'GET /internal/apm/settings/anomaly-detection/jobs', @@ -36,7 +36,7 @@ const anomalyDetectionJobsRoute = createApmServerRoute({ >; hasLegacyJobs: boolean; }> => { - const setup = await setupRequest(resources); + const mlClient = await getMlClient(resources); const { context } = resources; const licensingContext = await context.licensing; @@ -44,11 +44,11 @@ const anomalyDetectionJobsRoute = createApmServerRoute({ throw Boom.forbidden(ML_ERRORS.INVALID_LICENSE); } - if (!setup.ml) { + if (!mlClient) { throw Boom.forbidden(ML_ERRORS.ML_NOT_AVAILABLE); } - const jobs = await getMlJobsWithAPMGroup(setup.ml?.anomalyDetectors); + const jobs = await getMlJobsWithAPMGroup(mlClient?.anomalyDetectors); return { jobs, @@ -69,17 +69,29 @@ const createAnomalyDetectionJobsRoute = createApmServerRoute({ }), }), handler: async (resources): Promise<{ jobCreated: true }> => { - const { params, context, logger } = resources; + const { params, context, logger, config } = resources; const { environments } = params.body; const licensingContext = await context.licensing; - - const setup = await setupRequest(resources); + const coreContext = await context.core; + + const [mlClient, indices] = await Promise.all([ + getMlClient(resources), + getApmIndices({ + savedObjectsClient: coreContext.savedObjects.client, + config, + }), + ]); if (!isActivePlatinumLicense(licensingContext.license)) { throw Boom.forbidden(ML_ERRORS.INVALID_LICENSE); } - await createAnomalyDetectionJobs(setup, environments, logger); + await createAnomalyDetectionJobs({ + mlClient, + indices, + environments, + logger, + }); notifyFeatureUsage({ licensingPlugin: licensingContext, @@ -95,15 +107,12 @@ const anomalyDetectionEnvironmentsRoute = createApmServerRoute({ endpoint: 'GET /internal/apm/settings/anomaly-detection/environments', options: { tags: ['access:apm'] }, handler: async (resources): Promise<{ environments: string[] }> => { - const [setup, apmEventClient] = await Promise.all([ - setupRequest(resources), - getApmEventClient(resources), - ]); + const apmEventClient = await getApmEventClient(resources); const coreContext = await resources.context.core; const searchAggregatedTransactions = await getSearchTransactionsEvents({ apmEventClient, - config: setup.config, + config: resources.config, kuery: '', }); const size = await coreContext.uiSettings.client.get( @@ -132,20 +141,26 @@ const anomalyDetectionUpdateToV3Route = createApmServerRoute({ ], }, handler: async (resources): Promise<{ update: boolean }> => { - const [setup, esClient] = await Promise.all([ - setupRequest(resources), + const { config, context } = resources; + const coreContext = await context.core; + const [mlClient, esClient, indices] = await Promise.all([ + getMlClient(resources), resources.core .start() .then( (start): ElasticsearchClient => start.elasticsearch.client.asInternalUser ), + getApmIndices({ + config, + savedObjectsClient: coreContext.savedObjects.client, + }), ]); const { logger } = resources; return { - update: await updateToV3({ setup, logger, esClient }), + update: await updateToV3({ mlClient, logger, indices, esClient }), }; }, }); diff --git a/x-pack/plugins/apm/server/routes/settings/anomaly_detection/update_to_v3.ts b/x-pack/plugins/apm/server/routes/settings/anomaly_detection/update_to_v3.ts index 4c0cd118fab2bb..47339759d45dac 100644 --- a/x-pack/plugins/apm/server/routes/settings/anomaly_detection/update_to_v3.ts +++ b/x-pack/plugins/apm/server/routes/settings/anomaly_detection/update_to_v3.ts @@ -11,19 +11,22 @@ import { ElasticsearchClient } from '@kbn/core/server'; import { JOB_STATE } from '@kbn/ml-plugin/common'; import { createAnomalyDetectionJobs } from '../../../lib/anomaly_detection/create_anomaly_detection_jobs'; import { getAnomalyDetectionJobs } from '../../../lib/anomaly_detection/get_anomaly_detection_jobs'; -import { Setup } from '../../../lib/helpers/setup_request'; +import { MlClient } from '../../../lib/helpers/get_ml_client'; import { withApmSpan } from '../../../utils/with_apm_span'; +import { ApmIndicesConfig } from '../apm_indices/get_apm_indices'; export async function updateToV3({ logger, - setup, + indices, + mlClient, esClient, }: { logger: Logger; - setup: Setup; + mlClient?: MlClient; + indices: ApmIndicesConfig; esClient: ElasticsearchClient; }) { - const allJobs = await getAnomalyDetectionJobs(setup); + const allJobs = await getAnomalyDetectionJobs(mlClient); const v2Jobs = allJobs.filter((job) => job.version === 2); @@ -54,7 +57,7 @@ export async function updateToV3({ ); } - await createAnomalyDetectionJobs(setup, environments, logger); + await createAnomalyDetectionJobs({ mlClient, indices, environments, logger }); return true; } diff --git a/x-pack/plugins/apm/server/routes/settings/apm_indices/get_apm_indices.ts b/x-pack/plugins/apm/server/routes/settings/apm_indices/get_apm_indices.ts index bebb92d6b64453..f80c81d0bd0ef2 100644 --- a/x-pack/plugins/apm/server/routes/settings/apm_indices/get_apm_indices.ts +++ b/x-pack/plugins/apm/server/routes/settings/apm_indices/get_apm_indices.ts @@ -6,7 +6,6 @@ */ import { SavedObjectsClient } from '@kbn/core/server'; -import { ApmIndicesConfig } from '@kbn/observability-plugin/common/typings'; import { APM_INDEX_SETTINGS_SAVED_OBJECT_TYPE, APM_INDEX_SETTINGS_SAVED_OBJECT_ID, @@ -16,7 +15,16 @@ import { APMRouteHandlerResources } from '../../typings'; import { withApmSpan } from '../../../utils/with_apm_span'; import { APMIndices } from '../../../saved_objects/apm_indices'; -export type { ApmIndicesConfig }; +export type ApmIndicesConfig = Readonly<{ + sourcemap: string; + error: string; + onboarding: string; + span: string; + transaction: string; + metric: string; + apmAgentConfigurationIndex: string; + apmCustomLinkIndex: string; +}>; type ISavedObjectsClient = Pick; diff --git a/x-pack/plugins/apm/server/routes/settings/custom_link/__snapshots__/list_custom_links.test.ts.snap b/x-pack/plugins/apm/server/routes/settings/custom_link/__snapshots__/list_custom_links.test.ts.snap index bb8f6dcb22902e..d05f0bc081eba6 100644 --- a/x-pack/plugins/apm/server/routes/settings/custom_link/__snapshots__/list_custom_links.test.ts.snap +++ b/x-pack/plugins/apm/server/routes/settings/custom_link/__snapshots__/list_custom_links.test.ts.snap @@ -1,90 +1,5 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`List Custom Links fetches all custom links 1`] = ` -Object { - "body": Object { - "query": Object { - "bool": Object { - "filter": Array [], - }, - }, - "sort": Array [ - Object { - "label.keyword": Object { - "order": "asc", - }, - }, - ], - }, - "index": "myIndex", - "size": 500, -} -`; +exports[`List Custom Links fetches all custom links 1`] = `undefined`; -exports[`List Custom Links filters custom links 1`] = ` -Object { - "body": Object { - "query": Object { - "bool": Object { - "filter": Array [ - Object { - "bool": Object { - "minimum_should_match": 1, - "should": Array [ - Object { - "term": Object { - "service.name": "foo", - }, - }, - Object { - "bool": Object { - "must_not": Array [ - Object { - "exists": Object { - "field": "service.name", - }, - }, - ], - }, - }, - ], - }, - }, - Object { - "bool": Object { - "minimum_should_match": 1, - "should": Array [ - Object { - "term": Object { - "transaction.name": "bar", - }, - }, - Object { - "bool": Object { - "must_not": Array [ - Object { - "exists": Object { - "field": "transaction.name", - }, - }, - ], - }, - }, - ], - }, - }, - ], - }, - }, - "sort": Array [ - Object { - "label.keyword": Object { - "order": "asc", - }, - }, - ], - }, - "index": "myIndex", - "size": 500, -} -`; +exports[`List Custom Links filters custom links 1`] = `undefined`; diff --git a/x-pack/plugins/apm/server/routes/settings/custom_link/create_or_update_custom_link.test.ts b/x-pack/plugins/apm/server/routes/settings/custom_link/create_or_update_custom_link.test.ts index 7690210ac01234..f93e1f87b7360b 100644 --- a/x-pack/plugins/apm/server/routes/settings/custom_link/create_or_update_custom_link.test.ts +++ b/x-pack/plugins/apm/server/routes/settings/custom_link/create_or_update_custom_link.test.ts @@ -5,21 +5,23 @@ * 2.0. */ -import { Setup } from '../../../lib/helpers/setup_request'; import { mockNow } from '../../../utils/test_helpers'; import { CustomLink } from '../../../../common/custom_link/custom_link_types'; import { createOrUpdateCustomLink } from './create_or_update_custom_link'; +import { ApmIndicesConfig } from '../apm_indices/get_apm_indices'; +import { APMInternalESClient } from '../../../lib/helpers/create_es_client/create_internal_es_client'; describe('Create or Update Custom link', () => { const internalClientIndexMock = jest.fn(); - const mockedSetup = { - internalClient: { - index: internalClientIndexMock, - }, - indices: { - apmCustomLinkIndex: 'apmCustomLinkIndex', - }, - } as unknown as Setup; + + const mockIndices = { + apmCustomLinkIndex: 'apmCustomLinkIndex', + } as unknown as ApmIndicesConfig; + + const mockInternalESClient = { + apmIndices: mockIndices, + index: internalClientIndexMock, + } as unknown as APMInternalESClient; const customLink = { label: 'foo', @@ -38,7 +40,10 @@ describe('Create or Update Custom link', () => { }); it('creates a new custom link', () => { - createOrUpdateCustomLink({ customLink, setup: mockedSetup }); + createOrUpdateCustomLink({ + customLink, + internalESClient: mockInternalESClient, + }); expect(internalClientIndexMock).toHaveBeenCalledWith( 'create_or_update_custom_link', { @@ -58,7 +63,7 @@ describe('Create or Update Custom link', () => { createOrUpdateCustomLink({ customLinkId: 'bar', customLink, - setup: mockedSetup, + internalESClient: mockInternalESClient, }); expect(internalClientIndexMock).toHaveBeenCalledWith( 'create_or_update_custom_link', diff --git a/x-pack/plugins/apm/server/routes/settings/custom_link/create_or_update_custom_link.ts b/x-pack/plugins/apm/server/routes/settings/custom_link/create_or_update_custom_link.ts index 64313909367632..0eaada68ba9b05 100644 --- a/x-pack/plugins/apm/server/routes/settings/custom_link/create_or_update_custom_link.ts +++ b/x-pack/plugins/apm/server/routes/settings/custom_link/create_or_update_custom_link.ts @@ -9,24 +9,24 @@ import { CustomLink, CustomLinkES, } from '../../../../common/custom_link/custom_link_types'; -import { Setup } from '../../../lib/helpers/setup_request'; import { toESFormat } from './helper'; -import { APMIndexDocumentParams } from '../../../lib/helpers/create_es_client/create_internal_es_client'; +import { + APMIndexDocumentParams, + APMInternalESClient, +} from '../../../lib/helpers/create_es_client/create_internal_es_client'; export function createOrUpdateCustomLink({ customLinkId, customLink, - setup, + internalESClient, }: { customLinkId?: string; customLink: Omit; - setup: Setup; + internalESClient: APMInternalESClient; }) { - const { internalClient, indices } = setup; - const params: APMIndexDocumentParams = { refresh: true, - index: indices.apmCustomLinkIndex, + index: internalESClient.apmIndices.apmCustomLinkIndex, body: { '@timestamp': Date.now(), ...toESFormat(customLink), @@ -38,5 +38,5 @@ export function createOrUpdateCustomLink({ params.id = customLinkId; } - return internalClient.index('create_or_update_custom_link', params); + return internalESClient.index('create_or_update_custom_link', params); } diff --git a/x-pack/plugins/apm/server/routes/settings/custom_link/delete_custom_link.ts b/x-pack/plugins/apm/server/routes/settings/custom_link/delete_custom_link.ts index 6366bbcfd9f070..53f6b830aa44a6 100644 --- a/x-pack/plugins/apm/server/routes/settings/custom_link/delete_custom_link.ts +++ b/x-pack/plugins/apm/server/routes/settings/custom_link/delete_custom_link.ts @@ -5,22 +5,20 @@ * 2.0. */ -import { Setup } from '../../../lib/helpers/setup_request'; +import { APMInternalESClient } from '../../../lib/helpers/create_es_client/create_internal_es_client'; export function deleteCustomLink({ customLinkId, - setup, + internalESClient, }: { customLinkId: string; - setup: Setup; + internalESClient: APMInternalESClient; }) { - const { internalClient, indices } = setup; - const params = { refresh: 'wait_for' as const, - index: indices.apmCustomLinkIndex, + index: internalESClient.apmIndices.apmCustomLinkIndex, id: customLinkId, }; - return internalClient.delete('delete_custom_link', params); + return internalESClient.delete('delete_custom_link', params); } diff --git a/x-pack/plugins/apm/server/routes/settings/custom_link/get_transaction.test.ts b/x-pack/plugins/apm/server/routes/settings/custom_link/get_transaction.test.ts index afbe4c1d7bbe49..1d3639bbb9f11d 100644 --- a/x-pack/plugins/apm/server/routes/settings/custom_link/get_transaction.test.ts +++ b/x-pack/plugins/apm/server/routes/settings/custom_link/get_transaction.test.ts @@ -16,23 +16,22 @@ import { SERVICE_ENVIRONMENT, TRANSACTION_NAME, } from '../../../../common/elasticsearch_fieldnames'; -import { APMEventClient } from '../../../lib/helpers/create_es_client/create_apm_event_client'; describe('custom link get transaction', () => { let mock: SearchParamsMock; it('fetches without filter', async () => { - mock = await inspectSearchParams((setup, apmEventClient) => + mock = await inspectSearchParams(({ mockApmEventClient }) => getTransaction({ - apmEventClient: apmEventClient as unknown as APMEventClient, + apmEventClient: mockApmEventClient, }) ); expect(mock.params).toMatchSnapshot(); }); it('fetches with all filter', async () => { - mock = await inspectSearchParams((setup, apmEventClient) => + mock = await inspectSearchParams(({ mockApmEventClient }) => getTransaction({ - apmEventClient: apmEventClient as unknown as APMEventClient, + apmEventClient: mockApmEventClient, filters: { [SERVICE_NAME]: 'foo', [SERVICE_ENVIRONMENT]: 'bar', diff --git a/x-pack/plugins/apm/server/routes/settings/custom_link/list_custom_links.test.ts b/x-pack/plugins/apm/server/routes/settings/custom_link/list_custom_links.test.ts index 8ea4061e46cf2d..469b6f8c356b1f 100644 --- a/x-pack/plugins/apm/server/routes/settings/custom_link/list_custom_links.test.ts +++ b/x-pack/plugins/apm/server/routes/settings/custom_link/list_custom_links.test.ts @@ -10,7 +10,6 @@ import { inspectSearchParams, SearchParamsMock, } from '../../../utils/test_helpers'; -import { Setup } from '../../../lib/helpers/setup_request'; import { SERVICE_NAME, TRANSACTION_NAME, @@ -20,10 +19,8 @@ describe('List Custom Links', () => { let mock: SearchParamsMock; it('fetches all custom links', async () => { - mock = await inspectSearchParams((setup) => - listCustomLinks({ - setup: setup as unknown as Setup, - }) + mock = await inspectSearchParams(({ mockInternalESClient }) => + listCustomLinks({ internalESClient: mockInternalESClient }) ); expect(mock.params).toMatchSnapshot(); @@ -34,10 +31,10 @@ describe('List Custom Links', () => { [SERVICE_NAME]: 'foo', [TRANSACTION_NAME]: 'bar', }; - mock = await inspectSearchParams((setup) => + mock = await inspectSearchParams(({ mockInternalESClient }) => listCustomLinks({ filters, - setup: setup as unknown as Setup, + internalESClient: mockInternalESClient, }) ); diff --git a/x-pack/plugins/apm/server/routes/settings/custom_link/list_custom_links.ts b/x-pack/plugins/apm/server/routes/settings/custom_link/list_custom_links.ts index a64d958dabd09c..c435767ffd4242 100644 --- a/x-pack/plugins/apm/server/routes/settings/custom_link/list_custom_links.ts +++ b/x-pack/plugins/apm/server/routes/settings/custom_link/list_custom_links.ts @@ -11,18 +11,17 @@ import { CustomLink, CustomLinkES, } from '../../../../common/custom_link/custom_link_types'; -import { Setup } from '../../../lib/helpers/setup_request'; import { fromESFormat } from './helper'; import { filterOptionsRt } from './custom_link_types'; +import { APMInternalESClient } from '../../../lib/helpers/create_es_client/create_internal_es_client'; export async function listCustomLinks({ - setup, + internalESClient, filters = {}, }: { - setup: Setup; + internalESClient: APMInternalESClient; filters?: t.TypeOf; }): Promise { - const { internalClient, indices } = setup; const esFilters = Object.entries(filters).map(([key, value]) => { return { bool: { @@ -36,7 +35,7 @@ export async function listCustomLinks({ }); const params = { - index: indices.apmCustomLinkIndex, + index: internalESClient.apmIndices.apmCustomLinkIndex, size: 500, body: { query: { @@ -53,7 +52,7 @@ export async function listCustomLinks({ ], }, }; - const resp = await internalClient.search( + const resp = await internalESClient.search( 'list_custom_links', params ); diff --git a/x-pack/plugins/apm/server/routes/settings/custom_link/route.ts b/x-pack/plugins/apm/server/routes/settings/custom_link/route.ts index 60d2642acfae3a..87087409e32065 100644 --- a/x-pack/plugins/apm/server/routes/settings/custom_link/route.ts +++ b/x-pack/plugins/apm/server/routes/settings/custom_link/route.ts @@ -12,7 +12,6 @@ import { isActiveGoldLicense } from '../../../../common/license_check'; import { INVALID_LICENSE } from '../../../../common/custom_link'; import { FILTER_OPTIONS } from '../../../../common/custom_link/custom_link_filter_options'; import { notifyFeatureUsage } from '../../../feature'; -import { setupRequest } from '../../../lib/helpers/setup_request'; import { createOrUpdateCustomLink } from './create_or_update_custom_link'; import { filterOptionsRt, payloadRt } from './custom_link_types'; import { deleteCustomLink } from './delete_custom_link'; @@ -20,6 +19,7 @@ import { getTransaction } from './get_transaction'; import { listCustomLinks } from './list_custom_links'; import { createApmServerRoute } from '../../apm_routes/create_apm_server_route'; import { getApmEventClient } from '../../../lib/helpers/get_apm_event_client'; +import { createInternalESClient } from '../../../lib/helpers/create_es_client/create_internal_es_client'; const customLinkTransactionRoute = createApmServerRoute({ endpoint: 'GET /internal/apm/settings/custom_links/transaction', @@ -54,19 +54,28 @@ const listCustomLinksRoute = createApmServerRoute({ import('./../../../../common/custom_link/custom_link_types').CustomLink >; }> => { - const { context, params } = resources; + const { context, params, request, config } = resources; const licensingContext = await context.licensing; if (!isActiveGoldLicense(licensingContext.license)) { throw Boom.forbidden(INVALID_LICENSE); } - const setup = await setupRequest(resources); const { query } = params; + const internalESClient = await createInternalESClient({ + context, + request, + debug: resources.params.query._inspect, + config, + }); + // picks only the items listed in FILTER_OPTIONS const filters = pick(query, FILTER_OPTIONS); - const customLinks = await listCustomLinks({ setup, filters }); + const customLinks = await listCustomLinks({ + internalESClient, + filters, + }); return { customLinks }; }, }); @@ -78,13 +87,19 @@ const createCustomLinkRoute = createApmServerRoute({ }), options: { tags: ['access:apm', 'access:apm_write'] }, handler: async (resources): Promise => { - const { context, params } = resources; + const { context, params, request, config } = resources; const licensingContext = await context.licensing; if (!isActiveGoldLicense(licensingContext.license)) { throw Boom.forbidden(INVALID_LICENSE); } - const setup = await setupRequest(resources); + + const internalESClient = await createInternalESClient({ + context, + request, + debug: resources.params.query._inspect, + config, + }); const customLink = params.body; notifyFeatureUsage({ @@ -92,7 +107,7 @@ const createCustomLinkRoute = createApmServerRoute({ featureName: 'customLinks', }); - await createOrUpdateCustomLink({ customLink, setup }); + await createOrUpdateCustomLink({ customLink, internalESClient }); }, }); @@ -108,13 +123,19 @@ const updateCustomLinkRoute = createApmServerRoute({ tags: ['access:apm', 'access:apm_write'], }, handler: async (resources): Promise => { - const { params, context } = resources; + const { params, context, request, config } = resources; const licensingContext = await context.licensing; if (!isActiveGoldLicense(licensingContext.license)) { throw Boom.forbidden(INVALID_LICENSE); } - const setup = await setupRequest(resources); + + const internalESClient = await createInternalESClient({ + context, + request, + debug: resources.params.query._inspect, + config, + }); const { id } = params.path; const customLink = params.body; @@ -122,7 +143,7 @@ const updateCustomLinkRoute = createApmServerRoute({ await createOrUpdateCustomLink({ customLinkId: id, customLink, - setup, + internalESClient, }); }, }); @@ -138,17 +159,23 @@ const deleteCustomLinkRoute = createApmServerRoute({ tags: ['access:apm', 'access:apm_write'], }, handler: async (resources): Promise<{ result: string }> => { - const { context, params } = resources; + const { context, params, request, config } = resources; const licensingContext = await context.licensing; if (!isActiveGoldLicense(licensingContext.license)) { throw Boom.forbidden(INVALID_LICENSE); } - const setup = await setupRequest(resources); + + const internalESClient = await createInternalESClient({ + context, + request, + debug: resources.params.query._inspect, + config, + }); const { id } = params.path; const res = await deleteCustomLink({ customLinkId: id, - setup, + internalESClient, }); return res; }, diff --git a/x-pack/plugins/apm/server/routes/storage_explorer/get_service_statistics.ts b/x-pack/plugins/apm/server/routes/storage_explorer/get_service_statistics.ts index 95a74d13c13136..25a3ad5431fa55 100644 --- a/x-pack/plugins/apm/server/routes/storage_explorer/get_service_statistics.ts +++ b/x-pack/plugins/apm/server/routes/storage_explorer/get_service_statistics.ts @@ -11,7 +11,6 @@ import { } from '@kbn/observability-plugin/server'; import { ProcessorEvent } from '@kbn/observability-plugin/common'; import { ApmPluginRequestHandlerContext } from '../typings'; -import { Setup } from '../../lib/helpers/setup_request'; import { IndexLifecyclePhaseSelectOption, indexLifeCyclePhaseToDataTier, @@ -36,7 +35,6 @@ import { RandomSampler } from '../../lib/helpers/get_random_sampler'; import { APMEventClient } from '../../lib/helpers/create_es_client/create_apm_event_client'; async function getMainServiceStatistics({ - setup, apmEventClient, context, indexLifecyclePhase, @@ -46,7 +44,6 @@ async function getMainServiceStatistics({ environment, kuery, }: { - setup: Setup; apmEventClient: APMEventClient; context: ApmPluginRequestHandlerContext; indexLifecyclePhase: IndexLifecyclePhaseSelectOption; @@ -57,7 +54,7 @@ async function getMainServiceStatistics({ kuery: string; }) { const [{ indices: allIndicesStats }, response] = await Promise.all([ - getTotalIndicesStats({ context, setup }), + getTotalIndicesStats({ context, apmEventClient }), apmEventClient.search('get_main_service_statistics', { apm: { events: [ @@ -176,7 +173,6 @@ async function getMainServiceStatistics({ } export async function getServiceStatistics({ - setup, apmEventClient, context, indexLifecyclePhase, @@ -187,7 +183,6 @@ export async function getServiceStatistics({ kuery, searchAggregatedTransactions, }: { - setup: Setup; apmEventClient: APMEventClient; context: ApmPluginRequestHandlerContext; indexLifecyclePhase: IndexLifecyclePhaseSelectOption; @@ -201,7 +196,6 @@ export async function getServiceStatistics({ const [docCountPerProcessorEvent, totalTransactionsPerService] = await Promise.all([ getMainServiceStatistics({ - setup, apmEventClient, context, indexLifecyclePhase, diff --git a/x-pack/plugins/apm/server/routes/storage_explorer/get_size_timeseries.ts b/x-pack/plugins/apm/server/routes/storage_explorer/get_size_timeseries.ts index 2337243a64123b..56c7085a1bdc44 100644 --- a/x-pack/plugins/apm/server/routes/storage_explorer/get_size_timeseries.ts +++ b/x-pack/plugins/apm/server/routes/storage_explorer/get_size_timeseries.ts @@ -17,7 +17,6 @@ import { INDEX, } from '../../../common/elasticsearch_fieldnames'; import { environmentQuery } from '../../../common/utils/environment_query'; -import { Setup } from '../../lib/helpers/setup_request'; import { getBucketSizeForAggregatedTransactions } from '../../lib/helpers/get_bucket_size_for_aggregated_transactions'; import { IndexLifecyclePhaseSelectOption, @@ -34,7 +33,6 @@ import { APMEventClient } from '../../lib/helpers/create_es_client/create_apm_ev export async function getSizeTimeseries({ environment, kuery, - setup, apmEventClient, searchAggregatedTransactions, start, @@ -45,7 +43,6 @@ export async function getSizeTimeseries({ }: { environment: string; kuery: string; - setup: Setup; apmEventClient: APMEventClient; searchAggregatedTransactions: boolean; start: number; @@ -61,7 +58,7 @@ export async function getSizeTimeseries({ }); const [{ indices: allIndicesStats }, res] = await Promise.all([ - getTotalIndicesStats({ setup, context }), + getTotalIndicesStats({ apmEventClient, context }), apmEventClient.search('get_storage_timeseries', { apm: { events: [ diff --git a/x-pack/plugins/apm/server/routes/storage_explorer/get_storage_details_per_service.ts b/x-pack/plugins/apm/server/routes/storage_explorer/get_storage_details_per_service.ts index ae6b0a82ca0e74..5ed230235f4087 100644 --- a/x-pack/plugins/apm/server/routes/storage_explorer/get_storage_details_per_service.ts +++ b/x-pack/plugins/apm/server/routes/storage_explorer/get_storage_details_per_service.ts @@ -11,7 +11,6 @@ import { rangeQuery, } from '@kbn/observability-plugin/server'; import { ProcessorEvent } from '@kbn/observability-plugin/common'; -import { Setup } from '../../lib/helpers/setup_request'; import { PROCESSOR_EVENT, SERVICE_NAME, @@ -34,7 +33,6 @@ import { RandomSampler } from '../../lib/helpers/get_random_sampler'; import { APMEventClient } from '../../lib/helpers/create_es_client/create_apm_event_client'; export async function getStorageDetailsPerProcessorEvent({ - setup, apmEventClient, context, indexLifecyclePhase, @@ -45,7 +43,6 @@ export async function getStorageDetailsPerProcessorEvent({ kuery, serviceName, }: { - setup: Setup; apmEventClient: APMEventClient; context: ApmPluginRequestHandlerContext; indexLifecyclePhase: IndexLifecyclePhaseSelectOption; @@ -57,8 +54,8 @@ export async function getStorageDetailsPerProcessorEvent({ serviceName: string; }) { const [{ indices: allIndicesStats }, response] = await Promise.all([ - getTotalIndicesStats({ setup, context }), - apmEventClient.search('get_storage_details_per_service', { + getTotalIndicesStats({ apmEventClient, context }), + apmEventClient.search('get_storage_details_per_processor_event', { apm: { events: [ ProcessorEvent.span, @@ -158,7 +155,6 @@ export async function getStorageDetailsPerProcessorEvent({ export async function getStorageDetailsPerIndex({ apmEventClient, - setup, context, indexLifecyclePhase, randomSampler, @@ -169,7 +165,6 @@ export async function getStorageDetailsPerIndex({ serviceName, }: { apmEventClient: APMEventClient; - setup: Setup; context: ApmPluginRequestHandlerContext; indexLifecyclePhase: IndexLifecyclePhaseSelectOption; randomSampler: RandomSampler; @@ -185,9 +180,9 @@ export async function getStorageDetailsPerIndex({ indicesInfo, response, ] = await Promise.all([ - getTotalIndicesStats({ setup, context }), - getIndicesLifecycleStatus({ setup, context }), - getIndicesInfo({ setup, context }), + getTotalIndicesStats({ apmEventClient, context }), + getIndicesLifecycleStatus({ apmEventClient, context }), + getIndicesInfo({ apmEventClient, context }), apmEventClient.search('get_storage_details_per_index', { apm: { events: [ diff --git a/x-pack/plugins/apm/server/routes/storage_explorer/get_summary_statistics.ts b/x-pack/plugins/apm/server/routes/storage_explorer/get_summary_statistics.ts index 2bb471751385c6..23f2146b18060a 100644 --- a/x-pack/plugins/apm/server/routes/storage_explorer/get_summary_statistics.ts +++ b/x-pack/plugins/apm/server/routes/storage_explorer/get_summary_statistics.ts @@ -16,7 +16,6 @@ import { getEstimatedSizeForDocumentsInIndex, getApmDiskSpacedUsedPct, } from './indices_stats_helpers'; -import { Setup } from '../../lib/helpers/setup_request'; import { ApmPluginRequestHandlerContext } from '../typings'; import { IndexLifecyclePhaseSelectOption, @@ -101,7 +100,6 @@ export async function getTracesPerMinute({ } export async function getMainSummaryStats({ - setup, apmEventClient, context, indexLifecyclePhase, @@ -111,7 +109,6 @@ export async function getMainSummaryStats({ environment, kuery, }: { - setup: Setup; apmEventClient: APMEventClient; context: ApmPluginRequestHandlerContext; indexLifecyclePhase: IndexLifecyclePhaseSelectOption; @@ -122,7 +119,7 @@ export async function getMainSummaryStats({ kuery: string; }) { const [totalIndicesStats, totalDiskSpace, res] = await Promise.all([ - getTotalIndicesStats({ context, setup }), + getTotalIndicesStats({ context, apmEventClient }), getApmDiskSpacedUsedPct(context), apmEventClient.search('get_storage_explorer_main_summary_stats', { apm: { diff --git a/x-pack/plugins/apm/server/routes/storage_explorer/has_storage_explorer_privileges.ts b/x-pack/plugins/apm/server/routes/storage_explorer/has_storage_explorer_privileges.ts index e69c3f33f8d9d6..d30bf8402fa4f9 100644 --- a/x-pack/plugins/apm/server/routes/storage_explorer/has_storage_explorer_privileges.ts +++ b/x-pack/plugins/apm/server/routes/storage_explorer/has_storage_explorer_privileges.ts @@ -8,18 +8,18 @@ import { every } from 'lodash'; import { uniq } from 'lodash'; import { ApmPluginRequestHandlerContext } from '../typings'; -import { Setup } from '../../lib/helpers/setup_request'; +import { APMEventClient } from '../../lib/helpers/create_es_client/create_apm_event_client'; export async function hasStorageExplorerPrivileges({ context, - setup, + apmEventClient, }: { context: ApmPluginRequestHandlerContext; - setup: Setup; + apmEventClient: APMEventClient; }) { const { indices: { transaction, span, metric, error }, - } = setup; + } = apmEventClient; const names = uniq( [transaction, span, metric, error].flatMap((indexPatternString) => diff --git a/x-pack/plugins/apm/server/routes/storage_explorer/indices_stats_helpers.ts b/x-pack/plugins/apm/server/routes/storage_explorer/indices_stats_helpers.ts index d7ce952b2fd508..3b9ed12e56f81f 100644 --- a/x-pack/plugins/apm/server/routes/storage_explorer/indices_stats_helpers.ts +++ b/x-pack/plugins/apm/server/routes/storage_explorer/indices_stats_helpers.ts @@ -6,17 +6,17 @@ */ import { uniq, values, sumBy } from 'lodash'; import { IndicesStatsIndicesStats } from '@elastic/elasticsearch/lib/api/types'; -import { Setup } from '../../lib/helpers/setup_request'; import { ApmPluginRequestHandlerContext } from '../typings'; +import { APMEventClient } from '../../lib/helpers/create_es_client/create_apm_event_client'; export async function getTotalIndicesStats({ context, - setup, + apmEventClient, }: { context: ApmPluginRequestHandlerContext; - setup: Setup; + apmEventClient: APMEventClient; }) { - const index = getApmIndicesCombined(setup); + const index = getApmIndicesCombined(apmEventClient); const esClient = (await context.core).elasticsearch.client; const totalStats = await esClient.asCurrentUser.indices.stats({ index }); return totalStats; @@ -61,12 +61,12 @@ export async function getApmDiskSpacedUsedPct( export async function getIndicesLifecycleStatus({ context, - setup, + apmEventClient, }: { context: ApmPluginRequestHandlerContext; - setup: Setup; + apmEventClient: APMEventClient; }) { - const index = getApmIndicesCombined(setup); + const index = getApmIndicesCombined(apmEventClient); const esClient = (await context.core).elasticsearch.client; const { indices } = await esClient.asCurrentUser.ilm.explainLifecycle({ index, @@ -78,12 +78,12 @@ export async function getIndicesLifecycleStatus({ export async function getIndicesInfo({ context, - setup, + apmEventClient, }: { context: ApmPluginRequestHandlerContext; - setup: Setup; + apmEventClient: APMEventClient; }) { - const index = getApmIndicesCombined(setup); + const index = getApmIndicesCombined(apmEventClient); const esClient = (await context.core).elasticsearch.client; const indicesInfo = await esClient.asCurrentUser.indices.get({ index, @@ -98,10 +98,10 @@ export async function getIndicesInfo({ return indicesInfo; } -export function getApmIndicesCombined(setup: Setup) { +export function getApmIndicesCombined(apmEventClient: APMEventClient) { const { indices: { transaction, span, metric, error }, - } = setup; + } = apmEventClient; return uniq([transaction, span, metric, error]).join(); } diff --git a/x-pack/plugins/apm/server/routes/storage_explorer/is_cross_cluster_search.test.ts b/x-pack/plugins/apm/server/routes/storage_explorer/is_cross_cluster_search.test.ts index d24ef35158170b..d4604df07e3f6c 100644 --- a/x-pack/plugins/apm/server/routes/storage_explorer/is_cross_cluster_search.test.ts +++ b/x-pack/plugins/apm/server/routes/storage_explorer/is_cross_cluster_search.test.ts @@ -5,39 +5,39 @@ * 2.0. */ -import { Setup } from '../../lib/helpers/setup_request'; import { isCrossClusterSearch } from './is_cross_cluster_search'; import { ApmIndicesConfig } from '@kbn/observability-plugin/common/typings'; +import { APMEventClient } from '../../lib/helpers/create_es_client/create_apm_event_client'; describe('isCrossClusterSearch', () => { it('returns false when there are no remote clusters in APM indices', () => { - const mockedSetup = { + const mockApmEventClient = { indices: { transaction: 'traces-apm*', span: 'traces-apm*', metric: 'metrics-apm*', error: 'logs-apm*', } as ApmIndicesConfig, - } as unknown as Setup; + } as unknown as APMEventClient; - expect(isCrossClusterSearch(mockedSetup)).toBe(false); + expect(isCrossClusterSearch(mockApmEventClient)).toBe(false); }); it('returns false when there are multiple indices per type and no remote clusters in APM indices', () => { - const mockedSetup = { + const mockApmEventClient = { indices: { transaction: 'traces-apm*,test-apm*', span: 'traces-apm*,test-apm*', metric: 'metrics-apm*,test-apm*', error: 'logs-apm*,test-apm*', } as ApmIndicesConfig, - } as unknown as Setup; + } as unknown as APMEventClient; - expect(isCrossClusterSearch(mockedSetup)).toBe(false); + expect(isCrossClusterSearch(mockApmEventClient)).toBe(false); }); it('returns false when there are remote clusters in onboarding and sourcemap indices', () => { - const mockedSetup = { + const mockApmEventClient = { indices: { transaction: '', span: '', @@ -46,60 +46,60 @@ describe('isCrossClusterSearch', () => { onboarding: 'apm-*,remote_cluster:apm-*', sourcemap: 'apm-*,remote_cluster:apm-*', } as ApmIndicesConfig, - } as unknown as Setup; + } as unknown as APMEventClient; - expect(isCrossClusterSearch(mockedSetup)).toBe(false); + expect(isCrossClusterSearch(mockApmEventClient)).toBe(false); }); it('returns true when there are remote clusters in transaction indices', () => { - const mockedSetup = { + const mockApmEventClient = { indices: { transaction: 'traces-apm*,remote_cluster:traces-apm*', span: '', metric: '', error: '', } as ApmIndicesConfig, - } as unknown as Setup; + } as unknown as APMEventClient; - expect(isCrossClusterSearch(mockedSetup)).toBe(true); + expect(isCrossClusterSearch(mockApmEventClient)).toBe(true); }); it('returns true when there are remote clusters in span indices', () => { - const mockedSetup = { + const mockApmEventClient = { indices: { transaction: '', span: 'traces-apm*,remote_cluster:traces-apm*', metric: '', error: '', } as ApmIndicesConfig, - } as unknown as Setup; + } as unknown as APMEventClient; - expect(isCrossClusterSearch(mockedSetup)).toBe(true); + expect(isCrossClusterSearch(mockApmEventClient)).toBe(true); }); it('returns true when there are remote clusters in metrics indices', () => { - const mockedSetup = { + const mockApmEventClient = { indices: { transaction: '', span: '', metric: 'metrics-apm*,remote_cluster:metrics-apm*', error: '', } as ApmIndicesConfig, - } as unknown as Setup; + } as unknown as APMEventClient; - expect(isCrossClusterSearch(mockedSetup)).toBe(true); + expect(isCrossClusterSearch(mockApmEventClient)).toBe(true); }); it('returns true when there are remote clusters in error indices', () => { - const mockedSetup = { + const mockApmEventClient = { indices: { transaction: '', span: '', metric: '', error: 'logs-apm*,remote_cluster:logs-apm*', } as ApmIndicesConfig, - } as unknown as Setup; + } as unknown as APMEventClient; - expect(isCrossClusterSearch(mockedSetup)).toBe(true); + expect(isCrossClusterSearch(mockApmEventClient)).toBe(true); }); }); diff --git a/x-pack/plugins/apm/server/routes/storage_explorer/is_cross_cluster_search.ts b/x-pack/plugins/apm/server/routes/storage_explorer/is_cross_cluster_search.ts index fbbe7a1347931a..cf149fe1a04141 100644 --- a/x-pack/plugins/apm/server/routes/storage_explorer/is_cross_cluster_search.ts +++ b/x-pack/plugins/apm/server/routes/storage_explorer/is_cross_cluster_search.ts @@ -5,10 +5,10 @@ * 2.0. */ -import { Setup } from '../../lib/helpers/setup_request'; +import { APMEventClient } from '../../lib/helpers/create_es_client/create_apm_event_client'; import { getApmIndicesCombined } from './indices_stats_helpers'; -export function isCrossClusterSearch(setup: Setup) { +export function isCrossClusterSearch(apmEventClient: APMEventClient) { // Check if a remote cluster is set in APM indices - return getApmIndicesCombined(setup).includes(':'); + return getApmIndicesCombined(apmEventClient).includes(':'); } diff --git a/x-pack/plugins/apm/server/routes/storage_explorer/route.ts b/x-pack/plugins/apm/server/routes/storage_explorer/route.ts index 6872bdd22a09d1..d22a0bee3b2a5b 100644 --- a/x-pack/plugins/apm/server/routes/storage_explorer/route.ts +++ b/x-pack/plugins/apm/server/routes/storage_explorer/route.ts @@ -12,7 +12,6 @@ import { i18n } from '@kbn/i18n'; import { ENVIRONMENT_ALL } from '../../../common/environment_filter_values'; import { createApmServerRoute } from '../apm_routes/create_apm_server_route'; import { getSearchTransactionsEvents } from '../../lib/helpers/transactions'; -import { setupRequest } from '../../lib/helpers/setup_request'; import { indexLifecyclePhaseRt, IndexLifecyclePhaseSelectOption, @@ -64,6 +63,7 @@ const storageExplorerRoute = createApmServerRoute({ }>; }> => { const { + config, params, context, request, @@ -81,20 +81,18 @@ const storageExplorerRoute = createApmServerRoute({ }, } = params; - const [setup, apmEventClient, randomSampler] = await Promise.all([ - setupRequest(resources), + const [apmEventClient, randomSampler] = await Promise.all([ getApmEventClient(resources), getRandomSampler({ security, request, probability }), ]); const searchAggregatedTransactions = await getSearchTransactionsEvents({ apmEventClient, - config: setup.config, + config, kuery, }); const serviceStatistics = await getServiceStatistics({ - setup, apmEventClient, context, indexLifecyclePhase, @@ -168,8 +166,7 @@ const storageExplorerServiceDetailsRoute = createApmServerRoute({ }, } = params; - const [setup, apmEventClient, randomSampler] = await Promise.all([ - setupRequest(resources), + const [apmEventClient, randomSampler] = await Promise.all([ getApmEventClient(resources), getRandomSampler({ security, request, probability }), ]); @@ -177,7 +174,6 @@ const storageExplorerServiceDetailsRoute = createApmServerRoute({ const [processorEventStats, indicesStats] = await Promise.all([ getStorageDetailsPerProcessorEvent({ apmEventClient, - setup, context, indexLifecyclePhase, randomSampler, @@ -189,7 +185,6 @@ const storageExplorerServiceDetailsRoute = createApmServerRoute({ }), getStorageDetailsPerIndex({ apmEventClient, - setup, context, indexLifecyclePhase, randomSampler, @@ -226,6 +221,7 @@ const storageChartRoute = createApmServerRoute({ }>; }> => { const { + config, params, context, request, @@ -243,15 +239,14 @@ const storageChartRoute = createApmServerRoute({ }, } = params; - const [setup, apmEventClient, randomSampler] = await Promise.all([ - setupRequest(resources), + const [apmEventClient, randomSampler] = await Promise.all([ getApmEventClient(resources), getRandomSampler({ security, request, probability }), ]); const searchAggregatedTransactions = await getSearchTransactionsEvents({ apmEventClient, - config: setup.config, + config, kuery, }); @@ -263,7 +258,6 @@ const storageChartRoute = createApmServerRoute({ kuery, start, end, - setup, apmEventClient, context, }); @@ -286,10 +280,10 @@ const storageExplorerPrivilegesRoute = createApmServerRoute({ throw Boom.internal(SECURITY_REQUIRED_MESSAGE); } - const setup = await setupRequest(resources); + const apmEventClient = await getApmEventClient(resources); const hasPrivileges = await hasStorageExplorerPrivileges({ context, - setup, + apmEventClient, }); return { hasPrivileges }; @@ -319,6 +313,7 @@ const storageExplorerSummaryStatsRoute = createApmServerRoute({ dailyDataGeneration: number; }> => { const { + config, params, context, request, @@ -336,21 +331,19 @@ const storageExplorerSummaryStatsRoute = createApmServerRoute({ }, } = params; - const [setup, apmEventClient, randomSampler] = await Promise.all([ - setupRequest(resources), + const [apmEventClient, randomSampler] = await Promise.all([ getApmEventClient(resources), getRandomSampler({ security, request, probability }), ]); const searchAggregatedTransactions = await getSearchTransactionsEvents({ apmEventClient, - config: setup.config, + config, kuery, }); const [mainSummaryStats, tracesPerMinute] = await Promise.all([ getMainSummaryStats({ - setup, apmEventClient, context, indexLifecyclePhase, @@ -382,8 +375,8 @@ const storageExplorerIsCrossClusterSearchRoute = createApmServerRoute({ endpoint: 'GET /internal/apm/storage_explorer/is_cross_cluster_search', options: { tags: ['access:apm'] }, handler: async (resources): Promise<{ isCrossClusterSearch: boolean }> => { - const setup = await setupRequest(resources); - return { isCrossClusterSearch: isCrossClusterSearch(setup) }; + const apmEventClient = await getApmEventClient(resources); + return { isCrossClusterSearch: isCrossClusterSearch(apmEventClient) }; }, }); diff --git a/x-pack/plugins/apm/server/routes/suggestions/route.ts b/x-pack/plugins/apm/server/routes/suggestions/route.ts index 976779816f9609..6888fd06ed6c3f 100644 --- a/x-pack/plugins/apm/server/routes/suggestions/route.ts +++ b/x-pack/plugins/apm/server/routes/suggestions/route.ts @@ -10,7 +10,6 @@ import { maxSuggestions } from '@kbn/observability-plugin/common'; import { getSuggestionsWithTermsEnum } from './get_suggestions_with_terms_enum'; import { getSuggestionsWithTermsAggregation } from './get_suggestions_with_terms_aggregation'; import { getSearchTransactionsEvents } from '../../lib/helpers/transactions'; -import { setupRequest } from '../../lib/helpers/setup_request'; import { createApmServerRoute } from '../apm_routes/create_apm_server_route'; import { rangeRt } from '../default_api_types'; import { getApmEventClient } from '../../lib/helpers/get_apm_event_client'; @@ -29,15 +28,12 @@ const suggestionsRoute = createApmServerRoute({ }), options: { tags: ['access:apm'] }, handler: async (resources): Promise<{ terms: string[] }> => { - const [setup, apmEventClient] = await Promise.all([ - setupRequest(resources), - getApmEventClient(resources), - ]); - const { context, params } = resources; + const apmEventClient = await getApmEventClient(resources); + const { context, params, config } = resources; const { fieldName, fieldValue, serviceName, start, end } = params.query; const searchAggregatedTransactions = await getSearchTransactionsEvents({ apmEventClient, - config: setup.config, + config, kuery: '', }); const coreContext = await context.core; diff --git a/x-pack/plugins/apm/server/routes/traces/queries.test.ts b/x-pack/plugins/apm/server/routes/traces/queries.test.ts index 64e08d11acc746..9f342392b5a094 100644 --- a/x-pack/plugins/apm/server/routes/traces/queries.test.ts +++ b/x-pack/plugins/apm/server/routes/traces/queries.test.ts @@ -19,8 +19,8 @@ describe('trace queries', () => { }); it('fetches a trace', async () => { - mock = await inspectSearchParams((setup, apmEventClient) => - getTraceItems('foo', setup.config, apmEventClient, 0, 50000) + mock = await inspectSearchParams(({ mockConfig, mockApmEventClient }) => + getTraceItems('foo', mockConfig, mockApmEventClient, 0, 50000) ); expect(mock.params).toMatchSnapshot(); diff --git a/x-pack/plugins/apm/server/routes/traces/route.ts b/x-pack/plugins/apm/server/routes/traces/route.ts index 5c72a91c4b0139..39ac9e2b354a03 100644 --- a/x-pack/plugins/apm/server/routes/traces/route.ts +++ b/x-pack/plugins/apm/server/routes/traces/route.ts @@ -8,7 +8,6 @@ import * as t from 'io-ts'; import { nonEmptyStringRt } from '@kbn/io-ts-utils'; import { TraceSearchType } from '../../../common/trace_explorer'; -import { setupRequest } from '../../lib/helpers/setup_request'; import { getSearchTransactionsEvents } from '../../lib/helpers/transactions'; import { createApmServerRoute } from '../apm_routes/create_apm_server_route'; import { @@ -50,6 +49,7 @@ const tracesRoute = createApmServerRoute({ }>; }> => { const { + config, params, request, plugins: { security }, @@ -57,15 +57,14 @@ const tracesRoute = createApmServerRoute({ const { environment, kuery, start, end, probability } = params.query; - const [setup, apmEventClient, randomSampler] = await Promise.all([ - setupRequest(resources), + const [apmEventClient, randomSampler] = await Promise.all([ getApmEventClient(resources), getRandomSampler({ security, request, probability }), ]); const searchAggregatedTransactions = await getSearchTransactionsEvents({ apmEventClient, - config: setup.config, + config, kuery, start, end, @@ -105,14 +104,10 @@ const tracesByIdRoute = createApmServerRoute({ >; linkedChildrenOfSpanCountBySpanId: Record; }> => { - const [setup, apmEventClient] = await Promise.all([ - setupRequest(resources), - getApmEventClient(resources), - ]); - const { params } = resources; + const apmEventClient = await getApmEventClient(resources); + const { params, config } = resources; const { traceId } = params.path; const { start, end } = params.query; - const { config } = setup; return getTraceItems(traceId, config, apmEventClient, start, end); }, }); diff --git a/x-pack/plugins/apm/server/routes/transactions/breakdown/index.test.ts b/x-pack/plugins/apm/server/routes/transactions/breakdown/index.test.ts index 96487f7a6be720..668b95c7e8db58 100644 --- a/x-pack/plugins/apm/server/routes/transactions/breakdown/index.test.ts +++ b/x-pack/plugins/apm/server/routes/transactions/breakdown/index.test.ts @@ -11,32 +11,13 @@ import noDataResponse from './mock_responses/no_data.json'; import dataResponse from './mock_responses/data.json'; import { APMConfig } from '../../..'; import { ENVIRONMENT_ALL } from '../../../../common/environment_filter_values'; -import { ApmIndicesConfig } from '../../settings/apm_indices/get_apm_indices'; - -const mockIndices: ApmIndicesConfig = { - sourcemap: 'myIndex', - error: 'myIndex', - onboarding: 'myIndex', - span: 'myIndex', - transaction: 'myIndex', - metric: 'myIndex', - apmAgentConfigurationIndex: 'myIndex', - apmCustomLinkIndex: 'myIndex', -}; - -function getMockSetup(esResponse: any) { - const clientSpy = jest.fn().mockReturnValueOnce(esResponse); - return { - internalClient: { search: clientSpy } as any, - config: new Proxy( - {}, - { - get: () => 'myIndex', - } - ) as APMConfig, - indices: mockIndices, - }; -} + +const mockConfig = new Proxy( + {}, + { + get: () => 'myIndex', + } +) as APMConfig; function getMockApmEventClient(esResponse: any) { const apmEventClientSpy = jest.fn().mockReturnValueOnce(esResponse); @@ -45,13 +26,12 @@ function getMockApmEventClient(esResponse: any) { describe('getTransactionBreakdown', () => { describe('when no data is available', () => { - const { config } = getMockSetup(noDataResponse); const { apmEventClient } = getMockApmEventClient(noDataResponse); it('returns an empty array if no data is available', async () => { const response = await getTransactionBreakdown({ serviceName: 'myServiceName', transactionType: 'request', - config, + config: mockConfig, apmEventClient, environment: ENVIRONMENT_ALL.value, kuery: '', @@ -65,12 +45,11 @@ describe('getTransactionBreakdown', () => { describe('when data is returned', () => { it('returns a timeseries grouped by type and subtype', async () => { - const { config } = getMockSetup(dataResponse); const { apmEventClient } = getMockApmEventClient(dataResponse); const response = await getTransactionBreakdown({ serviceName: 'myServiceName', transactionType: 'request', - config, + config: mockConfig, apmEventClient, environment: ENVIRONMENT_ALL.value, kuery: '', @@ -97,7 +76,6 @@ describe('getTransactionBreakdown', () => { }); it('should not include more KPIs than MAX_KPIs', async () => { - const { config } = getMockSetup(dataResponse); const { apmEventClient } = getMockApmEventClient(dataResponse); // @ts-expect-error constants.MAX_KPIS = 2; @@ -105,7 +83,7 @@ describe('getTransactionBreakdown', () => { const response = await getTransactionBreakdown({ serviceName: 'myServiceName', transactionType: 'request', - config, + config: mockConfig, apmEventClient, environment: ENVIRONMENT_ALL.value, kuery: '', @@ -118,12 +96,11 @@ describe('getTransactionBreakdown', () => { }); it('fills in gaps for a given timestamp', async () => { - const { config } = getMockSetup(dataResponse); const { apmEventClient } = getMockApmEventClient(dataResponse); const response = await getTransactionBreakdown({ serviceName: 'myServiceName', transactionType: 'request', - config, + config: mockConfig, apmEventClient, environment: ENVIRONMENT_ALL.value, kuery: '', diff --git a/x-pack/plugins/apm/server/routes/transactions/queries.test.ts b/x-pack/plugins/apm/server/routes/transactions/queries.test.ts index be11546ee20a14..b87a356c171425 100644 --- a/x-pack/plugins/apm/server/routes/transactions/queries.test.ts +++ b/x-pack/plugins/apm/server/routes/transactions/queries.test.ts @@ -22,12 +22,12 @@ describe('transaction queries', () => { }); it('fetches breakdown data for transactions', async () => { - mock = await inspectSearchParams((setup, apmEventClient) => + mock = await inspectSearchParams(({ mockApmEventClient, mockConfig }) => getTransactionBreakdown({ serviceName: 'foo', transactionType: 'bar', - config: setup.config, - apmEventClient, + config: mockConfig, + apmEventClient: mockApmEventClient, environment: ENVIRONMENT_ALL.value, kuery: '', start: 0, @@ -39,13 +39,13 @@ describe('transaction queries', () => { }); it('fetches breakdown data for transactions for a transaction name', async () => { - mock = await inspectSearchParams((setup, apmEventClient) => + mock = await inspectSearchParams(({ mockApmEventClient, mockConfig }) => getTransactionBreakdown({ serviceName: 'foo', transactionType: 'bar', transactionName: 'baz', - config: setup.config, - apmEventClient, + config: mockConfig, + apmEventClient: mockApmEventClient, environment: ENVIRONMENT_ALL.value, kuery: '', start: 0, @@ -57,14 +57,14 @@ describe('transaction queries', () => { }); it('fetches transaction trace samples', async () => { - mock = await inspectSearchParams((setup, apmEventClient) => + mock = await inspectSearchParams(({ mockApmEventClient }) => getTraceSamples({ serviceName: 'foo', transactionName: 'bar', transactionType: 'baz', traceId: 'qux', transactionId: 'quz', - apmEventClient, + apmEventClient: mockApmEventClient, environment: ENVIRONMENT_ALL.value, kuery: '', start: 0, @@ -76,11 +76,11 @@ describe('transaction queries', () => { }); it('fetches a transaction', async () => { - mock = await inspectSearchParams((setup, apmEventClient) => + mock = await inspectSearchParams(({ mockApmEventClient }) => getTransaction({ transactionId: 'foo', traceId: 'bar', - apmEventClient, + apmEventClient: mockApmEventClient, start: 0, end: 50000, }) diff --git a/x-pack/plugins/apm/server/routes/transactions/route.ts b/x-pack/plugins/apm/server/routes/transactions/route.ts index b862fdd37cb5b2..4a3ecfe5794ca1 100644 --- a/x-pack/plugins/apm/server/routes/transactions/route.ts +++ b/x-pack/plugins/apm/server/routes/transactions/route.ts @@ -12,7 +12,6 @@ import { latencyAggregationTypeRt, } from '../../../common/latency_aggregation_types'; import { getSearchTransactionsEvents } from '../../lib/helpers/transactions'; -import { setupRequest } from '../../lib/helpers/setup_request'; import { getServiceTransactionGroups } from '../services/get_service_transaction_groups'; import { getServiceTransactionGroupDetailedStatisticsPeriods } from '../services/get_service_transaction_group_detailed_statistics'; import { getTransactionBreakdown } from './breakdown'; @@ -57,11 +56,8 @@ const transactionGroupsMainStatisticsRoute = createApmServerRoute({ isAggregationAccurate: boolean; bucketSize: number; }> => { - const { params } = resources; - const [setup, apmEventClient] = await Promise.all([ - setupRequest(resources), - getApmEventClient(resources), - ]); + const { params, config } = resources; + const apmEventClient = await getApmEventClient(resources); const { path: { serviceName }, query: { @@ -73,7 +69,6 @@ const transactionGroupsMainStatisticsRoute = createApmServerRoute({ end, }, } = params; - const { config } = setup; const searchAggregatedTransactions = await getSearchTransactionsEvents({ apmEventClient, config, @@ -145,11 +140,8 @@ const transactionGroupsDetailedStatisticsRoute = createApmServerRoute({ impact: number; }>; }> => { - const [setup, apmEventClient] = await Promise.all([ - setupRequest(resources), - getApmEventClient(resources), - ]); - const { params } = resources; + const apmEventClient = await getApmEventClient(resources); + const { params, config } = resources; const { path: { serviceName }, @@ -167,7 +159,7 @@ const transactionGroupsDetailedStatisticsRoute = createApmServerRoute({ } = params; const searchAggregatedTransactions = await getSearchTransactionsEvents({ - config: setup.config, + config, apmEventClient, kuery, start, @@ -231,11 +223,8 @@ const transactionLatencyChartsRoute = createApmServerRoute({ overallAvgDuration: null; }; }> => { - const [setup, apmEventClient] = await Promise.all([ - setupRequest(resources), - getApmEventClient(resources), - ]); - const { params, logger } = resources; + const apmEventClient = await getApmEventClient(resources); + const { params, logger, config } = resources; const { serviceName } = params.path; const { @@ -250,7 +239,7 @@ const transactionLatencyChartsRoute = createApmServerRoute({ } = params.query; const searchAggregatedTransactions = await getSearchTransactionsEvents({ - config: setup.config, + config, apmEventClient, kuery, start, @@ -373,11 +362,8 @@ const transactionChartsBreakdownRoute = createApmServerRoute({ legendValue: string; }>; }> => { - const [setup, apmEventClient] = await Promise.all([ - setupRequest(resources), - getApmEventClient(resources), - ]); - const { params } = resources; + const apmEventClient = await getApmEventClient(resources); + const { params, config } = resources; const { serviceName } = params.path; const { environment, kuery, transactionName, transactionType, start, end } = @@ -389,7 +375,7 @@ const transactionChartsBreakdownRoute = createApmServerRoute({ serviceName, transactionName, transactionType, - config: setup.config, + config, apmEventClient, start, end, @@ -434,12 +420,9 @@ const transactionChartsErrorRateRoute = createApmServerRoute({ average: null; }; }> => { - const [setup, apmEventClient] = await Promise.all([ - setupRequest(resources), - getApmEventClient(resources), - ]); + const apmEventClient = await getApmEventClient(resources); - const { params } = resources; + const { params, config } = resources; const { serviceName } = params.path; const { environment, @@ -452,7 +435,7 @@ const transactionChartsErrorRateRoute = createApmServerRoute({ } = params.query; const searchAggregatedTransactions = await getSearchTransactionsEvents({ - config: setup.config, + config, apmEventClient, kuery, start, @@ -512,18 +495,15 @@ const transactionChartsColdstartRateRoute = createApmServerRoute({ average: null; }; }> => { - const [setup, apmEventClient] = await Promise.all([ - setupRequest(resources), - getApmEventClient(resources), - ]); + const apmEventClient = await getApmEventClient(resources); - const { params } = resources; + const { params, config } = resources; const { serviceName } = params.path; const { environment, kuery, transactionType, start, end, offset } = params.query; const searchAggregatedTransactions = await getSearchTransactionsEvents({ - config: setup.config, + config, apmEventClient, kuery, start, @@ -583,12 +563,9 @@ const transactionChartsColdstartRateByTransactionNameRoute = average: null; }; }> => { - const [setup, apmEventClient] = await Promise.all([ - setupRequest(resources), - getApmEventClient(resources), - ]); + const apmEventClient = await getApmEventClient(resources); - const { params } = resources; + const { params, config } = resources; const { serviceName } = params.path; const { environment, @@ -601,7 +578,7 @@ const transactionChartsColdstartRateByTransactionNameRoute = } = params.query; const searchAggregatedTransactions = await getSearchTransactionsEvents({ - config: setup.config, + config, apmEventClient, kuery, start, diff --git a/x-pack/plugins/apm/server/utils/test_helpers.tsx b/x-pack/plugins/apm/server/utils/test_helpers.tsx index db69e4d78ea4f8..22b0de8af8e265 100644 --- a/x-pack/plugins/apm/server/utils/test_helpers.tsx +++ b/x-pack/plugins/apm/server/utils/test_helpers.tsx @@ -8,6 +8,7 @@ import type { ESSearchRequest, ESSearchResponse } from '@kbn/es-types'; import { APMConfig } from '..'; import { APMEventClient } from '../lib/helpers/create_es_client/create_apm_event_client'; +import { APMInternalESClient } from '../lib/helpers/create_es_client/create_internal_es_client'; import { ApmIndicesConfig } from '../routes/settings/apm_indices/get_apm_indices'; interface Options { @@ -17,17 +18,18 @@ interface Options { config?: Partial; } -interface MockSetup { - internalClient: any; - config: APMConfig; - indices: ApmIndicesConfig; -} - export async function inspectSearchParams( - fn: ( - mockSetup: MockSetup, - mockApmEventClient: APMEventClient - ) => Promise, + fn: ({ + mockApmEventClient, + mockConfig, + mockInternalESClient, + mockIndices, + }: { + mockApmEventClient: APMEventClient; + mockConfig: APMConfig; + mockInternalESClient: APMInternalESClient; + mockIndices: ApmIndicesConfig; + }) => Promise, options: Options = {} ) { const spy = jest.fn().mockImplementation(async (request) => { @@ -47,7 +49,7 @@ export async function inspectSearchParams( let response; let error; const mockApmEventClient = { search: spy } as any; - const mockApmIndices: { + const indices: { [Property in keyof APMConfig['indices']]: string; } = { sourcemap: 'myIndex', @@ -57,42 +59,45 @@ export async function inspectSearchParams( transaction: 'myIndex', metric: 'myIndex', }; - const mockSetup = { - internalClient: { search: spy } as any, - config: new Proxy( - {}, - { - get: (_, key: keyof APMConfig) => { - const { config } = options; - if (config?.[key]) { - return config?.[key]; - } + const mockConfig = new Proxy( + {}, + { + get: (_, key: keyof APMConfig) => { + const { config } = options; + if (config?.[key]) { + return config?.[key]; + } - switch (key) { - default: - return 'myIndex'; - case 'indices': - return mockApmIndices; - case 'ui': - return { - enabled: true, - transactionGroupBucketSize: 1000, - maxTraceItems: 1000, - }; - case 'metricsInterval': - return 30; - } - }, - } - ) as APMConfig, - indices: { - ...mockApmIndices, - apmAgentConfigurationIndex: 'myIndex', - apmCustomLinkIndex: 'myIndex', - }, + switch (key) { + default: + return 'myIndex'; + case 'indices': + return indices; + case 'ui': + return { + enabled: true, + transactionGroupBucketSize: 1000, + maxTraceItems: 1000, + }; + case 'metricsInterval': + return 30; + } + }, + } + ) as APMConfig; + const mockInternalESClient = { search: spy } as any; + const mockIndices = { + ...indices, + apmAgentConfigurationIndex: 'myIndex', + apmCustomLinkIndex: 'myIndex', }; try { - response = await fn(mockSetup, mockApmEventClient); + response = await fn({ + mockIndices, + mockApmEventClient, + mockConfig, + mockInternalESClient, + }); } catch (err) { error = err; // we're only extracting the search params diff --git a/x-pack/plugins/canvas/shareable_runtime/index.ts b/x-pack/plugins/canvas/shareable_runtime/index.ts index 41ecd875c4326e..aee57c3780503c 100644 --- a/x-pack/plugins/canvas/shareable_runtime/index.ts +++ b/x-pack/plugins/canvas/shareable_runtime/index.ts @@ -6,7 +6,7 @@ */ export * from './api'; -import '@kbn/core/server/core_app/assets/legacy_light_theme.css'; +import '@kbn/core-apps-server-internal/assets/legacy_light_theme.css'; import '../public/style/index.scss'; import '@elastic/eui/dist/eui_theme_light.css'; import '@kbn/ui-framework/dist/kui_light.css'; diff --git a/x-pack/plugins/fleet/common/openapi/bundled.json b/x-pack/plugins/fleet/common/openapi/bundled.json index ab8747170f7609..6254d333a66be1 100644 --- a/x-pack/plugins/fleet/common/openapi/bundled.json +++ b/x-pack/plugins/fleet/common/openapi/bundled.json @@ -5072,6 +5072,14 @@ "monitoring_output_id": { "type": "string", "nullable": true + }, + "fleet_server_host_id": { + "type": "string", + "nullable": true + }, + "download_source_id": { + "type": "string", + "nullable": true } }, "required": [ @@ -5221,10 +5229,20 @@ "type": "string" }, "data_output_id": { - "type": "string" + "type": "string", + "nullable": true }, "monitoring_output_id": { - "type": "string" + "type": "string", + "nullable": true + }, + "fleet_server_host_id": { + "type": "string", + "nullable": true + }, + "download_source_id": { + "type": "string", + "nullable": true }, "revision": { "type": "number" diff --git a/x-pack/plugins/fleet/common/openapi/bundled.yaml b/x-pack/plugins/fleet/common/openapi/bundled.yaml index eca789024e4f33..0295ea7e44f032 100644 --- a/x-pack/plugins/fleet/common/openapi/bundled.yaml +++ b/x-pack/plugins/fleet/common/openapi/bundled.yaml @@ -3220,6 +3220,12 @@ components: monitoring_output_id: type: string nullable: true + fleet_server_host_id: + type: string + nullable: true + download_source_id: + type: string + nullable: true required: - name - namespace @@ -3322,8 +3328,16 @@ components: type: string data_output_id: type: string + nullable: true monitoring_output_id: type: string + nullable: true + fleet_server_host_id: + type: string + nullable: true + download_source_id: + type: string + nullable: true revision: type: number agents: diff --git a/x-pack/plugins/fleet/common/openapi/components/schemas/agent_policy.yaml b/x-pack/plugins/fleet/common/openapi/components/schemas/agent_policy.yaml index b3895ed2627f70..ab001440647600 100644 --- a/x-pack/plugins/fleet/common/openapi/components/schemas/agent_policy.yaml +++ b/x-pack/plugins/fleet/common/openapi/components/schemas/agent_policy.yaml @@ -21,8 +21,16 @@ allOf: type: string data_output_id: type: string + nullable: true monitoring_output_id: type: string + nullable: true + fleet_server_host_id: + type: string + nullable: true + download_source_id: + type: string + nullable: true revision: type: number agents: diff --git a/x-pack/plugins/fleet/common/openapi/components/schemas/new_agent_policy.yaml b/x-pack/plugins/fleet/common/openapi/components/schemas/new_agent_policy.yaml index 7ad8988f1b0e42..3485d235b7b697 100644 --- a/x-pack/plugins/fleet/common/openapi/components/schemas/new_agent_policy.yaml +++ b/x-pack/plugins/fleet/common/openapi/components/schemas/new_agent_policy.yaml @@ -22,6 +22,12 @@ properties: monitoring_output_id: type: string nullable: true + fleet_server_host_id: + type: string + nullable: true + download_source_id: + type: string + nullable: true required: - name - - namespace \ No newline at end of file + - namespace diff --git a/x-pack/plugins/fleet/server/services/epm/archive/parse.test.ts b/x-pack/plugins/fleet/server/services/epm/archive/parse.test.ts index 38a070e7eca8f7..e4ee10c4e270cc 100644 --- a/x-pack/plugins/fleet/server/services/epm/archive/parse.test.ts +++ b/x-pack/plugins/fleet/server/services/epm/archive/parse.test.ts @@ -8,47 +8,33 @@ import { parseDefaultIngestPipeline, parseDataStreamElasticsearchEntry } from '. describe('parseDefaultIngestPipeline', () => { it('Should return undefined for stream without any elasticsearch dir', () => { expect( - parseDefaultIngestPipeline({ - pkgKey: 'pkg-1.0.0', - paths: ['pkg-1.0.0/data_stream/stream1/manifest.yml'], - dataStreamPath: 'stream1', - }) + parseDefaultIngestPipeline('pkg-1.0.0/data_stream/stream1/', [ + 'pkg-1.0.0/data_stream/stream1/manifest.yml', + ]) ).toEqual(undefined); }); it('Should return undefined for stream with non default ingest pipeline', () => { expect( - parseDefaultIngestPipeline({ - pkgKey: 'pkg-1.0.0', - paths: [ - 'pkg-1.0.0/data_stream/stream1/manifest.yml', - 'pkg-1.0.0/data_stream/stream1/elasticsearch/ingest_pipeline/someotherpipeline.yml', - ], - dataStreamPath: 'stream1', - }) + parseDefaultIngestPipeline('pkg-1.0.0/data_stream/stream1/', [ + 'pkg-1.0.0/data_stream/stream1/manifest.yml', + 'pkg-1.0.0/data_stream/stream1/elasticsearch/ingest_pipeline/someotherpipeline.yml', + ]) ).toEqual(undefined); }); it('Should return default for yml ingest pipeline', () => { expect( - parseDefaultIngestPipeline({ - pkgKey: 'pkg-1.0.0', - paths: [ - 'pkg-1.0.0/data_stream/stream1/manifest.yml', - 'pkg-1.0.0/data_stream/stream1/elasticsearch/ingest_pipeline/default.yml', - ], - dataStreamPath: 'stream1', - }) + parseDefaultIngestPipeline('pkg-1.0.0/data_stream/stream1/', [ + 'pkg-1.0.0/data_stream/stream1/manifest.yml', + 'pkg-1.0.0/data_stream/stream1/elasticsearch/ingest_pipeline/default.yml', + ]) ).toEqual('default'); }); it('Should return default for json ingest pipeline', () => { expect( - parseDefaultIngestPipeline({ - pkgKey: 'pkg-1.0.0', - paths: [ - 'pkg-1.0.0/data_stream/stream1/manifest.yml', - 'pkg-1.0.0/data_stream/stream1/elasticsearch/ingest_pipeline/default.json', - ], - dataStreamPath: 'stream1', - }) + parseDefaultIngestPipeline('pkg-1.0.0/data_stream/stream1/', [ + 'pkg-1.0.0/data_stream/stream1/manifest.yml', + 'pkg-1.0.0/data_stream/stream1/elasticsearch/ingest_pipeline/default.json', + ]) ).toEqual('default'); }); }); @@ -122,4 +108,32 @@ describe('parseDataStreamElasticsearchEntry', () => { 'index_template.settings': { 'index.lifecycle.name': 'reference' }, }); }); + it('Should handle non-dotted values for privileges', () => { + expect( + parseDataStreamElasticsearchEntry({ + privileges: { + indices: ['read'], + cluster: ['test'], + }, + }) + ).toEqual({ + privileges: { + indices: ['read'], + cluster: ['test'], + }, + }); + }); + it('Should handle dotted values for privileges', () => { + expect( + parseDataStreamElasticsearchEntry({ + 'privileges.indices': ['read'], + 'privileges.cluster': ['test'], + }) + ).toEqual({ + privileges: { + indices: ['read'], + cluster: ['test'], + }, + }); + }); }); diff --git a/x-pack/plugins/fleet/server/services/epm/archive/parse.ts b/x-pack/plugins/fleet/server/services/epm/archive/parse.ts index 06a92e84c0af6c..8bcda08fdec6b3 100644 --- a/x-pack/plugins/fleet/server/services/epm/archive/parse.ts +++ b/x-pack/plugins/fleet/server/services/epm/archive/parse.ts @@ -12,7 +12,7 @@ import path from 'path'; import { merge } from '@kbn/std'; import yaml from 'js-yaml'; -import { pick, uniq } from 'lodash'; +import { pick } from 'lodash'; import semverMajor from 'semver/functions/major'; import semverPrerelease from 'semver/functions/prerelease'; @@ -62,13 +62,13 @@ const expandDottedField = (dottedFieldName: string, val: unknown): object => { } }; -export const expandDottedObject = (dottedObj: object) => { +export const expandDottedObject = (dottedObj: object = {}) => { if (typeof dottedObj !== 'object' || Array.isArray(dottedObj)) { return dottedObj; } return Object.entries(dottedObj).reduce( (acc, [key, val]) => merge(acc, expandDottedField(key, val)), - {} + {} as Record ); }; @@ -217,7 +217,13 @@ function parseAndVerifyArchive(paths: string[], topLevelDirOverride?: string): A ); } - const parsedDataStreams = parseAndVerifyDataStreams(paths, parsed.name, parsed.version); + const parsedDataStreams = parseAndVerifyDataStreams( + paths, + parsed.name, + parsed.version, + topLevelDirOverride + ); + if (parsedDataStreams.length) { parsed.data_streams = parsedDataStreams; } @@ -250,26 +256,27 @@ function parseAndVerifyReadme(paths: string[], pkgName: string, pkgVersion: stri export function parseAndVerifyDataStreams( paths: string[], pkgName: string, - pkgVersion: string + pkgVersion: string, + pkgBasePathOverride?: string ): RegistryDataStream[] { // A data stream is made up of a subdirectory of name-version/data_stream/, containing a manifest.yml - let dataStreamPaths: string[] = []; + const dataStreamPaths = new Set(); const dataStreams: RegistryDataStream[] = []; - const pkgKey = pkgToPkgKey({ name: pkgName, version: pkgVersion }); - - // pick all paths matching name-version/data_stream/DATASTREAM_PATH/... - // from those, pick all unique data stream paths - paths - .filter((filePath) => filePath.startsWith(`${pkgKey}/data_stream/`)) - .forEach((filePath) => { - const parts = filePath.split('/'); - if (parts.length > 2 && parts[2]) dataStreamPaths.push(parts[2]); - }); + const pkgBasePath = pkgBasePathOverride || pkgToPkgKey({ name: pkgName, version: pkgVersion }); + const dataStreamsBasePath = path.join(pkgBasePath, 'data_stream'); + // pick all paths matching name-version/data_stream/DATASTREAM_NAME/... + // from those, pick all unique data stream names + paths.forEach((filePath) => { + if (!filePath.startsWith(dataStreamsBasePath)) return; - dataStreamPaths = uniq(dataStreamPaths); + const streamWithoutPrefix = filePath.slice(dataStreamsBasePath.length); + const [dataStreamPath] = streamWithoutPrefix.split('/').filter((v) => v); // remove undefined incase of leading / + if (dataStreamPath) dataStreamPaths.add(dataStreamPath); + }); dataStreamPaths.forEach((dataStreamPath) => { - const manifestFile = `${pkgKey}/data_stream/${dataStreamPath}/${MANIFEST_NAME}`; + const fullDataStreamPath = path.join(dataStreamsBasePath, dataStreamPath); + const manifestFile = path.join(fullDataStreamPath, MANIFEST_NAME); const manifestBuffer = MANIFESTS[manifestFile]; if (!paths.includes(manifestFile) || !manifestBuffer) { throw new PackageInvalidArchiveError( @@ -302,7 +309,7 @@ export function parseAndVerifyDataStreams( ); } - const ingestPipeline = parseDefaultIngestPipeline({ pkgKey, dataStreamPath, paths }); + const ingestPipeline = parseDefaultIngestPipeline(fullDataStreamPath, paths); const streams = parseAndVerifyStreams(manifestStreams, dataStreamPath); const parsedElasticsearchEntry = parseDataStreamElasticsearchEntry( elasticsearch, @@ -507,31 +514,29 @@ export function parseDataStreamElasticsearchEntry( ingestPipeline?: string ) { const parsedElasticsearchEntry: Record = {}; - + const expandedElasticsearch = expandDottedObject(elasticsearch); if (ingestPipeline) { parsedElasticsearchEntry['ingest_pipeline.name'] = ingestPipeline; } - if (elasticsearch?.privileges) { - parsedElasticsearchEntry.privileges = elasticsearch.privileges; + if (expandedElasticsearch?.privileges) { + parsedElasticsearchEntry.privileges = expandedElasticsearch.privileges; } - if (elasticsearch?.source_mode) { - parsedElasticsearchEntry.source_mode = elasticsearch.source_mode; + if (expandedElasticsearch?.source_mode) { + parsedElasticsearchEntry.source_mode = expandedElasticsearch.source_mode; } - const indexTemplateMappings = - elasticsearch?.index_template?.mappings || elasticsearch?.['index_template.mappings']; - if (indexTemplateMappings) { - parsedElasticsearchEntry['index_template.mappings'] = - expandDottedEntries(indexTemplateMappings); + if (expandedElasticsearch?.index_template?.mappings) { + parsedElasticsearchEntry['index_template.mappings'] = expandDottedEntries( + expandedElasticsearch.index_template.mappings + ); } - const indexTemplateSettings = - elasticsearch?.index_template?.settings || elasticsearch?.['index_template.settings']; - if (indexTemplateSettings) { - parsedElasticsearchEntry['index_template.settings'] = - expandDottedEntries(indexTemplateSettings); + if (expandedElasticsearch?.index_template?.settings) { + parsedElasticsearchEntry['index_template.settings'] = expandDottedEntries( + expandedElasticsearch.index_template.settings + ); } return parsedElasticsearchEntry; @@ -541,13 +546,8 @@ const isDefaultPipelineFile = (pipelinePath: string) => pipelinePath.endsWith(DEFAULT_INGEST_PIPELINE_FILE_NAME_YML) || pipelinePath.endsWith(DEFAULT_INGEST_PIPELINE_FILE_NAME_JSON); -export function parseDefaultIngestPipeline(opts: { - pkgKey: string; - paths: string[]; - dataStreamPath: string; -}) { - const { pkgKey, paths, dataStreamPath } = opts; - const ingestPipelineDirPath = `${pkgKey}/data_stream/${dataStreamPath}/elasticsearch/ingest_pipeline`; +export function parseDefaultIngestPipeline(fullDataStreamPath: string, paths: string[]) { + const ingestPipelineDirPath = path.join(fullDataStreamPath, '/elasticsearch/ingest_pipeline'); const defaultIngestPipelinePaths = paths.filter( (pipelinePath) => pipelinePath.startsWith(ingestPipelineDirPath) && isDefaultPipelineFile(pipelinePath) diff --git a/x-pack/plugins/fleet/server/services/preconfiguration/fleet_server_host.test.ts b/x-pack/plugins/fleet/server/services/preconfiguration/fleet_server_host.test.ts index 685f12f21cb4da..87717860e9be43 100644 --- a/x-pack/plugins/fleet/server/services/preconfiguration/fleet_server_host.test.ts +++ b/x-pack/plugins/fleet/server/services/preconfiguration/fleet_server_host.test.ts @@ -4,17 +4,27 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ +import { savedObjectsClientMock } from '@kbn/core/server/mocks'; import { appContextService } from '../app_context'; +import { getDefaultFleetServerHost, createFleetServerHost } from '../fleet_server_host'; import { + createCloudFleetServerHostIfNeeded, getCloudFleetServersHosts, getPreconfiguredFleetServerHostFromConfig, } from './fleet_server_host'; +jest.mock('../fleet_server_host'); jest.mock('../app_context'); const mockedAppContextService = appContextService as jest.Mocked; +const mockedGetDefaultFleetServerHost = getDefaultFleetServerHost as jest.MockedFunction< + typeof getDefaultFleetServerHost +>; +const mockedCreateFleetServerHost = createFleetServerHost as jest.MockedFunction< + typeof createFleetServerHost +>; describe('getPreconfiguredFleetServerHostFromConfig', () => { it('should work with preconfigured fleetServerHosts', () => { @@ -129,3 +139,65 @@ describe('getCloudFleetServersHosts', () => { `); }); }); + +describe('createCloudFleetServerHostIfNeeded', () => { + beforeEach(() => { + mockedCreateFleetServerHost.mockReset(); + }); + afterEach(() => { + mockedAppContextService.getCloud.mockReset(); + }); + it('should do nothing if there is no cloud fleet server hosts', async () => { + const soClient = savedObjectsClientMock.create(); + + await createCloudFleetServerHostIfNeeded(soClient); + + expect(mockedCreateFleetServerHost).not.toBeCalled(); + }); + + it('should do nothing if there is already an host configured', async () => { + const soClient = savedObjectsClientMock.create(); + mockedAppContextService.getCloud.mockReturnValue({ + cloudId: + 'dXMtZWFzdC0xLmF3cy5mb3VuZC5pbyRjZWM2ZjI2MWE3NGJmMjRjZTMzYmI4ODExYjg0Mjk0ZiRjNmMyY2E2ZDA0MjI0OWFmMGNjN2Q3YTllOTYyNTc0Mw==', + isCloudEnabled: true, + deploymentId: 'deployment-id-1', + apm: {}, + }); + mockedGetDefaultFleetServerHost.mockResolvedValue({ + id: 'test', + } as any); + + await createCloudFleetServerHostIfNeeded(soClient); + + expect(mockedCreateFleetServerHost).not.toBeCalled(); + }); + + it('should create a new fleet server hosts if there is no host configured', async () => { + const soClient = savedObjectsClientMock.create(); + mockedAppContextService.getCloud.mockReturnValue({ + cloudId: + 'dXMtZWFzdC0xLmF3cy5mb3VuZC5pbyRjZWM2ZjI2MWE3NGJmMjRjZTMzYmI4ODExYjg0Mjk0ZiRjNmMyY2E2ZDA0MjI0OWFmMGNjN2Q3YTllOTYyNTc0Mw==', + isCloudEnabled: true, + deploymentId: 'deployment-id-1', + apm: {}, + }); + mockedGetDefaultFleetServerHost.mockResolvedValue(null); + soClient.create.mockResolvedValue({ + id: 'test-id', + attributes: {}, + } as any); + + await createCloudFleetServerHostIfNeeded(soClient); + + expect(mockedCreateFleetServerHost).toBeCalledTimes(1); + expect(mockedCreateFleetServerHost).toBeCalledWith( + expect.anything(), + expect.objectContaining({ + host_urls: ['https://deployment-id-1.fleet.us-east-1.aws.found.io'], + is_default: true, + }), + { id: 'fleet-default-fleet-server-host', overwrite: true, fromPreconfiguration: true } + ); + }); +}); diff --git a/x-pack/plugins/fleet/server/services/preconfiguration/fleet_server_host.ts b/x-pack/plugins/fleet/server/services/preconfiguration/fleet_server_host.ts index c666bc0a343a5a..15e2bf5d80a7b4 100644 --- a/x-pack/plugins/fleet/server/services/preconfiguration/fleet_server_host.ts +++ b/x-pack/plugins/fleet/server/services/preconfiguration/fleet_server_host.ts @@ -20,7 +20,9 @@ import { deleteFleetServerHost, listFleetServerHosts, updateFleetServerHost, + getDefaultFleetServerHost, } from '../fleet_server_host'; +import { agentPolicyService } from '../agent_policy'; export function getCloudFleetServersHosts() { const cloudSetup = appContextService.getCloud(); @@ -44,20 +46,7 @@ export function getPreconfiguredFleetServerHostFromConfig(config?: FleetConfigTy const legacyFleetServerHostsConfig = getConfigFleetServerHosts(config); - // is cloud - const cloudServerHosts = getCloudFleetServersHosts(); - const fleetServerHosts: FleetServerHost[] = (fleetServerHostsFromConfig || []).concat([ - ...(cloudServerHosts - ? [ - { - name: 'Default', - is_default: true, - id: DEFAULT_FLEET_SERVER_HOST_ID, - host_urls: cloudServerHosts, - }, - ] - : []), ...(legacyFleetServerHostsConfig ? [ { @@ -82,12 +71,18 @@ export async function ensurePreconfiguredFleetServerHosts( esClient: ElasticsearchClient, preconfiguredFleetServerHosts: FleetServerHost[] ) { - await createOrUpdatePreconfiguredFleetServerHosts(soClient, preconfiguredFleetServerHosts); + await createOrUpdatePreconfiguredFleetServerHosts( + soClient, + esClient, + preconfiguredFleetServerHosts + ); + await createCloudFleetServerHostIfNeeded(soClient); await cleanPreconfiguredFleetServerHosts(soClient, esClient, preconfiguredFleetServerHosts); } export async function createOrUpdatePreconfiguredFleetServerHosts( soClient: SavedObjectsClientContract, + esClient: ElasticsearchClient, preconfiguredFleetServerHosts: FleetServerHost[] ) { const existingFleetServerHosts = await bulkGetFleetServerHosts( @@ -134,12 +129,37 @@ export async function createOrUpdatePreconfiguredFleetServerHosts( }, { fromPreconfiguration: true } ); - // TODO Bump revision of all policies using that output + if (data.is_default) { + await agentPolicyService.bumpAllAgentPolicies(soClient, esClient); + } else { + await agentPolicyService.bumpAllAgentPoliciesForFleetServerHosts(soClient, esClient, id); + } } }) ); } +export async function createCloudFleetServerHostIfNeeded(soClient: SavedObjectsClientContract) { + const cloudServerHosts = getCloudFleetServersHosts(); + if (!cloudServerHosts || cloudServerHosts.length === 0) { + return; + } + + const defaultFleetServerHost = await getDefaultFleetServerHost(soClient); + if (!defaultFleetServerHost) { + await createFleetServerHost( + soClient, + { + name: 'Default', + is_default: true, + host_urls: cloudServerHosts, + is_preconfigured: false, + }, + { id: DEFAULT_FLEET_SERVER_HOST_ID, overwrite: true, fromPreconfiguration: true } + ); + } +} + export async function cleanPreconfiguredFleetServerHosts( soClient: SavedObjectsClientContract, esClient: ElasticsearchClient, diff --git a/x-pack/plugins/lens/kibana.json b/x-pack/plugins/lens/kibana.json index ad4475ed9faa80..56e1970cc764b6 100644 --- a/x-pack/plugins/lens/kibana.json +++ b/x-pack/plugins/lens/kibana.json @@ -53,7 +53,7 @@ ], "owner": { "name": "Vis Editors", - "githubTeam": "kibana-vis-editors" + "githubTeam": "kibana-visualizations" }, "description": "Visualization editor allowing to quickly and easily configure compelling visualizations to use on dashboards and canvas workpads. Exposes components to embed visualizations and link into the Lens editor from within other apps in Kibana." } diff --git a/x-pack/plugins/lens/public/embeddable/embeddable.tsx b/x-pack/plugins/lens/public/embeddable/embeddable.tsx index 65c91b115ce707..aa5c5bba4741c2 100644 --- a/x-pack/plugins/lens/public/embeddable/embeddable.tsx +++ b/x-pack/plugins/lens/public/embeddable/embeddable.tsx @@ -645,6 +645,25 @@ export class Embeddable } } + private getError(): Error | undefined { + const message = + typeof this.errors?.[0]?.longMessage === 'string' + ? this.errors[0].longMessage + : this.errors?.[0]?.shortMessage; + + if (message != null) { + return new Error(message); + } + + if (!this.expression) { + return new Error( + i18n.translate('xpack.lens.embeddable.failure', { + defaultMessage: "Visualization couldn't be displayed", + }) + ); + } + } + /** * * @param {HTMLElement} domNode @@ -665,7 +684,7 @@ export class Embeddable this.updateOutput({ ...this.getOutput(), loading: true, - error: undefined, + error: this.getError(), }); this.renderComplete.dispatchInProgress(); @@ -697,7 +716,8 @@ export class Embeddable style={input.style} executionContext={this.getExecutionContext()} canEdit={this.getIsEditable() && input.viewMode === 'edit'} - onRuntimeError={() => { + onRuntimeError={(message) => { + this.updateOutput({ error: new Error(message) }); this.logError('runtime'); }} noPadding={this.visDisplayOptions?.noPadding} diff --git a/x-pack/plugins/lens/public/embeddable/embeddable_factory.ts b/x-pack/plugins/lens/public/embeddable/embeddable_factory.ts index cef9e7d698faa5..7904ba4c38f143 100644 --- a/x-pack/plugins/lens/public/embeddable/embeddable_factory.ts +++ b/x-pack/plugins/lens/public/embeddable/embeddable_factory.ts @@ -79,7 +79,7 @@ export class EmbeddableFactory implements EmbeddableFactoryDefinition { getDisplayName() { return i18n.translate('xpack.lens.embeddableDisplayName', { - defaultMessage: 'lens', + defaultMessage: 'Lens', }); } diff --git a/x-pack/plugins/lens/public/embeddable/expression_wrapper.tsx b/x-pack/plugins/lens/public/embeddable/expression_wrapper.tsx index 3f10fba310b0c1..cbb1fedf754970 100644 --- a/x-pack/plugins/lens/public/embeddable/expression_wrapper.tsx +++ b/x-pack/plugins/lens/public/embeddable/expression_wrapper.tsx @@ -44,7 +44,7 @@ export interface ExpressionWrapperProps { style?: React.CSSProperties; className?: string; canEdit: boolean; - onRuntimeError: () => void; + onRuntimeError: (message?: string) => void; executionContext?: KibanaExecutionContext; lensInspector: LensInspector; noPadding?: boolean; @@ -148,7 +148,9 @@ export function ExpressionWrapper({ syncCursor={syncCursor} executionContext={executionContext} renderError={(errorMessage, error) => { - onRuntimeError(); + const messages = getOriginalRequestErrorMessages(error); + onRuntimeError(messages[0] ?? errorMessage); + return (
@@ -156,7 +158,7 @@ export function ExpressionWrapper({ - {(getOriginalRequestErrorMessages(error) || [errorMessage]).map((message) => ( + {messages.map((message) => ( {message} ))} diff --git a/x-pack/plugins/lens/readme.md b/x-pack/plugins/lens/readme.md index 4dbb303fe8090c..b01f19e4ee8ce5 100644 --- a/x-pack/plugins/lens/readme.md +++ b/x-pack/plugins/lens/readme.md @@ -31,7 +31,7 @@ When adding visualizations to a solution page, there are multiple ways to approa * Limited data processing options - if the Lens UI doesn't support it, it can't be used * Limited visualization options - if Lens can't do it, it's not possible * #### **Using custom data fetching and rendering** - In case the disadvantages of using the Lens embeddable heavily affect your use case, it sometimes makes sense to roll your own data fetching and rendering by using the underlying APIs of search service and `elastic-charts` directly. This allows a high degree of flexibility when it comes to data processing, efficiently querying data for multiple charts in a single query and adjusting small details in how charts are rendered. However, do not choose these option lightly as maintenance as well as initial development effort will most likely be much higher than by using the Lens embeddable directly. In this case, almost always an "Open in Lens" button can still be offered to the user to drill down and further explore the data by generating a Lens configuration which is similar to the displayed visualization given the possibilities of Lens. Keep in mind that for the "Open in Lens" flow, the most important property isn't perfect fidelity of the chart but retaining the mental context of the user when switching so they don't have to start over. It's also possible to mix this approach with Lens embeddables on a single page. **Note**: In this situation, please let the VisEditors team know what features you are missing / why you chose not to use Lens. + In case the disadvantages of using the Lens embeddable heavily affect your use case, it sometimes makes sense to roll your own data fetching and rendering by using the underlying APIs of search service and `elastic-charts` directly. This allows a high degree of flexibility when it comes to data processing, efficiently querying data for multiple charts in a single query and adjusting small details in how charts are rendered. However, do not choose these option lightly as maintenance as well as initial development effort will most likely be much higher than by using the Lens embeddable directly. In this case, almost always an "Open in Lens" button can still be offered to the user to drill down and further explore the data by generating a Lens configuration which is similar to the displayed visualization given the possibilities of Lens. Keep in mind that for the "Open in Lens" flow, the most important property isn't perfect fidelity of the chart but retaining the mental context of the user when switching so they don't have to start over. It's also possible to mix this approach with Lens embeddables on a single page. **Note**: In this situation, please let the Visualizations team know what features you are missing / why you chose not to use Lens. Pros: * Full flexibility in data fetching optimization and chart rendering diff --git a/x-pack/plugins/observability/server/domain/services/compute_error_budget.test.ts b/x-pack/plugins/observability/server/domain/services/compute_error_budget.test.ts index 09488f7d577da0..eaec5420f19531 100644 --- a/x-pack/plugins/observability/server/domain/services/compute_error_budget.test.ts +++ b/x-pack/plugins/observability/server/domain/services/compute_error_budget.test.ts @@ -5,13 +5,115 @@ * 2.0. */ +import { twoDaysAgo } from '../../services/slo/fixtures/date'; +import { oneMinute } from '../../services/slo/fixtures/duration'; import { createSLO } from '../../services/slo/fixtures/slo'; +import { sevenDaysRolling, weeklyCalendarAligned } from '../../services/slo/fixtures/time_window'; import { computeErrorBudget } from './compute_error_budget'; +import { toDateRange } from './date_range'; describe('computeErrorBudget', () => { + describe('for occurrences based SLO', () => { + describe('with rolling time window', () => { + it('computes the error budget', () => { + const slo = createSLO({ + budgeting_method: 'occurrences', + time_window: sevenDaysRolling(), + objective: { target: 0.95 }, + }); + const dateRange = toDateRange(slo.time_window); + const errorBudget = computeErrorBudget(slo, { + good: 97, + total: 100, + date_range: dateRange, + }); + + expect(errorBudget).toEqual({ + initial: 0.05, + consumed: 0.6, + remaining: 0.4, + }); + }); + }); + + describe('with calendar aligned time window', () => { + it('computes the error budget', () => { + const slo = createSLO({ + budgeting_method: 'occurrences', + time_window: weeklyCalendarAligned(twoDaysAgo()), + objective: { target: 0.95 }, + }); + const dateRange = toDateRange(slo.time_window); + const errorBudget = computeErrorBudget(slo, { + good: 97, + total: 100, + date_range: dateRange, + }); + + expect(errorBudget).toEqual({ + initial: 0.05, + consumed: 0.6, + remaining: 0.4, + }); + }); + }); + }); + + describe('for timeslices based SLO', () => { + describe('with rolling time window', () => { + it('computes the error budget', () => { + const slo = createSLO({ + budgeting_method: 'timeslices', + time_window: sevenDaysRolling(), + objective: { target: 0.95, timeslice_target: 0.95, timeslice_window: oneMinute() }, + }); + const dateRange = toDateRange(slo.time_window); + // 7 days sliced in 1m buckets = 10,080 slices + const errorBudget = computeErrorBudget(slo, { + good: 9987, + total: 10080, + date_range: dateRange, + }); + + expect(errorBudget).toEqual({ + initial: 0.05, + consumed: 0.184524, + remaining: 0.815476, + }); + }); + }); + + describe('with calendar aligned time window', () => { + it('computes the error budget', () => { + const slo = createSLO({ + budgeting_method: 'timeslices', + time_window: weeklyCalendarAligned(twoDaysAgo()), + objective: { target: 0.95, timeslice_target: 0.95, timeslice_window: oneMinute() }, + }); + const dateRange = toDateRange(slo.time_window); + // 2 days sliced in 1m buckets = 2,880 slices (slices we have data for) = total + // 7 days sliced in 1m buckets = 10,080 slices (all slices for the window) = window_total + const errorBudget = computeErrorBudget(slo, { + good: 2823, + total: 2880, + date_range: dateRange, + }); + + // error rate = (total - good) / window_total = (2880 - 2823) / 10080 = 0.00565476 + // consumed = error rate / error budget = 0.00565476 / 0.05 = 0.1130952 + expect(errorBudget).toEqual({ + initial: 0.05, + consumed: 0.113095, + remaining: 0.886905, + }); + }); + }); + }); + it("returns default values when total events is '0'", () => { const slo = createSLO(); - const errorBudget = computeErrorBudget(slo, { good: 100, total: 0 }); + const dateRange = toDateRange(slo.time_window); + const errorBudget = computeErrorBudget(slo, { good: 100, total: 0, date_range: dateRange }); expect(errorBudget).toEqual({ initial: 0.001, // 0.1% @@ -22,7 +124,8 @@ describe('computeErrorBudget', () => { it("computes the error budget when 'good > total' events", () => { const slo = createSLO(); - const errorBudget = computeErrorBudget(slo, { good: 9999, total: 9 }); + const dateRange = toDateRange(slo.time_window); + const errorBudget = computeErrorBudget(slo, { good: 9999, total: 9, date_range: dateRange }); expect(errorBudget).toEqual({ initial: 0.001, @@ -33,7 +136,8 @@ describe('computeErrorBudget', () => { it('computes the error budget with all good events', () => { const slo = createSLO(); - const errorBudget = computeErrorBudget(slo, { good: 100, total: 100 }); + const dateRange = toDateRange(slo.time_window); + const errorBudget = computeErrorBudget(slo, { good: 100, total: 100, date_range: dateRange }); expect(errorBudget).toEqual({ initial: 0.001, @@ -44,7 +148,8 @@ describe('computeErrorBudget', () => { it('computes the error budget when exactly consumed', () => { const slo = createSLO(); - const errorBudget = computeErrorBudget(slo, { good: 999, total: 1000 }); + const dateRange = toDateRange(slo.time_window); + const errorBudget = computeErrorBudget(slo, { good: 999, total: 1000, date_range: dateRange }); expect(errorBudget).toEqual({ initial: 0.001, @@ -55,22 +160,24 @@ describe('computeErrorBudget', () => { it('computes the error budget with rounded values', () => { const slo = createSLO(); - const errorBudget = computeErrorBudget(slo, { good: 333, total: 777 }); + const dateRange = toDateRange(slo.time_window); + const errorBudget = computeErrorBudget(slo, { good: 333, total: 777, date_range: dateRange }); expect(errorBudget).toEqual({ initial: 0.001, - consumed: 571.428571, // i.e. 57142% consumed + consumed: 571.428571, // i.e. 57,142% consumed remaining: 0, }); }); it('computes the error budget with no good events', () => { const slo = createSLO(); - const errorBudget = computeErrorBudget(slo, { good: 0, total: 100 }); + const dateRange = toDateRange(slo.time_window); + const errorBudget = computeErrorBudget(slo, { good: 0, total: 100, date_range: dateRange }); expect(errorBudget).toEqual({ initial: 0.001, - consumed: 1000, // i.e. 100000% consumed + consumed: 1000, // i.e. 100,000% consumed remaining: 0, }); }); diff --git a/x-pack/plugins/observability/server/domain/services/compute_error_budget.ts b/x-pack/plugins/observability/server/domain/services/compute_error_budget.ts index 98ee17962b818e..68531d4f4cb0bc 100644 --- a/x-pack/plugins/observability/server/domain/services/compute_error_budget.ts +++ b/x-pack/plugins/observability/server/domain/services/compute_error_budget.ts @@ -5,14 +5,19 @@ * 2.0. */ -import { ErrorBudget, IndicatorData, SLO } from '../../types/models'; +import moment from 'moment'; +import { ErrorBudget, IndicatorData, SLO, toMomentUnitOfTime } from '../../types/models'; +import { + calendarAlignedTimeWindowSchema, + timeslicesBudgetingMethodSchema, +} from '../../types/schema'; import { toHighPrecision } from '../../utils/number'; +// More details about calculus: https://github.com/elastic/kibana/issues/143980 export function computeErrorBudget(slo: SLO, sliData: IndicatorData): ErrorBudget { - const goodEvents = sliData.good; - const totalEvents = sliData.total; + const { good, total, date_range: dateRange } = sliData; const initialErrorBudget = toHighPrecision(1 - slo.objective.target); - if (totalEvents === 0 || goodEvents >= totalEvents) { + if (total === 0 || good >= total) { return { initial: initialErrorBudget, consumed: 0, @@ -20,10 +25,28 @@ export function computeErrorBudget(slo: SLO, sliData: IndicatorData): ErrorBudge }; } - const consumedErrorBudget = toHighPrecision( - (totalEvents - goodEvents) / (totalEvents * initialErrorBudget) - ); + if ( + timeslicesBudgetingMethodSchema.is(slo.budgeting_method) && + calendarAlignedTimeWindowSchema.is(slo.time_window) + ) { + const dateRangeDurationInUnit = moment(dateRange.to).diff( + dateRange.from, + toMomentUnitOfTime(slo.objective.timeslice_window!.unit) + ); + const totalSlices = Math.ceil(dateRangeDurationInUnit / slo.objective.timeslice_window!.value); + const consumedErrorBudget = toHighPrecision( + (total - good) / (totalSlices * initialErrorBudget) + ); + const remainingErrorBudget = Math.max(toHighPrecision(1 - consumedErrorBudget), 0); + return { + initial: initialErrorBudget, + consumed: consumedErrorBudget, + remaining: remainingErrorBudget, + }; + } + + const consumedErrorBudget = toHighPrecision((total - good) / (total * initialErrorBudget)); const remainingErrorBudget = Math.max(toHighPrecision(1 - consumedErrorBudget), 0); return { diff --git a/x-pack/plugins/observability/server/domain/services/compute_sli.test.ts b/x-pack/plugins/observability/server/domain/services/compute_sli.test.ts index ba864fc1fea199..9d69539c72f70e 100644 --- a/x-pack/plugins/observability/server/domain/services/compute_sli.test.ts +++ b/x-pack/plugins/observability/server/domain/services/compute_sli.test.ts @@ -5,22 +5,24 @@ * 2.0. */ +import { DateRange } from '../../types/models'; import { computeSLI } from './compute_sli'; +const DATE_RANGE: DateRange = { from: new Date(), to: new Date() }; describe('computeSLI', () => { it('returns 0 when no total events', () => { - expect(computeSLI({ good: 100, total: 0 })).toEqual(0); + expect(computeSLI({ good: 100, total: 0, date_range: DATE_RANGE })).toEqual(0); }); it('returns the sli value', () => { - expect(computeSLI({ good: 100, total: 1000 })).toEqual(0.1); + expect(computeSLI({ good: 100, total: 1000, date_range: DATE_RANGE })).toEqual(0.1); }); it('returns 1 when good is greater than total events', () => { - expect(computeSLI({ good: 9999, total: 9 })).toEqual(1); + expect(computeSLI({ good: 9999, total: 9, date_range: DATE_RANGE })).toEqual(1); }); it('returns rounds the value to 6 digits', () => { - expect(computeSLI({ good: 33, total: 90 })).toEqual(0.366667); + expect(computeSLI({ good: 33, total: 90, date_range: DATE_RANGE })).toEqual(0.366667); }); }); diff --git a/x-pack/plugins/observability/server/domain/services/compute_sli.ts b/x-pack/plugins/observability/server/domain/services/compute_sli.ts index 2def35dc37329b..6a0f8857376335 100644 --- a/x-pack/plugins/observability/server/domain/services/compute_sli.ts +++ b/x-pack/plugins/observability/server/domain/services/compute_sli.ts @@ -9,15 +9,14 @@ import { IndicatorData } from '../../types/models'; import { toHighPrecision } from '../../utils/number'; export function computeSLI(sliData: IndicatorData): number { - const goodEvents = sliData.good; - const totalEvents = sliData.total; - if (totalEvents === 0) { + const { good, total } = sliData; + if (total === 0) { return 0; } - if (goodEvents >= totalEvents) { + if (good >= total) { return 1; } - return toHighPrecision(goodEvents / totalEvents); + return toHighPrecision(good / total); } diff --git a/x-pack/plugins/observability/server/domain/services/date_range.ts b/x-pack/plugins/observability/server/domain/services/date_range.ts index e556d85a09f6fb..2c23d0672fa31d 100644 --- a/x-pack/plugins/observability/server/domain/services/date_range.ts +++ b/x-pack/plugins/observability/server/domain/services/date_range.ts @@ -7,16 +7,11 @@ import { assertNever } from '@kbn/std'; import moment from 'moment'; -import { toMomentUnitOfTime } from '../../types/models'; +import { DateRange, toMomentUnitOfTime } from '../../types/models'; import type { TimeWindow } from '../../types/models/time_window'; import { calendarAlignedTimeWindowSchema, rollingTimeWindowSchema } from '../../types/schema'; -export interface DateRange { - from: Date; - to: Date; -} - export const toDateRange = (timeWindow: TimeWindow, currentDate: Date = new Date()): DateRange => { if (calendarAlignedTimeWindowSchema.is(timeWindow)) { const unit = toMomentUnitOfTime(timeWindow.duration.unit); diff --git a/x-pack/plugins/observability/server/services/slo/fixtures/date.ts b/x-pack/plugins/observability/server/services/slo/fixtures/date.ts new file mode 100644 index 00000000000000..b62a1fd918e511 --- /dev/null +++ b/x-pack/plugins/observability/server/services/slo/fixtures/date.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. + */ + +const DAYS_IN_MILLISECONDS = 24 * 60 * 60 * 1000; + +export function twoDaysAgo(): Date { + const now = new Date(); + now.setTime(now.getTime() - 2 * DAYS_IN_MILLISECONDS); + return now; +} diff --git a/x-pack/plugins/observability/server/services/slo/fixtures/duration.ts b/x-pack/plugins/observability/server/services/slo/fixtures/duration.ts new file mode 100644 index 00000000000000..be0eb1407145ce --- /dev/null +++ b/x-pack/plugins/observability/server/services/slo/fixtures/duration.ts @@ -0,0 +1,20 @@ +/* + * 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 { Duration, DurationUnit } from '../../../types/models'; + +export function sevenDays(): Duration { + return new Duration(7, DurationUnit.d); +} + +export function oneWeek(): Duration { + return new Duration(1, DurationUnit.w); +} + +export function oneMinute(): Duration { + return new Duration(1, DurationUnit.m); +} diff --git a/x-pack/plugins/observability/server/services/slo/fixtures/slo.ts b/x-pack/plugins/observability/server/services/slo/fixtures/slo.ts index 4c4139c0e9120a..d1d600c7706e2e 100644 --- a/x-pack/plugins/observability/server/services/slo/fixtures/slo.ts +++ b/x-pack/plugins/observability/server/services/slo/fixtures/slo.ts @@ -7,7 +7,6 @@ import { cloneDeep } from 'lodash'; import uuid from 'uuid'; -import { Duration, DurationUnit } from '../../../types/models/duration'; import { APMTransactionDurationIndicator, @@ -17,6 +16,8 @@ import { SLO, } from '../../../types/models'; import { CreateSLOParams } from '../../../types/rest_specs'; +import { sevenDays } from './duration'; +import { sevenDaysRolling } from './time_window'; export const createAPMTransactionErrorRateIndicator = ( params: Partial = {} @@ -62,10 +63,7 @@ export const createKQLCustomIndicator = ( const defaultSLO: Omit = { name: 'irrelevant', description: 'irrelevant', - time_window: { - duration: new Duration(7, DurationUnit.d), - is_rolling: true, - }, + time_window: sevenDaysRolling(), budgeting_method: 'occurrences', objective: { target: 0.999, @@ -93,7 +91,7 @@ export const createSLO = (params: Partial = {}): SLO => { export const createSLOWithCalendarTimeWindow = (params: Partial = {}): SLO => { return createSLO({ time_window: { - duration: new Duration(7, DurationUnit.d), + duration: sevenDays(), calendar: { start_time: new Date('2022-10-01T00:00:00.000Z') }, }, ...params, diff --git a/x-pack/plugins/observability/server/services/slo/fixtures/time_window.ts b/x-pack/plugins/observability/server/services/slo/fixtures/time_window.ts new file mode 100644 index 00000000000000..6f9228bc9304f7 --- /dev/null +++ b/x-pack/plugins/observability/server/services/slo/fixtures/time_window.ts @@ -0,0 +1,25 @@ +/* + * 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 { TimeWindow } from '../../../types/models/time_window'; +import { oneWeek, sevenDays } from './duration'; + +export function sevenDaysRolling(): TimeWindow { + return { + duration: sevenDays(), + is_rolling: true, + }; +} + +export function weeklyCalendarAligned(startTime: Date): TimeWindow { + return { + duration: oneWeek(), + calendar: { + start_time: startTime, + }, + }; +} diff --git a/x-pack/plugins/observability/server/services/slo/get_slo.test.ts b/x-pack/plugins/observability/server/services/slo/get_slo.test.ts index f78f04c37f38e1..568afe7799ba47 100644 --- a/x-pack/plugins/observability/server/services/slo/get_slo.test.ts +++ b/x-pack/plugins/observability/server/services/slo/get_slo.test.ts @@ -5,6 +5,7 @@ * 2.0. */ +import { toDateRange } from '../../domain/services'; import { createAPMTransactionErrorRateIndicator, createSLO } from './fixtures/slo'; import { GetSLO } from './get_slo'; import { createSLIClientMock, createSLORepositoryMock } from './mocks'; @@ -26,7 +27,11 @@ describe('GetSLO', () => { it('retrieves the SLO from the repository', async () => { const slo = createSLO({ indicator: createAPMTransactionErrorRateIndicator() }); mockRepository.findById.mockResolvedValueOnce(slo); - mockSLIClient.fetchCurrentSLIData.mockResolvedValueOnce({ good: 9999, total: 10000 }); + mockSLIClient.fetchCurrentSLIData.mockResolvedValueOnce({ + good: 9999, + total: 10000, + date_range: toDateRange(slo.time_window), + }); const result = await getSLO.execute(slo.id); diff --git a/x-pack/plugins/observability/server/services/slo/sli_client.test.ts b/x-pack/plugins/observability/server/services/slo/sli_client.test.ts index 7729bab2f90554..359b74cd58cca2 100644 --- a/x-pack/plugins/observability/server/services/slo/sli_client.test.ts +++ b/x-pack/plugins/observability/server/services/slo/sli_client.test.ts @@ -6,6 +6,8 @@ */ import { ElasticsearchClientMock, elasticsearchServiceMock } from '@kbn/core/server/mocks'; +import moment from 'moment'; + import { SLO_DESTINATION_INDEX_NAME } from '../../assets/constants'; import { toDateRange } from '../../domain/services'; import { InternalQueryError } from '../../errors'; @@ -79,7 +81,15 @@ describe('SLIClient', () => { const result = await sliClient.fetchCurrentSLIData(slo); - expect(result).toEqual({ good: 90, total: 100 }); + const expectedDateRange = toDateRange(slo.time_window); + + expect(result).toMatchObject({ + good: 90, + total: 100, + }); + expect(result.date_range.from).toBeClose(expectedDateRange.from); + expect(result.date_range.to).toBeClose(expectedDateRange.to); + expect(esClientMock.search).toHaveBeenCalledWith( expect.objectContaining({ index: `${SLO_DESTINATION_INDEX_NAME}*`, @@ -90,7 +100,7 @@ describe('SLIClient', () => { { term: { 'slo.revision': slo.revision } }, { range: { - '@timestamp': { gte: 'now-7d/m', lt: 'now/m' }, + '@timestamp': { gte: expect.anything(), lt: expect.anything() }, }, }, ], @@ -138,7 +148,9 @@ describe('SLIClient', () => { const expectedDateRange = toDateRange(slo.time_window); - expect(result).toEqual({ good: 90, total: 100 }); + expect(result).toMatchObject({ good: 90, total: 100 }); + expect(result.date_range.from).toBeClose(expectedDateRange.from); + expect(result.date_range.to).toBeClose(expectedDateRange.to); expect(esClientMock.search).toHaveBeenCalledWith( expect.objectContaining({ index: `${SLO_DESTINATION_INDEX_NAME}*`, @@ -239,8 +251,9 @@ describe('SLIClient', () => { const result = await sliClient.fetchCurrentSLIData(slo); const expectedDateRange = toDateRange(slo.time_window); - - expect(result).toEqual({ good: 90, total: 100 }); + expect(result).toMatchObject({ good: 90, total: 100 }); + expect(result.date_range.from).toBeClose(expectedDateRange.from); + expect(result.date_range.to).toBeClose(expectedDateRange.to); expect(esClientMock.search).toHaveBeenCalledWith( expect.objectContaining({ index: `${SLO_DESTINATION_INDEX_NAME}*`, @@ -345,7 +358,10 @@ describe('SLIClient', () => { const result = await sliClient.fetchCurrentSLIData(slo); - expect(result).toEqual({ good: 90, total: 100 }); + const expectedDateRange = toDateRange(slo.time_window); + expect(result).toMatchObject({ good: 90, total: 100 }); + expect(result.date_range.from).toBeClose(expectedDateRange.from); + expect(result.date_range.to).toBeClose(expectedDateRange.to); expect(esClientMock.search).toHaveBeenCalledWith( expect.objectContaining({ index: `${SLO_DESTINATION_INDEX_NAME}*`, @@ -356,10 +372,7 @@ describe('SLIClient', () => { { term: { 'slo.revision': slo.revision } }, { range: { - '@timestamp': { - gte: 'now-1M/m', - lt: 'now/m', - }, + '@timestamp': { gte: expect.anything(), lt: expect.anything() }, }, }, ], @@ -417,3 +430,23 @@ describe('SLIClient', () => { }); }); }); + +expect.extend({ + toBeClose(received: Date | string, actual: Date | string) { + const receivedDate = moment(received); + const actualDate = moment(actual); + return { + message: () => + `expected ${receivedDate.toISOString()} to be close to ${actualDate.toISOString()}`, + pass: Math.abs(receivedDate.diff(actualDate, 'seconds')) <= 120, + }; + }, +}); +declare global { + // eslint-disable-next-line @typescript-eslint/no-namespace + namespace jest { + interface Matchers { + toBeClose(actual: Date | string): R; + } + } +} diff --git a/x-pack/plugins/observability/server/services/slo/sli_client.ts b/x-pack/plugins/observability/server/services/slo/sli_client.ts index dc97aa1c651f0f..a1cc948a313682 100644 --- a/x-pack/plugins/observability/server/services/slo/sli_client.ts +++ b/x-pack/plugins/observability/server/services/slo/sli_client.ts @@ -11,8 +11,7 @@ import { assertNever } from '@kbn/std'; import { SLO_DESTINATION_INDEX_NAME } from '../../assets/constants'; import { toDateRange } from '../../domain/services/date_range'; import { InternalQueryError } from '../../errors'; -import { Duration, IndicatorData, SLO } from '../../types/models'; -import { calendarAlignedTimeWindowSchema, rollingTimeWindowSchema } from '../../types/schema'; +import { DateRange, Duration, IndicatorData, SLO } from '../../types/models'; import { occurencesBudgetingMethodSchema, timeslicesBudgetingMethodSchema, @@ -28,21 +27,22 @@ export class DefaultSLIClient implements SLIClient { constructor(private esClient: ElasticsearchClient) {} async fetchCurrentSLIData(slo: SLO): Promise { + const dateRange = toDateRange(slo.time_window); if (occurencesBudgetingMethodSchema.is(slo.budgeting_method)) { const result = await this.esClient.search>({ - ...commonQuery(slo), + ...commonQuery(slo, dateRange), aggs: { good: { sum: { field: 'slo.numerator' } }, total: { sum: { field: 'slo.denominator' } }, }, }); - return handleResult(result.aggregations); + return handleResult(result.aggregations, dateRange); } if (timeslicesBudgetingMethodSchema.is(slo.budgeting_method)) { const result = await this.esClient.search>({ - ...commonQuery(slo), + ...commonQuery(slo, dateRange), aggs: { slices: { date_histogram: { @@ -82,34 +82,14 @@ export class DefaultSLIClient implements SLIClient { }, }); - return handleResult(result.aggregations); + return handleResult(result.aggregations, dateRange); } assertNever(slo.budgeting_method); } } -function fromSLOTimeWindowToEsRange(slo: SLO): { gte: string; lt: string } { - if (calendarAlignedTimeWindowSchema.is(slo.time_window)) { - const dateRange = toDateRange(slo.time_window); - - return { - gte: `${dateRange.from.toISOString()}`, - lt: `${dateRange.to.toISOString()}`, - }; - } - - if (rollingTimeWindowSchema.is(slo.time_window)) { - return { - gte: `now-${slo.time_window.duration.value}${slo.time_window.duration.unit}/m`, - lt: `now/m`, - }; - } - - assertNever(slo.time_window); -} - -function commonQuery(slo: SLO) { +function commonQuery(slo: SLO, dateRange: DateRange) { return { size: 0, index: `${SLO_DESTINATION_INDEX_NAME}*`, @@ -118,7 +98,11 @@ function commonQuery(slo: SLO) { filter: [ { term: { 'slo.id': slo.id } }, { term: { 'slo.revision': slo.revision } }, - { range: { '@timestamp': fromSLOTimeWindowToEsRange(slo) } }, + { + range: { + '@timestamp': { gte: dateRange.from.toISOString(), lt: dateRange.to.toISOString() }, + }, + }, ], }, }, @@ -126,7 +110,8 @@ function commonQuery(slo: SLO) { } function handleResult( - aggregations: Record | undefined + aggregations: Record | undefined, + dateRange: DateRange ): IndicatorData { const good = aggregations?.good; const total = aggregations?.total; @@ -135,6 +120,7 @@ function handleResult( } return { + date_range: dateRange, good: good.value, total: total.value, }; diff --git a/x-pack/plugins/observability/server/types/models/common.ts b/x-pack/plugins/observability/server/types/models/common.ts new file mode 100644 index 00000000000000..7f672136c91941 --- /dev/null +++ b/x-pack/plugins/observability/server/types/models/common.ts @@ -0,0 +1,12 @@ +/* + * 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 * as t from 'io-ts'; +import { dateRangeSchema } from '../schema'; + +type DateRange = t.TypeOf; + +export type { DateRange }; diff --git a/x-pack/plugins/observability/server/types/models/index.ts b/x-pack/plugins/observability/server/types/models/index.ts index d27c9f27c868b6..443dea8f09d6d9 100644 --- a/x-pack/plugins/observability/server/types/models/index.ts +++ b/x-pack/plugins/observability/server/types/models/index.ts @@ -9,3 +9,4 @@ export * from './slo'; export * from './indicators'; export * from './error_budget'; export * from './duration'; +export * from './common'; diff --git a/x-pack/plugins/observability/server/types/schema/common.ts b/x-pack/plugins/observability/server/types/schema/common.ts index d565b0eb5f31f2..b3265178d52602 100644 --- a/x-pack/plugins/observability/server/types/schema/common.ts +++ b/x-pack/plugins/observability/server/types/schema/common.ts @@ -29,4 +29,6 @@ const errorBudgetSchema = t.type({ remaining: t.number, }); -export { allOrAnyString, ALL_VALUE, dateType, errorBudgetSchema }; +const dateRangeSchema = t.type({ from: dateType, to: dateType }); + +export { allOrAnyString, ALL_VALUE, dateType, errorBudgetSchema, dateRangeSchema }; diff --git a/x-pack/plugins/observability/server/types/schema/indicators.ts b/x-pack/plugins/observability/server/types/schema/indicators.ts index ab343e5b7b995d..46d3e8694e684c 100644 --- a/x-pack/plugins/observability/server/types/schema/indicators.ts +++ b/x-pack/plugins/observability/server/types/schema/indicators.ts @@ -6,7 +6,7 @@ */ import * as t from 'io-ts'; -import { allOrAnyString } from './common'; +import { allOrAnyString, dateRangeSchema } from './common'; const apmTransactionDurationIndicatorTypeSchema = t.literal('slo.apm.transaction_duration'); const apmTransactionDurationIndicatorSchema = t.type({ @@ -49,7 +49,11 @@ const kqlCustomIndicatorSchema = t.type({ }), }); -const indicatorDataSchema = t.type({ good: t.number, total: t.number }); +const indicatorDataSchema = t.type({ + date_range: dateRangeSchema, + good: t.number, + total: t.number, +}); const indicatorTypesSchema = t.union([ apmTransactionDurationIndicatorTypeSchema, diff --git a/x-pack/plugins/profiling/server/routes/stacktrace.ts b/x-pack/plugins/profiling/server/routes/stacktrace.ts index 8c5b668e253518..1dc040c3d3f194 100644 --- a/x-pack/plugins/profiling/server/routes/stacktrace.ts +++ b/x-pack/plugins/profiling/server/routes/stacktrace.ts @@ -36,6 +36,9 @@ import { ProjectTimeQuery } from './query'; const BASE64_FRAME_ID_LENGTH = 32; +const CACHE_MAX_ITEMS = 100000; +const CACHE_TTL_MILLISECONDS = 1000 * 60 * 5; + export type EncodedStackTrace = DedotObject<{ // This field is a base64-encoded byte string. The string represents a // serialized list of frame IDs in which the order of frames are @@ -270,7 +273,10 @@ export async function mgetStackTraces({ return { stackTraces, totalFrames, stackFrameDocIDs, executableDocIDs }; } -const frameLRU = new LRUCache({ max: 100000 }); +const frameLRU = new LRUCache({ + max: CACHE_MAX_ITEMS, + maxAge: CACHE_TTL_MILLISECONDS, +}); export async function mgetStackFrames({ logger, @@ -339,7 +345,10 @@ export async function mgetStackFrames({ return stackFrames; } -const executableLRU = new LRUCache({ max: 100000 }); +const executableLRU = new LRUCache({ + max: CACHE_MAX_ITEMS, + maxAge: CACHE_TTL_MILLISECONDS, +}); export async function mgetExecutables({ logger, diff --git a/x-pack/plugins/stack_alerts/public/index.ts b/x-pack/plugins/stack_alerts/public/index.ts index f7dc42da7e50c6..d043883d6e2481 100644 --- a/x-pack/plugins/stack_alerts/public/index.ts +++ b/x-pack/plugins/stack_alerts/public/index.ts @@ -5,7 +5,6 @@ * 2.0. */ -import { PluginInitializerContext } from '@kbn/core/public'; import { StackAlertsPublicPlugin } from './plugin'; -export const plugin = (ctx: PluginInitializerContext) => new StackAlertsPublicPlugin(ctx); +export const plugin = () => new StackAlertsPublicPlugin(); diff --git a/x-pack/plugins/stack_alerts/public/plugin.tsx b/x-pack/plugins/stack_alerts/public/plugin.tsx index b7a81e1b0f6bbd..88b1f9e06723e3 100644 --- a/x-pack/plugins/stack_alerts/public/plugin.tsx +++ b/x-pack/plugins/stack_alerts/public/plugin.tsx @@ -5,11 +5,10 @@ * 2.0. */ -import { CoreSetup, Plugin, PluginInitializerContext } from '@kbn/core/public'; +import { CoreSetup, Plugin } from '@kbn/core/public'; import { TriggersAndActionsUIPublicPluginSetup } from '@kbn/triggers-actions-ui-plugin/public'; import { PluginSetupContract as AlertingSetup } from '@kbn/alerting-plugin/public'; -import { registerAlertTypes } from './alert_types'; -import { Config } from '../common'; +import { registerRuleTypes } from './rule_types'; export type Setup = void; export type Start = void; @@ -20,16 +19,9 @@ export interface StackAlertsPublicSetupDeps { } export class StackAlertsPublicPlugin implements Plugin { - private initializerContext: PluginInitializerContext; - - constructor(initializerContext: PluginInitializerContext) { - this.initializerContext = initializerContext; - } - public setup(core: CoreSetup, { triggersActionsUi, alerting }: StackAlertsPublicSetupDeps) { - registerAlertTypes({ + registerRuleTypes({ ruleTypeRegistry: triggersActionsUi.ruleTypeRegistry, - config: this.initializerContext.config.get(), alerting, }); } diff --git a/x-pack/plugins/stack_alerts/public/alert_types/components/data_view_select_popover.test.tsx b/x-pack/plugins/stack_alerts/public/rule_types/components/data_view_select_popover.test.tsx similarity index 100% rename from x-pack/plugins/stack_alerts/public/alert_types/components/data_view_select_popover.test.tsx rename to x-pack/plugins/stack_alerts/public/rule_types/components/data_view_select_popover.test.tsx diff --git a/x-pack/plugins/stack_alerts/public/alert_types/components/data_view_select_popover.tsx b/x-pack/plugins/stack_alerts/public/rule_types/components/data_view_select_popover.tsx similarity index 100% rename from x-pack/plugins/stack_alerts/public/alert_types/components/data_view_select_popover.tsx rename to x-pack/plugins/stack_alerts/public/rule_types/components/data_view_select_popover.tsx diff --git a/x-pack/plugins/stack_alerts/public/alert_types/components/index_select_popover.test.tsx b/x-pack/plugins/stack_alerts/public/rule_types/components/index_select_popover.test.tsx similarity index 100% rename from x-pack/plugins/stack_alerts/public/alert_types/components/index_select_popover.test.tsx rename to x-pack/plugins/stack_alerts/public/rule_types/components/index_select_popover.test.tsx diff --git a/x-pack/plugins/stack_alerts/public/alert_types/components/index_select_popover.tsx b/x-pack/plugins/stack_alerts/public/rule_types/components/index_select_popover.tsx similarity index 100% rename from x-pack/plugins/stack_alerts/public/alert_types/components/index_select_popover.tsx rename to x-pack/plugins/stack_alerts/public/rule_types/components/index_select_popover.tsx diff --git a/x-pack/plugins/stack_alerts/public/alert_types/es_query/constants.ts b/x-pack/plugins/stack_alerts/public/rule_types/es_query/constants.ts similarity index 100% rename from x-pack/plugins/stack_alerts/public/alert_types/es_query/constants.ts rename to x-pack/plugins/stack_alerts/public/rule_types/es_query/constants.ts diff --git a/x-pack/plugins/stack_alerts/public/alert_types/es_query/expression/es_query_expression.test.tsx b/x-pack/plugins/stack_alerts/public/rule_types/es_query/expression/es_query_expression.test.tsx similarity index 95% rename from x-pack/plugins/stack_alerts/public/alert_types/es_query/expression/es_query_expression.test.tsx rename to x-pack/plugins/stack_alerts/public/rule_types/es_query/expression/es_query_expression.test.tsx index 8a685dd056ca6e..852cc6cb55e05a 100644 --- a/x-pack/plugins/stack_alerts/public/alert_types/es_query/expression/es_query_expression.test.tsx +++ b/x-pack/plugins/stack_alerts/public/rule_types/es_query/expression/es_query_expression.test.tsx @@ -20,7 +20,7 @@ import { ISearchStart, } from '@kbn/data-plugin/public'; import { useKibana } from '@kbn/kibana-react-plugin/public'; -import { EsQueryAlertParams, SearchType } from '../types'; +import { EsQueryRuleParams, SearchType } from '../types'; import { EsQueryExpression } from './es_query_expression'; jest.mock('@kbn/kibana-react-plugin/public', () => ({ @@ -106,7 +106,7 @@ const dataViewMock = dataViewPluginMocks.createStartContract(); const unifiedSearchMock = unifiedSearchPluginMock.createStartContract(); const chartsStartMock = chartPluginMock.createStartContract(); -const defaultEsQueryExpressionParams: EsQueryAlertParams = { +const defaultEsQueryExpressionParams: EsQueryRuleParams = { size: 100, thresholdComparator: '>', threshold: [0], @@ -118,7 +118,7 @@ const defaultEsQueryExpressionParams: EsQueryAlertParams = { excludeHitsFromPreviousRun: true, }; -describe('EsQueryAlertTypeExpression', () => { +describe('EsQueryRuleTypeExpression', () => { beforeAll(() => { (useKibana as jest.Mock).mockReturnValue({ services: { @@ -135,7 +135,7 @@ describe('EsQueryAlertTypeExpression', () => { }); }); - async function setup(alertParams: EsQueryAlertParams) { + async function setup(alertParams: EsQueryRuleParams) { const errors = { index: [], esQuery: [], @@ -172,7 +172,7 @@ describe('EsQueryAlertTypeExpression', () => { return wrapper; } - test('should render EsQueryAlertTypeExpression with expected components', async () => { + test('should render EsQueryRuleTypeExpression with expected components', async () => { const wrapper = await setup(defaultEsQueryExpressionParams); expect(wrapper.find('[data-test-subj="indexSelectPopover"]').exists()).toBeTruthy(); expect(wrapper.find('[data-test-subj="sizeValueExpression"]').exists()).toBeTruthy(); @@ -197,7 +197,7 @@ describe('EsQueryAlertTypeExpression', () => { const wrapper = await setup({ ...defaultEsQueryExpressionParams, timeField: null, - } as unknown as EsQueryAlertParams); + } as unknown as EsQueryRuleParams); const testQueryButton = wrapper.find('EuiButton[data-test-subj="testQuery"]'); expect(testQueryButton.exists()).toBeTruthy(); expect(testQueryButton.prop('disabled')).toBe(true); diff --git a/x-pack/plugins/stack_alerts/public/alert_types/es_query/expression/es_query_expression.tsx b/x-pack/plugins/stack_alerts/public/rule_types/es_query/expression/es_query_expression.tsx similarity index 91% rename from x-pack/plugins/stack_alerts/public/alert_types/es_query/expression/es_query_expression.tsx rename to x-pack/plugins/stack_alerts/public/rule_types/es_query/expression/es_query_expression.tsx index 37369d60335a5a..e98c547a6120cd 100644 --- a/x-pack/plugins/stack_alerts/public/alert_types/es_query/expression/es_query_expression.tsx +++ b/x-pack/plugins/stack_alerts/public/rule_types/es_query/expression/es_query_expression.tsx @@ -19,7 +19,7 @@ import { getFields, RuleTypeParamsExpressionProps } from '@kbn/triggers-actions- import { parseDuration } from '@kbn/alerting-plugin/common'; import { hasExpressionValidationErrors } from '../validation'; import { buildSortedEventsQuery } from '../../../../common/build_sorted_events_query'; -import { EsQueryAlertParams, SearchType } from '../types'; +import { EsQueryRuleParams, SearchType } from '../types'; import { IndexSelectPopover } from '../../components/index_select_popover'; import { DEFAULT_VALUES } from '../constants'; import { RuleCommonExpressions } from '../rule_common_expressions'; @@ -33,7 +33,7 @@ interface KibanaDeps { } export const EsQueryExpression: React.FC< - RuleTypeParamsExpressionProps> + RuleTypeParamsExpressionProps> > = ({ ruleParams, setRuleParams, setRuleProperty, errors, data }) => { const { index, @@ -47,19 +47,20 @@ export const EsQueryExpression: React.FC< excludeHitsFromPreviousRun, } = ruleParams; - const [currentRuleParams, setCurrentRuleParams] = useState< - EsQueryAlertParams - >({ - ...ruleParams, - timeWindowSize: timeWindowSize ?? DEFAULT_VALUES.TIME_WINDOW_SIZE, - timeWindowUnit: timeWindowUnit ?? DEFAULT_VALUES.TIME_WINDOW_UNIT, - threshold: threshold ?? DEFAULT_VALUES.THRESHOLD, - thresholdComparator: thresholdComparator ?? DEFAULT_VALUES.THRESHOLD_COMPARATOR, - size: size ?? DEFAULT_VALUES.SIZE, - esQuery: esQuery ?? DEFAULT_VALUES.QUERY, - searchType: SearchType.esQuery, - excludeHitsFromPreviousRun: excludeHitsFromPreviousRun ?? DEFAULT_VALUES.EXCLUDE_PREVIOUS_HITS, - }); + const [currentRuleParams, setCurrentRuleParams] = useState>( + { + ...ruleParams, + timeWindowSize: timeWindowSize ?? DEFAULT_VALUES.TIME_WINDOW_SIZE, + timeWindowUnit: timeWindowUnit ?? DEFAULT_VALUES.TIME_WINDOW_UNIT, + threshold: threshold ?? DEFAULT_VALUES.THRESHOLD, + thresholdComparator: thresholdComparator ?? DEFAULT_VALUES.THRESHOLD_COMPARATOR, + size: size ?? DEFAULT_VALUES.SIZE, + esQuery: esQuery ?? DEFAULT_VALUES.QUERY, + searchType: SearchType.esQuery, + excludeHitsFromPreviousRun: + excludeHitsFromPreviousRun ?? DEFAULT_VALUES.EXCLUDE_PREVIOUS_HITS, + } + ); const setParam = useCallback( (paramField: string, paramValue: unknown) => { @@ -178,7 +179,6 @@ export const EsQueryExpression: React.FC< }} onTimeFieldChange={(updatedTimeField: string) => setParam('timeField', updatedTimeField)} /> - diff --git a/x-pack/plugins/stack_alerts/public/alert_types/es_query/expression/expression.test.tsx b/x-pack/plugins/stack_alerts/public/rule_types/es_query/expression/expression.test.tsx similarity index 90% rename from x-pack/plugins/stack_alerts/public/alert_types/es_query/expression/expression.test.tsx rename to x-pack/plugins/stack_alerts/public/rule_types/es_query/expression/expression.test.tsx index 78660fc2547b32..b21646496f14a1 100644 --- a/x-pack/plugins/stack_alerts/public/alert_types/es_query/expression/expression.test.tsx +++ b/x-pack/plugins/stack_alerts/public/rule_types/es_query/expression/expression.test.tsx @@ -13,8 +13,8 @@ import { httpServiceMock } from '@kbn/core/public/mocks'; import { dataPluginMock } from '@kbn/data-plugin/public/mocks'; import { dataViewPluginMocks } from '@kbn/data-views-plugin/public/mocks'; import { unifiedSearchPluginMock } from '@kbn/unified-search-plugin/public/mocks'; -import { CommonAlertParams, EsQueryAlertParams, SearchType } from '../types'; -import { EsQueryAlertTypeExpression } from './expression'; +import { CommonRuleParams, EsQueryRuleParams, SearchType } from '../types'; +import { EsQueryRuleTypeExpression } from './expression'; import { chartPluginMock } from '@kbn/charts-plugin/public/mocks'; import { Subject } from 'rxjs'; import { ISearchSource } from '@kbn/data-plugin/common'; @@ -42,7 +42,7 @@ jest.mock('@kbn/kibana-react-plugin/public', () => { }; }); -const defaultEsQueryRuleParams: EsQueryAlertParams = { +const defaultEsQueryRuleParams: EsQueryRuleParams = { size: 100, thresholdComparator: '>', threshold: [0], @@ -54,7 +54,7 @@ const defaultEsQueryRuleParams: EsQueryAlertParams = { searchType: SearchType.esQuery, excludeHitsFromPreviousRun: true, }; -const defaultSearchSourceRuleParams: EsQueryAlertParams = { +const defaultSearchSourceRuleParams: EsQueryRuleParams = { size: 100, thresholdComparator: '>', threshold: [0], @@ -136,9 +136,9 @@ dataMock.query.savedQueries.findSavedQueries = jest.fn(() => (httpMock.post as jest.Mock).mockImplementation(() => Promise.resolve({ fields: [] })); const Wrapper: React.FC<{ - ruleParams: EsQueryAlertParams | EsQueryAlertParams; + ruleParams: EsQueryRuleParams | EsQueryRuleParams; }> = ({ ruleParams }) => { - const [currentRuleParams, setCurrentRuleParams] = useState(ruleParams); + const [currentRuleParams, setCurrentRuleParams] = useState(ruleParams); const errors = { index: [], esQuery: [], @@ -150,7 +150,7 @@ const Wrapper: React.FC<{ }; return ( - { if (name === 'params') { - setCurrentRuleParams(params as CommonAlertParams); + setCurrentRuleParams(params as CommonRuleParams); } }} errors={errors} @@ -175,7 +175,7 @@ const Wrapper: React.FC<{ }; const setup = ( - ruleParams: EsQueryAlertParams | EsQueryAlertParams + ruleParams: EsQueryRuleParams | EsQueryRuleParams ) => { return mountWithIntl( { +describe('EsQueryRuleTypeExpression', () => { test('should render options by default', async () => { - const wrapper = setup({} as EsQueryAlertParams); + const wrapper = setup({} as EsQueryRuleParams); expect(findTestSubject(wrapper, 'queryFormTypeChooserTitle').exists()).toBeTruthy(); expect(findTestSubject(wrapper, 'queryFormType_searchSource').exists()).toBeTruthy(); expect(findTestSubject(wrapper, 'queryFormType_esQuery').exists()).toBeTruthy(); @@ -201,7 +201,7 @@ describe('EsQueryAlertTypeExpression', () => { }); test('should switch to QueryDSL form type on selection and return back on cancel', async () => { - let wrapper = setup({} as EsQueryAlertParams); + let wrapper = setup({} as EsQueryRuleParams); await act(async () => { findTestSubject(wrapper, 'queryFormType_esQuery').simulate('click'); }); @@ -220,7 +220,7 @@ describe('EsQueryAlertTypeExpression', () => { }); test('should switch to KQL or Lucene form type on selection and return back on cancel', async () => { - let wrapper = setup({} as EsQueryAlertParams); + let wrapper = setup({} as EsQueryRuleParams); await act(async () => { findTestSubject(wrapper, 'queryFormType_searchSource').simulate('click'); }); diff --git a/x-pack/plugins/stack_alerts/public/alert_types/es_query/expression/expression.tsx b/x-pack/plugins/stack_alerts/public/rule_types/es_query/expression/expression.tsx similarity index 91% rename from x-pack/plugins/stack_alerts/public/alert_types/es_query/expression/expression.tsx rename to x-pack/plugins/stack_alerts/public/rule_types/es_query/expression/expression.tsx index 8a56fdc4f41e3f..4fde89d994c9e1 100644 --- a/x-pack/plugins/stack_alerts/public/alert_types/es_query/expression/expression.tsx +++ b/x-pack/plugins/stack_alerts/public/rule_types/es_query/expression/expression.tsx @@ -11,11 +11,11 @@ import 'brace/theme/github'; import { EuiCallOut, EuiHorizontalRule, EuiSpacer } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { RuleTypeParamsExpressionProps } from '@kbn/triggers-actions-ui-plugin/public'; -import { EsQueryAlertParams, SearchType } from '../types'; +import { EsQueryRuleParams, SearchType } from '../types'; import { SearchSourceExpression, SearchSourceExpressionProps } from './search_source_expression'; import { EsQueryExpression } from './es_query_expression'; import { QueryFormTypeChooser } from './query_form_type_chooser'; -import { isSearchSourceAlert } from '../util'; +import { isSearchSourceRule } from '../util'; import { EXPRESSION_ERROR_KEYS } from '../constants'; function areSearchSourceExpressionPropsEqual( @@ -32,11 +32,11 @@ const SearchSourceExpressionMemoized = memo( areSearchSourceExpressionPropsEqual ); -export const EsQueryAlertTypeExpression: React.FunctionComponent< - RuleTypeParamsExpressionProps +export const EsQueryRuleTypeExpression: React.FunctionComponent< + RuleTypeParamsExpressionProps > = (props) => { const { ruleParams, errors, setRuleProperty, setRuleParams } = props; - const isSearchSource = isSearchSourceAlert(ruleParams); + const isSearchSource = isSearchSourceRule(ruleParams); const isManagementPage = useRef(!Object.keys(ruleParams).length).current; const formTypeSelected = useCallback( diff --git a/x-pack/plugins/stack_alerts/public/alert_types/es_query/expression/index.ts b/x-pack/plugins/stack_alerts/public/rule_types/es_query/expression/index.ts similarity index 75% rename from x-pack/plugins/stack_alerts/public/alert_types/es_query/expression/index.ts rename to x-pack/plugins/stack_alerts/public/rule_types/es_query/expression/index.ts index ee3eb832997480..a0df53489cfb2d 100644 --- a/x-pack/plugins/stack_alerts/public/alert_types/es_query/expression/index.ts +++ b/x-pack/plugins/stack_alerts/public/rule_types/es_query/expression/index.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { EsQueryAlertTypeExpression } from './expression'; +import { EsQueryRuleTypeExpression } from './expression'; // eslint-disable-next-line import/no-default-export -export default EsQueryAlertTypeExpression; +export default EsQueryRuleTypeExpression; diff --git a/x-pack/plugins/stack_alerts/public/alert_types/es_query/expression/query_form_type_chooser.tsx b/x-pack/plugins/stack_alerts/public/rule_types/es_query/expression/query_form_type_chooser.tsx similarity index 100% rename from x-pack/plugins/stack_alerts/public/alert_types/es_query/expression/query_form_type_chooser.tsx rename to x-pack/plugins/stack_alerts/public/rule_types/es_query/expression/query_form_type_chooser.tsx diff --git a/x-pack/plugins/stack_alerts/public/alert_types/es_query/expression/search_source_expression.scss b/x-pack/plugins/stack_alerts/public/rule_types/es_query/expression/search_source_expression.scss similarity index 100% rename from x-pack/plugins/stack_alerts/public/alert_types/es_query/expression/search_source_expression.scss rename to x-pack/plugins/stack_alerts/public/rule_types/es_query/expression/search_source_expression.scss diff --git a/x-pack/plugins/stack_alerts/public/alert_types/es_query/expression/search_source_expression.test.tsx b/x-pack/plugins/stack_alerts/public/rule_types/es_query/expression/search_source_expression.test.tsx similarity index 97% rename from x-pack/plugins/stack_alerts/public/alert_types/es_query/expression/search_source_expression.test.tsx rename to x-pack/plugins/stack_alerts/public/rule_types/es_query/expression/search_source_expression.test.tsx index 5bae70f96659f7..924b93907b8b4b 100644 --- a/x-pack/plugins/stack_alerts/public/alert_types/es_query/expression/search_source_expression.test.tsx +++ b/x-pack/plugins/stack_alerts/public/rule_types/es_query/expression/search_source_expression.test.tsx @@ -10,7 +10,7 @@ import React from 'react'; import { dataPluginMock } from '@kbn/data-plugin/public/mocks'; import { dataViewPluginMocks } from '@kbn/data-views-plugin/public/mocks'; import { unifiedSearchPluginMock } from '@kbn/unified-search-plugin/public/mocks'; -import { EsQueryAlertParams, SearchType } from '../types'; +import { EsQueryRuleParams, SearchType } from '../types'; import { SearchSourceExpression } from './search_source_expression'; import { chartPluginMock } from '@kbn/charts-plugin/public/mocks'; import { act } from 'react-dom/test-utils'; @@ -38,7 +38,7 @@ export const uiSettingsMock = { get: jest.fn(), } as unknown as IUiSettingsClient; -const defaultSearchSourceExpressionParams: EsQueryAlertParams = { +const defaultSearchSourceExpressionParams: EsQueryRuleParams = { size: 100, thresholdComparator: '>', threshold: [0], @@ -191,7 +191,7 @@ dataMock.query.savedQueries.findSavedQueries = jest.fn(() => Promise.resolve({ total: 0, queries: [] }) ); -const setup = (alertParams: EsQueryAlertParams) => { +const setup = (alertParams: EsQueryRuleParams) => { const errors = { size: [], timeField: [], diff --git a/x-pack/plugins/stack_alerts/public/alert_types/es_query/expression/search_source_expression.tsx b/x-pack/plugins/stack_alerts/public/rule_types/es_query/expression/search_source_expression.tsx similarity index 97% rename from x-pack/plugins/stack_alerts/public/alert_types/es_query/expression/search_source_expression.tsx rename to x-pack/plugins/stack_alerts/public/rule_types/es_query/expression/search_source_expression.tsx index 2e5d2d6e7b18de..5c3fe1d0d4d287 100644 --- a/x-pack/plugins/stack_alerts/public/alert_types/es_query/expression/search_source_expression.tsx +++ b/x-pack/plugins/stack_alerts/public/rule_types/es_query/expression/search_source_expression.tsx @@ -11,13 +11,13 @@ import { EuiSpacer, EuiLoadingSpinner, EuiEmptyPrompt, EuiCallOut } from '@elast import { ISearchSource } from '@kbn/data-plugin/common'; import { RuleTypeParamsExpressionProps } from '@kbn/triggers-actions-ui-plugin/public'; import { SavedQuery } from '@kbn/data-plugin/public'; -import { EsQueryAlertParams, SearchType } from '../types'; +import { EsQueryRuleParams, SearchType } from '../types'; import { useTriggersAndActionsUiDeps } from '../util'; import { SearchSourceExpressionForm } from './search_source_expression_form'; import { DEFAULT_VALUES } from '../constants'; export type SearchSourceExpressionProps = RuleTypeParamsExpressionProps< - EsQueryAlertParams + EsQueryRuleParams >; export const SearchSourceExpression = ({ diff --git a/x-pack/plugins/stack_alerts/public/alert_types/es_query/expression/search_source_expression_form.tsx b/x-pack/plugins/stack_alerts/public/rule_types/es_query/expression/search_source_expression_form.tsx similarity index 95% rename from x-pack/plugins/stack_alerts/public/alert_types/es_query/expression/search_source_expression_form.tsx rename to x-pack/plugins/stack_alerts/public/rule_types/es_query/expression/search_source_expression_form.tsx index 6274a4dcdba95f..eacbd169dfed83 100644 --- a/x-pack/plugins/stack_alerts/public/alert_types/es_query/expression/search_source_expression_form.tsx +++ b/x-pack/plugins/stack_alerts/public/rule_types/es_query/expression/search_source_expression_form.tsx @@ -16,7 +16,7 @@ import { IErrorObject } from '@kbn/triggers-actions-ui-plugin/public'; import { SearchBar, SearchBarProps } from '@kbn/unified-search-plugin/public'; import { mapAndFlattenFilters, SavedQuery, TimeHistory } from '@kbn/data-plugin/public'; import { Storage } from '@kbn/kibana-utils-plugin/public'; -import { CommonAlertParams, EsQueryAlertParams, SearchType } from '../types'; +import { CommonRuleParams, EsQueryRuleParams, SearchType } from '../types'; import { DEFAULT_VALUES } from '../constants'; import { DataViewSelectPopover } from '../../components/data_view_select_popover'; import { useTriggersAndActionsUiDeps } from '../util'; @@ -33,12 +33,12 @@ interface LocalState { index: DataView; filter: Filter[]; query: Query; - thresholdComparator: CommonAlertParams['thresholdComparator']; - threshold: CommonAlertParams['threshold']; - timeWindowSize: CommonAlertParams['timeWindowSize']; - timeWindowUnit: CommonAlertParams['timeWindowUnit']; - size: CommonAlertParams['size']; - excludeHitsFromPreviousRun: CommonAlertParams['excludeHitsFromPreviousRun']; + thresholdComparator: CommonRuleParams['thresholdComparator']; + threshold: CommonRuleParams['threshold']; + timeWindowSize: CommonRuleParams['timeWindowSize']; + timeWindowUnit: CommonRuleParams['timeWindowUnit']; + size: CommonRuleParams['size']; + excludeHitsFromPreviousRun: CommonRuleParams['excludeHitsFromPreviousRun']; } interface LocalStateAction { @@ -64,7 +64,7 @@ interface SearchSourceParamsAction { interface SearchSourceExpressionFormProps { searchSource: ISearchSource; - ruleParams: EsQueryAlertParams; + ruleParams: EsQueryRuleParams; errors: IErrorObject; initialSavedQuery?: SavedQuery; setParam: (paramField: string, paramValue: unknown) => void; diff --git a/x-pack/plugins/stack_alerts/public/alert_types/es_query/index.ts b/x-pack/plugins/stack_alerts/public/rule_types/es_query/index.ts similarity index 88% rename from x-pack/plugins/stack_alerts/public/alert_types/es_query/index.ts rename to x-pack/plugins/stack_alerts/public/rule_types/es_query/index.ts index fe57801150526d..87be947c22f90f 100644 --- a/x-pack/plugins/stack_alerts/public/alert_types/es_query/index.ts +++ b/x-pack/plugins/stack_alerts/public/rule_types/es_query/index.ts @@ -10,13 +10,13 @@ import { i18n } from '@kbn/i18n'; import { RuleTypeModel } from '@kbn/triggers-actions-ui-plugin/public'; import { PluginSetupContract as AlertingSetup } from '@kbn/alerting-plugin/public'; import { SanitizedRule } from '@kbn/alerting-plugin/common'; -import { EsQueryAlertParams, SearchType } from './types'; +import { EsQueryRuleParams, SearchType } from './types'; import { validateExpression } from './validation'; const PLUGIN_ID = 'discover'; const ES_QUERY_ALERT_TYPE = '.es-query'; -export function getAlertType(alerting: AlertingSetup): RuleTypeModel { +export function getRuleType(alerting: AlertingSetup): RuleTypeModel { registerNavigation(alerting); return { @@ -47,7 +47,7 @@ function registerNavigation(alerting: AlertingSetup) { alerting.registerNavigation( PLUGIN_ID, ES_QUERY_ALERT_TYPE, - (alert: SanitizedRule>) => { + (alert: SanitizedRule>) => { return `#/viewAlert/${alert.id}`; } ); diff --git a/x-pack/plugins/stack_alerts/public/alert_types/es_query/rule_common_expressions/index.ts b/x-pack/plugins/stack_alerts/public/rule_types/es_query/rule_common_expressions/index.ts similarity index 100% rename from x-pack/plugins/stack_alerts/public/alert_types/es_query/rule_common_expressions/index.ts rename to x-pack/plugins/stack_alerts/public/rule_types/es_query/rule_common_expressions/index.ts diff --git a/x-pack/plugins/stack_alerts/public/alert_types/es_query/rule_common_expressions/rule_common_expressions.tsx b/x-pack/plugins/stack_alerts/public/rule_types/es_query/rule_common_expressions/rule_common_expressions.tsx similarity index 93% rename from x-pack/plugins/stack_alerts/public/alert_types/es_query/rule_common_expressions/rule_common_expressions.tsx rename to x-pack/plugins/stack_alerts/public/rule_types/es_query/rule_common_expressions/rule_common_expressions.tsx index 0c0fc9a9a3c0ba..4db7a17abeae3d 100644 --- a/x-pack/plugins/stack_alerts/public/alert_types/es_query/rule_common_expressions/rule_common_expressions.tsx +++ b/x-pack/plugins/stack_alerts/public/rule_types/es_query/rule_common_expressions/rule_common_expressions.tsx @@ -23,18 +23,18 @@ import { ThresholdExpression, ValueExpression, } from '@kbn/triggers-actions-ui-plugin/public'; -import { CommonAlertParams } from '../types'; +import { CommonRuleParams } from '../types'; import { DEFAULT_VALUES } from '../constants'; import { TestQueryRow, TestQueryRowProps } from '../test_query_row'; import { QueryThresholdHelpPopover } from './threshold_help_popover'; export interface RuleCommonExpressionsProps { - thresholdComparator?: CommonAlertParams['thresholdComparator']; - threshold?: CommonAlertParams['threshold']; - timeWindowSize: CommonAlertParams['timeWindowSize']; - timeWindowUnit: CommonAlertParams['timeWindowUnit']; - size: CommonAlertParams['size']; - excludeHitsFromPreviousRun: CommonAlertParams['excludeHitsFromPreviousRun']; + thresholdComparator?: CommonRuleParams['thresholdComparator']; + threshold?: CommonRuleParams['threshold']; + timeWindowSize: CommonRuleParams['timeWindowSize']; + timeWindowUnit: CommonRuleParams['timeWindowUnit']; + size: CommonRuleParams['size']; + excludeHitsFromPreviousRun: CommonRuleParams['excludeHitsFromPreviousRun']; errors: IErrorObject; hasValidationErrors: boolean; onChangeThreshold: Parameters[0]['onChangeSelectedThreshold']; diff --git a/x-pack/plugins/stack_alerts/public/alert_types/es_query/rule_common_expressions/threshold_help_popover.tsx b/x-pack/plugins/stack_alerts/public/rule_types/es_query/rule_common_expressions/threshold_help_popover.tsx similarity index 100% rename from x-pack/plugins/stack_alerts/public/alert_types/es_query/rule_common_expressions/threshold_help_popover.tsx rename to x-pack/plugins/stack_alerts/public/rule_types/es_query/rule_common_expressions/threshold_help_popover.tsx diff --git a/x-pack/plugins/stack_alerts/public/alert_types/es_query/test_query_row/index.ts b/x-pack/plugins/stack_alerts/public/rule_types/es_query/test_query_row/index.ts similarity index 100% rename from x-pack/plugins/stack_alerts/public/alert_types/es_query/test_query_row/index.ts rename to x-pack/plugins/stack_alerts/public/rule_types/es_query/test_query_row/index.ts diff --git a/x-pack/plugins/stack_alerts/public/alert_types/es_query/test_query_row/test_query_row.test.tsx b/x-pack/plugins/stack_alerts/public/rule_types/es_query/test_query_row/test_query_row.test.tsx similarity index 100% rename from x-pack/plugins/stack_alerts/public/alert_types/es_query/test_query_row/test_query_row.test.tsx rename to x-pack/plugins/stack_alerts/public/rule_types/es_query/test_query_row/test_query_row.test.tsx diff --git a/x-pack/plugins/stack_alerts/public/alert_types/es_query/test_query_row/test_query_row.tsx b/x-pack/plugins/stack_alerts/public/rule_types/es_query/test_query_row/test_query_row.tsx similarity index 100% rename from x-pack/plugins/stack_alerts/public/alert_types/es_query/test_query_row/test_query_row.tsx rename to x-pack/plugins/stack_alerts/public/rule_types/es_query/test_query_row/test_query_row.tsx diff --git a/x-pack/plugins/stack_alerts/public/alert_types/es_query/test_query_row/use_test_query.test.ts b/x-pack/plugins/stack_alerts/public/rule_types/es_query/test_query_row/use_test_query.test.ts similarity index 100% rename from x-pack/plugins/stack_alerts/public/alert_types/es_query/test_query_row/use_test_query.test.ts rename to x-pack/plugins/stack_alerts/public/rule_types/es_query/test_query_row/use_test_query.test.ts diff --git a/x-pack/plugins/stack_alerts/public/alert_types/es_query/test_query_row/use_test_query.ts b/x-pack/plugins/stack_alerts/public/rule_types/es_query/test_query_row/use_test_query.ts similarity index 100% rename from x-pack/plugins/stack_alerts/public/alert_types/es_query/test_query_row/use_test_query.ts rename to x-pack/plugins/stack_alerts/public/rule_types/es_query/test_query_row/use_test_query.ts diff --git a/x-pack/plugins/stack_alerts/public/alert_types/es_query/types.ts b/x-pack/plugins/stack_alerts/public/rule_types/es_query/types.ts similarity index 81% rename from x-pack/plugins/stack_alerts/public/alert_types/es_query/types.ts rename to x-pack/plugins/stack_alerts/public/rule_types/es_query/types.ts index 1430b8e3076ae4..5de99ff16feb59 100644 --- a/x-pack/plugins/stack_alerts/public/alert_types/es_query/types.ts +++ b/x-pack/plugins/stack_alerts/public/rule_types/es_query/types.ts @@ -23,7 +23,7 @@ export enum SearchType { searchSource = 'searchSource', } -export interface CommonAlertParams extends RuleTypeParams { +export interface CommonRuleParams extends RuleTypeParams { size: number; thresholdComparator?: string; threshold: number[]; @@ -32,17 +32,17 @@ export interface CommonAlertParams extends RuleTypeParams { excludeHitsFromPreviousRun: boolean; } -export type EsQueryAlertParams = T extends SearchType.searchSource - ? CommonAlertParams & OnlySearchSourceAlertParams - : CommonAlertParams & OnlyEsQueryAlertParams; +export type EsQueryRuleParams = T extends SearchType.searchSource + ? CommonRuleParams & OnlySearchSourceRuleParams + : CommonRuleParams & OnlyEsQueryRuleParams; -export interface OnlyEsQueryAlertParams { +export interface OnlyEsQueryRuleParams { esQuery: string; index: string[]; timeField: string; } -export interface OnlySearchSourceAlertParams { +export interface OnlySearchSourceRuleParams { searchType?: 'searchSource'; searchConfiguration?: SerializedSearchSourceFields; savedQueryId?: string; diff --git a/x-pack/plugins/stack_alerts/public/alert_types/es_query/util.ts b/x-pack/plugins/stack_alerts/public/rule_types/es_query/util.ts similarity index 68% rename from x-pack/plugins/stack_alerts/public/alert_types/es_query/util.ts rename to x-pack/plugins/stack_alerts/public/rule_types/es_query/util.ts index 1f57a133fa65a1..f38f1df137d132 100644 --- a/x-pack/plugins/stack_alerts/public/alert_types/es_query/util.ts +++ b/x-pack/plugins/stack_alerts/public/rule_types/es_query/util.ts @@ -6,11 +6,11 @@ */ import { useKibana } from '@kbn/kibana-react-plugin/public'; -import { EsQueryAlertParams, SearchType, TriggersAndActionsUiDeps } from './types'; +import { EsQueryRuleParams, SearchType, TriggersAndActionsUiDeps } from './types'; -export const isSearchSourceAlert = ( - ruleParams: EsQueryAlertParams -): ruleParams is EsQueryAlertParams => { +export const isSearchSourceRule = ( + ruleParams: EsQueryRuleParams +): ruleParams is EsQueryRuleParams => { return ruleParams.searchType === 'searchSource'; }; diff --git a/x-pack/plugins/stack_alerts/public/alert_types/es_query/validation.test.ts b/x-pack/plugins/stack_alerts/public/rule_types/es_query/validation.test.ts similarity index 87% rename from x-pack/plugins/stack_alerts/public/alert_types/es_query/validation.test.ts rename to x-pack/plugins/stack_alerts/public/rule_types/es_query/validation.test.ts index 4df44f445f1b3e..f1918f88d24fd4 100644 --- a/x-pack/plugins/stack_alerts/public/alert_types/es_query/validation.test.ts +++ b/x-pack/plugins/stack_alerts/public/rule_types/es_query/validation.test.ts @@ -5,19 +5,19 @@ * 2.0. */ -import { EsQueryAlertParams, SearchType } from './types'; +import { EsQueryRuleParams, SearchType } from './types'; import { validateExpression, hasExpressionValidationErrors } from './validation'; describe('expression params validation', () => { test('if params are not set should return a proper error message', () => { - const initialParams: EsQueryAlertParams = - {} as EsQueryAlertParams; + const initialParams: EsQueryRuleParams = + {} as EsQueryRuleParams; expect(validateExpression(initialParams).errors.searchType.length).toBeGreaterThan(0); expect(validateExpression(initialParams).errors.searchType[0]).toBe('Query type is required.'); }); test('if index property is invalid should return proper error message', () => { - const initialParams: EsQueryAlertParams = { + const initialParams: EsQueryRuleParams = { index: [], esQuery: `{\n \"query\":{\n \"match_all\" : {}\n }\n}`, size: 100, @@ -32,7 +32,7 @@ describe('expression params validation', () => { }); test('if timeField property is not defined should return proper error message', () => { - const initialParams: EsQueryAlertParams = { + const initialParams: EsQueryRuleParams = { index: ['test'], esQuery: `{\n \"query\":{\n \"match_all\" : {}\n }\n}`, size: 100, @@ -47,7 +47,7 @@ describe('expression params validation', () => { }); test('if esQuery property is invalid JSON should return proper error message', () => { - const initialParams: EsQueryAlertParams = { + const initialParams: EsQueryRuleParams = { index: ['test'], esQuery: `{\n \"query\":{\n \"match_all\" : {}\n }\n`, size: 100, @@ -62,7 +62,7 @@ describe('expression params validation', () => { }); test('if esQuery property is invalid should return proper error message', () => { - const initialParams: EsQueryAlertParams = { + const initialParams: EsQueryRuleParams = { index: ['test'], esQuery: `{\n \"aggs\":{\n \"match_all\" : {}\n }\n}`, size: 100, @@ -84,7 +84,7 @@ describe('expression params validation', () => { timeWindowUnit: 's', threshold: [0], searchType: SearchType.searchSource, - } as EsQueryAlertParams; + } as EsQueryRuleParams; expect(validateExpression(initialParams).errors.searchConfiguration.length).toBeGreaterThan(0); expect(validateExpression(initialParams).errors.searchConfiguration[0]).toBe( `Search source configuration is required.` @@ -92,7 +92,7 @@ describe('expression params validation', () => { }); test('if threshold0 property is not set should return proper error message', () => { - const initialParams: EsQueryAlertParams = { + const initialParams: EsQueryRuleParams = { index: ['test'], esQuery: `{\n \"query\":{\n \"match_all\" : {}\n }\n}`, size: 100, @@ -108,7 +108,7 @@ describe('expression params validation', () => { }); test('if threshold1 property is needed by thresholdComparator but not set should return proper error message', () => { - const initialParams: EsQueryAlertParams = { + const initialParams: EsQueryRuleParams = { index: ['test'], esQuery: `{\n \"query\":{\n \"match_all\" : {}\n }\n}`, size: 100, @@ -124,7 +124,7 @@ describe('expression params validation', () => { }); test('if threshold0 property greater than threshold1 property should return proper error message', () => { - const initialParams: EsQueryAlertParams = { + const initialParams: EsQueryRuleParams = { index: ['test'], esQuery: `{\n \"query\":{\n \"match_all\" : {}\n }\n}`, size: 100, @@ -142,7 +142,7 @@ describe('expression params validation', () => { }); test('if size property is < 0 should return proper error message', () => { - const initialParams: EsQueryAlertParams = { + const initialParams: EsQueryRuleParams = { index: ['test'], esQuery: `{\n \"query\":{\n \"match_all\" : {}\n }\n`, size: -1, @@ -159,7 +159,7 @@ describe('expression params validation', () => { }); test('if size property is 0 should not return error message', () => { - const initialParams: EsQueryAlertParams = { + const initialParams: EsQueryRuleParams = { index: ['test'], esQuery: `{\n \"query\":{\n \"match_all\" : {}\n }\n`, size: 0, @@ -173,7 +173,7 @@ describe('expression params validation', () => { }); test('if size property is > 10000 should return proper error message', () => { - const initialParams: EsQueryAlertParams = { + const initialParams: EsQueryRuleParams = { index: ['test'], esQuery: `{\n \"query\":{\n \"match_all\" : {}\n }\n`, size: 25000, @@ -190,7 +190,7 @@ describe('expression params validation', () => { }); test('should not return error messages if all is correct', () => { - const initialParams: EsQueryAlertParams = { + const initialParams: EsQueryRuleParams = { index: ['test'], esQuery: '{"query":{"match_all":{}}}', size: 250, diff --git a/x-pack/plugins/stack_alerts/public/alert_types/es_query/validation.ts b/x-pack/plugins/stack_alerts/public/rule_types/es_query/validation.ts similarity index 94% rename from x-pack/plugins/stack_alerts/public/alert_types/es_query/validation.ts rename to x-pack/plugins/stack_alerts/public/rule_types/es_query/validation.ts index 70466070b3515a..7ae70ac8910290 100644 --- a/x-pack/plugins/stack_alerts/public/alert_types/es_query/validation.ts +++ b/x-pack/plugins/stack_alerts/public/rule_types/es_query/validation.ts @@ -8,11 +8,11 @@ import { defaultsDeep, isNil } from 'lodash'; import { i18n } from '@kbn/i18n'; import { ValidationResult, builtInComparators } from '@kbn/triggers-actions-ui-plugin/public'; -import { EsQueryAlertParams, ExpressionErrors } from './types'; -import { isSearchSourceAlert } from './util'; +import { EsQueryRuleParams, ExpressionErrors } from './types'; +import { isSearchSourceRule } from './util'; import { EXPRESSION_ERRORS } from './constants'; -export const validateExpression = (ruleParams: EsQueryAlertParams): ValidationResult => { +export const validateExpression = (ruleParams: EsQueryRuleParams): ValidationResult => { const { size, threshold, timeWindowSize, thresholdComparator } = ruleParams; const validationResult = { errors: {} }; const errors: ExpressionErrors = defaultsDeep({}, EXPRESSION_ERRORS); @@ -80,10 +80,10 @@ export const validateExpression = (ruleParams: EsQueryAlertParams): ValidationRe } /** - * Skip esQuery and index params check if it is search source alert, + * Skip esQuery and index params check if it is search source rule, * since it should contain searchConfiguration instead of esQuery and index. */ - const isSearchSource = isSearchSourceAlert(ruleParams); + const isSearchSource = isSearchSourceRule(ruleParams); if (isSearchSource) { if (!ruleParams.searchConfiguration) { errors.searchConfiguration.push( @@ -148,7 +148,7 @@ export const validateExpression = (ruleParams: EsQueryAlertParams): ValidationRe return validationResult; }; -export const hasExpressionValidationErrors = (ruleParams: EsQueryAlertParams) => { +export const hasExpressionValidationErrors = (ruleParams: EsQueryRuleParams) => { const { errors: validationErrors } = validateExpression(ruleParams); return Object.keys(validationErrors).some( (key) => validationErrors[key] && validationErrors[key].length diff --git a/x-pack/plugins/stack_alerts/public/alert_types/geo_containment/index.ts b/x-pack/plugins/stack_alerts/public/rule_types/geo_containment/index.ts similarity index 92% rename from x-pack/plugins/stack_alerts/public/alert_types/geo_containment/index.ts rename to x-pack/plugins/stack_alerts/public/rule_types/geo_containment/index.ts index fad11da20940a9..0ed978e6edd0e6 100644 --- a/x-pack/plugins/stack_alerts/public/alert_types/geo_containment/index.ts +++ b/x-pack/plugins/stack_alerts/public/rule_types/geo_containment/index.ts @@ -11,7 +11,7 @@ import { RuleTypeModel } from '@kbn/triggers-actions-ui-plugin/public'; import { validateExpression } from './validation'; import { GeoContainmentAlertParams } from './types'; -export function getAlertType(): RuleTypeModel { +export function getRuleType(): RuleTypeModel { return { id: '.geo-containment', description: i18n.translate('xpack.stackAlerts.geoContainment.descriptionText', { diff --git a/x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/__snapshots__/geo_containment_alert_type_expression.test.tsx.snap b/x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/__snapshots__/geo_containment_alert_type_expression.test.tsx.snap similarity index 100% rename from x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/__snapshots__/geo_containment_alert_type_expression.test.tsx.snap rename to x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/__snapshots__/geo_containment_alert_type_expression.test.tsx.snap diff --git a/x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/expressions/__snapshots__/entity_by_expression.test.tsx.snap b/x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/expressions/__snapshots__/entity_by_expression.test.tsx.snap similarity index 100% rename from x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/expressions/__snapshots__/entity_by_expression.test.tsx.snap rename to x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/expressions/__snapshots__/entity_by_expression.test.tsx.snap diff --git a/x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/expressions/boundary_index_expression.tsx b/x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/expressions/boundary_index_expression.tsx similarity index 100% rename from x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/expressions/boundary_index_expression.tsx rename to x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/expressions/boundary_index_expression.tsx diff --git a/x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/expressions/entity_by_expression.test.tsx b/x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/expressions/entity_by_expression.test.tsx similarity index 100% rename from x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/expressions/entity_by_expression.test.tsx rename to x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/expressions/entity_by_expression.test.tsx diff --git a/x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/expressions/entity_by_expression.tsx b/x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/expressions/entity_by_expression.tsx similarity index 100% rename from x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/expressions/entity_by_expression.tsx rename to x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/expressions/entity_by_expression.tsx diff --git a/x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/expressions/entity_index_expression.tsx b/x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/expressions/entity_index_expression.tsx similarity index 100% rename from x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/expressions/entity_index_expression.tsx rename to x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/expressions/entity_index_expression.tsx diff --git a/x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/geo_containment_alert_type_expression.test.tsx b/x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/geo_containment_alert_type_expression.test.tsx similarity index 100% rename from x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/geo_containment_alert_type_expression.test.tsx rename to x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/geo_containment_alert_type_expression.test.tsx diff --git a/x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/index.tsx b/x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/index.tsx similarity index 100% rename from x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/index.tsx rename to x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/index.tsx diff --git a/x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/util_components/__snapshots__/geo_index_pattern_select.test.tsx.snap b/x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/util_components/__snapshots__/geo_index_pattern_select.test.tsx.snap similarity index 100% rename from x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/util_components/__snapshots__/geo_index_pattern_select.test.tsx.snap rename to x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/util_components/__snapshots__/geo_index_pattern_select.test.tsx.snap diff --git a/x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/util_components/expression_with_popover.tsx b/x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/util_components/expression_with_popover.tsx similarity index 100% rename from x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/util_components/expression_with_popover.tsx rename to x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/util_components/expression_with_popover.tsx diff --git a/x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/util_components/geo_index_pattern_select.test.tsx b/x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/util_components/geo_index_pattern_select.test.tsx similarity index 100% rename from x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/util_components/geo_index_pattern_select.test.tsx rename to x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/util_components/geo_index_pattern_select.test.tsx diff --git a/x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/util_components/geo_index_pattern_select.tsx b/x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/util_components/geo_index_pattern_select.tsx similarity index 100% rename from x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/util_components/geo_index_pattern_select.tsx rename to x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/util_components/geo_index_pattern_select.tsx diff --git a/x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/util_components/single_field_select.tsx b/x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/util_components/single_field_select.tsx similarity index 100% rename from x-pack/plugins/stack_alerts/public/alert_types/geo_containment/query_builder/util_components/single_field_select.tsx rename to x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/util_components/single_field_select.tsx diff --git a/x-pack/plugins/stack_alerts/public/alert_types/geo_containment/readme.md b/x-pack/plugins/stack_alerts/public/rule_types/geo_containment/readme.md similarity index 100% rename from x-pack/plugins/stack_alerts/public/alert_types/geo_containment/readme.md rename to x-pack/plugins/stack_alerts/public/rule_types/geo_containment/readme.md diff --git a/x-pack/plugins/stack_alerts/public/alert_types/geo_containment/types.ts b/x-pack/plugins/stack_alerts/public/rule_types/geo_containment/types.ts similarity index 100% rename from x-pack/plugins/stack_alerts/public/alert_types/geo_containment/types.ts rename to x-pack/plugins/stack_alerts/public/rule_types/geo_containment/types.ts diff --git a/x-pack/plugins/stack_alerts/public/alert_types/geo_containment/validation.test.ts b/x-pack/plugins/stack_alerts/public/rule_types/geo_containment/validation.test.ts similarity index 100% rename from x-pack/plugins/stack_alerts/public/alert_types/geo_containment/validation.test.ts rename to x-pack/plugins/stack_alerts/public/rule_types/geo_containment/validation.test.ts diff --git a/x-pack/plugins/stack_alerts/public/alert_types/geo_containment/validation.ts b/x-pack/plugins/stack_alerts/public/rule_types/geo_containment/validation.ts similarity index 100% rename from x-pack/plugins/stack_alerts/public/alert_types/geo_containment/validation.ts rename to x-pack/plugins/stack_alerts/public/rule_types/geo_containment/validation.ts diff --git a/x-pack/plugins/stack_alerts/public/alert_types/index.ts b/x-pack/plugins/stack_alerts/public/rule_types/index.ts similarity index 54% rename from x-pack/plugins/stack_alerts/public/alert_types/index.ts rename to x-pack/plugins/stack_alerts/public/rule_types/index.ts index ff474ff9c65624..e5dae6ff1982c4 100644 --- a/x-pack/plugins/stack_alerts/public/alert_types/index.ts +++ b/x-pack/plugins/stack_alerts/public/rule_types/index.ts @@ -7,21 +7,18 @@ import { TriggersAndActionsUIPublicPluginSetup } from '@kbn/triggers-actions-ui-plugin/public'; import { PluginSetupContract as AlertingSetup } from '@kbn/alerting-plugin/public'; -import { getAlertType as getGeoContainmentAlertType } from './geo_containment'; -import { getAlertType as getThresholdAlertType } from './threshold'; -import { getAlertType as getEsQueryAlertType } from './es_query'; -import { Config } from '../../common'; +import { getRuleType as getGeoContainmentRuleType } from './geo_containment'; +import { getRuleType as getThresholdRuleType } from './threshold'; +import { getRuleType as getEsQueryRuleType } from './es_query'; -export function registerAlertTypes({ +export function registerRuleTypes({ ruleTypeRegistry, - config, alerting, }: { ruleTypeRegistry: TriggersAndActionsUIPublicPluginSetup['ruleTypeRegistry']; - config: Config; alerting: AlertingSetup; }) { - ruleTypeRegistry.register(getGeoContainmentAlertType()); - ruleTypeRegistry.register(getThresholdAlertType()); - ruleTypeRegistry.register(getEsQueryAlertType(alerting)); + ruleTypeRegistry.register(getGeoContainmentRuleType()); + ruleTypeRegistry.register(getThresholdRuleType()); + ruleTypeRegistry.register(getEsQueryRuleType(alerting)); } diff --git a/x-pack/plugins/stack_alerts/public/alert_types/threshold/expression.scss b/x-pack/plugins/stack_alerts/public/rule_types/threshold/expression.scss similarity index 100% rename from x-pack/plugins/stack_alerts/public/alert_types/threshold/expression.scss rename to x-pack/plugins/stack_alerts/public/rule_types/threshold/expression.scss diff --git a/x-pack/plugins/stack_alerts/public/alert_types/threshold/expression.test.tsx b/x-pack/plugins/stack_alerts/public/rule_types/threshold/expression.test.tsx similarity index 91% rename from x-pack/plugins/stack_alerts/public/alert_types/threshold/expression.test.tsx rename to x-pack/plugins/stack_alerts/public/rule_types/threshold/expression.test.tsx index 4b79a68f2125cf..e960ff6b980d6f 100644 --- a/x-pack/plugins/stack_alerts/public/alert_types/threshold/expression.test.tsx +++ b/x-pack/plugins/stack_alerts/public/rule_types/threshold/expression.test.tsx @@ -8,11 +8,11 @@ import React from 'react'; import { mountWithIntl, nextTick } from '@kbn/test-jest-helpers'; import { act } from 'react-dom/test-utils'; -import IndexThresholdAlertTypeExpression, { DEFAULT_VALUES } from './expression'; +import IndexThresholdRuleTypeExpression, { DEFAULT_VALUES } from './expression'; import { dataPluginMock } from '@kbn/data-plugin/public/mocks'; import { dataViewPluginMocks } from '@kbn/data-views-plugin/public/mocks'; import { chartPluginMock } from '@kbn/charts-plugin/public/mocks'; -import { IndexThresholdAlertParams } from './types'; +import { IndexThresholdRuleParams } from './types'; import { validateExpression } from './validation'; import { builtInAggregationTypes, @@ -72,7 +72,7 @@ const dataMock = dataPluginMock.createStartContract(); const dataViewMock = dataViewPluginMocks.createStartContract(); const chartsStartMock = chartPluginMock.createStartContract(); -describe('IndexThresholdAlertTypeExpression', () => { +describe('IndexThresholdRuleTypeExpression', () => { function getAlertParams(overrides = {}) { return { index: 'test-index', @@ -84,11 +84,11 @@ describe('IndexThresholdAlertTypeExpression', () => { ...overrides, }; } - async function setup(ruleParams: IndexThresholdAlertParams) { + async function setup(ruleParams: IndexThresholdRuleParams) { const { errors } = validateExpression(ruleParams); const wrapper = mountWithIntl( - { return wrapper; } - test(`should render IndexThresholdAlertTypeExpression with expected components when aggType doesn't require field`, async () => { + test(`should render IndexThresholdRuleTypeExpression with expected components when aggType doesn't require field`, async () => { const wrapper = await setup(getAlertParams()); expect(wrapper.find('[data-test-subj="indexSelectPopover"]').exists()).toBeTruthy(); expect(wrapper.find('[data-test-subj="whenExpression"]').exists()).toBeTruthy(); @@ -124,7 +124,7 @@ describe('IndexThresholdAlertTypeExpression', () => { expect(wrapper.find('[data-test-subj="filterKuery"]').exists()).toBeTruthy(); }); - test(`should render IndexThresholdAlertTypeExpression with expected components when aggType does require field`, async () => { + test(`should render IndexThresholdRuleTypeExpression with expected components when aggType does require field`, async () => { const wrapper = await setup(getAlertParams({ aggType: 'avg' })); expect(wrapper.find('[data-test-subj="indexSelectPopover"]').exists()).toBeTruthy(); expect(wrapper.find('[data-test-subj="whenExpression"]').exists()).toBeTruthy(); @@ -137,7 +137,7 @@ describe('IndexThresholdAlertTypeExpression', () => { expect(wrapper.find('[data-test-subj="filterKuery"]').exists()).toBeTruthy(); }); - test(`should render IndexThresholdAlertTypeExpression with visualization when there are no expression errors`, async () => { + test(`should render IndexThresholdRuleTypeExpression with visualization when there are no expression errors`, async () => { const wrapper = await setup(getAlertParams({ timeField: '@timestamp' })); expect(wrapper.find('[data-test-subj="visualizationPlaceholder"]').exists()).toBeFalsy(); expect(wrapper.find('[data-test-subj="thresholdVisualization"]').exists()).toBeTruthy(); diff --git a/x-pack/plugins/stack_alerts/public/alert_types/threshold/expression.tsx b/x-pack/plugins/stack_alerts/public/rule_types/threshold/expression.tsx similarity index 96% rename from x-pack/plugins/stack_alerts/public/alert_types/threshold/expression.tsx rename to x-pack/plugins/stack_alerts/public/rule_types/threshold/expression.tsx index 37ad715aae18bc..9348c97e986730 100644 --- a/x-pack/plugins/stack_alerts/public/alert_types/threshold/expression.tsx +++ b/x-pack/plugins/stack_alerts/public/rule_types/threshold/expression.tsx @@ -32,7 +32,7 @@ import { RuleTypeParamsExpressionProps, } from '@kbn/triggers-actions-ui-plugin/public'; import { ThresholdVisualization } from './visualization'; -import { IndexThresholdAlertParams } from './types'; +import { IndexThresholdRuleParams } from './types'; import './expression.scss'; import { IndexSelectPopover } from '../components/index_select_popover'; @@ -71,8 +71,8 @@ function indexParamToArray(index: string | string[]): string[] { return isString(index) ? [index] : index; } -export const IndexThresholdAlertTypeExpression: React.FunctionComponent< - Omit, 'unifiedSearch'> +export const IndexThresholdRuleTypeExpression: React.FunctionComponent< + Omit, 'unifiedSearch'> > = ({ ruleParams, ruleInterval, setRuleParams, setRuleProperty, errors, charts, data }) => { const { index, @@ -106,7 +106,7 @@ export const IndexThresholdAlertTypeExpression: React.FunctionComponent< (errorKey) => expressionFieldsWithValidation.includes(errorKey) && errors[errorKey].length >= 1 && - ruleParams[errorKey as keyof IndexThresholdAlertParams] !== undefined + ruleParams[errorKey as keyof IndexThresholdRuleParams] !== undefined ); const cannotShowVisualization = !!Object.keys(errors).find( @@ -339,4 +339,4 @@ export const IndexThresholdAlertTypeExpression: React.FunctionComponent< }; // eslint-disable-next-line import/no-default-export -export { IndexThresholdAlertTypeExpression as default }; +export { IndexThresholdRuleTypeExpression as default }; diff --git a/x-pack/plugins/stack_alerts/public/alert_types/threshold/index.ts b/x-pack/plugins/stack_alerts/public/rule_types/threshold/index.ts similarity index 91% rename from x-pack/plugins/stack_alerts/public/alert_types/threshold/index.ts rename to x-pack/plugins/stack_alerts/public/rule_types/threshold/index.ts index f41856d7a5bc85..3d793173bc8e03 100644 --- a/x-pack/plugins/stack_alerts/public/alert_types/threshold/index.ts +++ b/x-pack/plugins/stack_alerts/public/rule_types/threshold/index.ts @@ -9,9 +9,9 @@ import { lazy } from 'react'; import { i18n } from '@kbn/i18n'; import { RuleTypeModel } from '@kbn/triggers-actions-ui-plugin/public'; import { validateExpression } from './validation'; -import { IndexThresholdAlertParams } from './types'; +import { IndexThresholdRuleParams } from './types'; -export function getAlertType(): RuleTypeModel { +export function getRuleType(): RuleTypeModel { return { id: '.index-threshold', description: i18n.translate('xpack.stackAlerts.threshold.ui.alertType.descriptionText', { diff --git a/x-pack/plugins/stack_alerts/public/alert_types/threshold/index_threshold_api.ts b/x-pack/plugins/stack_alerts/public/rule_types/threshold/index_threshold_api.ts similarity index 82% rename from x-pack/plugins/stack_alerts/public/alert_types/threshold/index_threshold_api.ts rename to x-pack/plugins/stack_alerts/public/rule_types/threshold/index_threshold_api.ts index 9dfcfa0bffc31f..44f44ce88e86be 100644 --- a/x-pack/plugins/stack_alerts/public/alert_types/threshold/index_threshold_api.ts +++ b/x-pack/plugins/stack_alerts/public/rule_types/threshold/index_threshold_api.ts @@ -7,12 +7,12 @@ import { HttpSetup } from '@kbn/core/public'; import { TimeSeriesResult } from '@kbn/triggers-actions-ui-plugin/common'; -import { IndexThresholdAlertParams } from './types'; +import { IndexThresholdRuleParams } from './types'; const INDEX_THRESHOLD_DATA_API_ROOT = '/internal/triggers_actions_ui/data'; -export interface GetThresholdAlertVisualizationDataParams { - model: IndexThresholdAlertParams; +export interface GetThresholdRuleVisualizationDataParams { + model: IndexThresholdRuleParams; visualizeOptions: { rangeFrom: string; rangeTo: string; @@ -21,11 +21,11 @@ export interface GetThresholdAlertVisualizationDataParams { http: HttpSetup; } -export async function getThresholdAlertVisualizationData({ +export async function getThresholdRuleVisualizationData({ model, visualizeOptions, http, -}: GetThresholdAlertVisualizationDataParams): Promise { +}: GetThresholdRuleVisualizationDataParams): Promise { const timeSeriesQueryParams = { index: model.index, timeField: model.timeField, diff --git a/x-pack/plugins/stack_alerts/public/alert_types/threshold/types.ts b/x-pack/plugins/stack_alerts/public/rule_types/threshold/types.ts similarity index 93% rename from x-pack/plugins/stack_alerts/public/alert_types/threshold/types.ts rename to x-pack/plugins/stack_alerts/public/rule_types/threshold/types.ts index 20a4bd5c6a2c04..83679f34fbb535 100644 --- a/x-pack/plugins/stack_alerts/public/alert_types/threshold/types.ts +++ b/x-pack/plugins/stack_alerts/public/rule_types/threshold/types.ts @@ -27,7 +27,7 @@ export interface GroupByType { validNormalizedTypes: string[]; } -export interface IndexThresholdAlertParams extends RuleTypeParams { +export interface IndexThresholdRuleParams extends RuleTypeParams { index: string | string[]; timeField?: string; aggType: string; diff --git a/x-pack/plugins/stack_alerts/public/alert_types/threshold/validation.test.ts b/x-pack/plugins/stack_alerts/public/rule_types/threshold/validation.test.ts similarity index 88% rename from x-pack/plugins/stack_alerts/public/alert_types/threshold/validation.test.ts rename to x-pack/plugins/stack_alerts/public/rule_types/threshold/validation.test.ts index d02afc87ad4f4e..5ac1466c794ec5 100644 --- a/x-pack/plugins/stack_alerts/public/alert_types/threshold/validation.test.ts +++ b/x-pack/plugins/stack_alerts/public/rule_types/threshold/validation.test.ts @@ -5,12 +5,12 @@ * 2.0. */ -import { IndexThresholdAlertParams } from './types'; +import { IndexThresholdRuleParams } from './types'; import { validateExpression } from './validation'; describe('expression params validation', () => { test('if index property is invalid should return proper error message', () => { - const initialParams: IndexThresholdAlertParams = { + const initialParams: IndexThresholdRuleParams = { index: [], aggType: 'count', threshold: [], @@ -21,7 +21,7 @@ describe('expression params validation', () => { expect(validateExpression(initialParams).errors.index[0]).toBe('Index is required.'); }); test('if timeField property is not defined should return proper error message', () => { - const initialParams: IndexThresholdAlertParams = { + const initialParams: IndexThresholdRuleParams = { index: ['test'], aggType: 'count', threshold: [], @@ -32,7 +32,7 @@ describe('expression params validation', () => { expect(validateExpression(initialParams).errors.timeField[0]).toBe('Time field is required.'); }); test('if aggField property is invalid should return proper error message', () => { - const initialParams: IndexThresholdAlertParams = { + const initialParams: IndexThresholdRuleParams = { index: 'test', aggType: 'avg', threshold: [], @@ -45,7 +45,7 @@ describe('expression params validation', () => { ); }); test('if termSize property is not set should return proper error message', () => { - const initialParams: IndexThresholdAlertParams = { + const initialParams: IndexThresholdRuleParams = { index: ['test'], aggType: 'count', groupBy: 'top', @@ -57,7 +57,7 @@ describe('expression params validation', () => { expect(validateExpression(initialParams).errors.termSize[0]).toBe('Term size is required.'); }); test('if termField property is not set should return proper error message', () => { - const initialParams: IndexThresholdAlertParams = { + const initialParams: IndexThresholdRuleParams = { index: ['test'], aggType: 'count', groupBy: 'top', @@ -69,7 +69,7 @@ describe('expression params validation', () => { expect(validateExpression(initialParams).errors.termField[0]).toBe('Term field is required.'); }); test('if threshold0 property is not set should return proper error message', () => { - const initialParams: IndexThresholdAlertParams = { + const initialParams: IndexThresholdRuleParams = { index: ['test'], aggType: 'count', groupBy: 'top', @@ -82,7 +82,7 @@ describe('expression params validation', () => { expect(validateExpression(initialParams).errors.threshold0[0]).toBe('Threshold0 is required.'); }); test('if threshold1 property is not set should return proper error message', () => { - const initialParams: IndexThresholdAlertParams = { + const initialParams: IndexThresholdRuleParams = { index: ['test'], aggType: 'count', groupBy: 'top', @@ -96,7 +96,7 @@ describe('expression params validation', () => { }); test('if filterKuery is invalid should return proper error message', () => { - const initialParams: IndexThresholdAlertParams = { + const initialParams: IndexThresholdRuleParams = { index: ['test'], aggType: 'count', groupBy: 'top', diff --git a/x-pack/plugins/stack_alerts/public/alert_types/threshold/validation.ts b/x-pack/plugins/stack_alerts/public/rule_types/threshold/validation.ts similarity index 96% rename from x-pack/plugins/stack_alerts/public/alert_types/threshold/validation.ts rename to x-pack/plugins/stack_alerts/public/rule_types/threshold/validation.ts index 3b92fe8ae2dbf7..bae66659da5ff8 100644 --- a/x-pack/plugins/stack_alerts/public/alert_types/threshold/validation.ts +++ b/x-pack/plugins/stack_alerts/public/rule_types/threshold/validation.ts @@ -13,9 +13,9 @@ import { builtInAggregationTypes, builtInComparators, } from '@kbn/triggers-actions-ui-plugin/public'; -import { IndexThresholdAlertParams } from './types'; +import { IndexThresholdRuleParams } from './types'; -export const validateExpression = (alertParams: IndexThresholdAlertParams): ValidationResult => { +export const validateExpression = (alertParams: IndexThresholdRuleParams): ValidationResult => { const { index, timeField, diff --git a/x-pack/plugins/stack_alerts/public/alert_types/threshold/visualization.test.tsx b/x-pack/plugins/stack_alerts/public/rule_types/threshold/visualization.test.tsx similarity index 90% rename from x-pack/plugins/stack_alerts/public/alert_types/threshold/visualization.test.tsx rename to x-pack/plugins/stack_alerts/public/rule_types/threshold/visualization.test.tsx index e6e1b18c5de8a2..7a9a07ad93b370 100644 --- a/x-pack/plugins/stack_alerts/public/alert_types/threshold/visualization.test.tsx +++ b/x-pack/plugins/stack_alerts/public/rule_types/threshold/visualization.test.tsx @@ -22,7 +22,7 @@ import { useKibana } from '@kbn/kibana-react-plugin/public'; jest.mock('@kbn/kibana-react-plugin/public'); jest.mock('./index_threshold_api', () => ({ - getThresholdAlertVisualizationData: jest.fn(() => + getThresholdRuleVisualizationData: jest.fn(() => Promise.resolve({ results: [ { group: 'a', metrics: [['b', 2]] }, @@ -32,7 +32,7 @@ jest.mock('./index_threshold_api', () => ({ ), })); -const { getThresholdAlertVisualizationData } = jest.requireMock('./index_threshold_api'); +const { getThresholdRuleVisualizationData } = jest.requireMock('./index_threshold_api'); const dataMock = dataPluginMock.createStartContract(); const chartsStartMock = chartPluginMock.createStartContract(); @@ -99,7 +99,7 @@ describe('ThresholdVisualization', () => { await nextTick(); wrapper.update(); }); - expect(getThresholdAlertVisualizationData).toHaveBeenCalledTimes(1); + expect(getThresholdRuleVisualizationData).toHaveBeenCalledTimes(1); for (let i = 1; i <= 5; i++) { await act(async () => { @@ -107,7 +107,7 @@ describe('ThresholdVisualization', () => { await nextTick(); wrapper.update(); }); - expect(getThresholdAlertVisualizationData).toHaveBeenCalledTimes(i + 1); + expect(getThresholdRuleVisualizationData).toHaveBeenCalledTimes(i + 1); } }); @@ -130,7 +130,7 @@ describe('ThresholdVisualization', () => { }); expect(wrapper.find('[data-test-subj="firstLoad"]').exists()).toBeFalsy(); - expect(getThresholdAlertVisualizationData).toHaveBeenCalled(); + expect(getThresholdRuleVisualizationData).toHaveBeenCalled(); }); test('renders chart when visualization results are available', async () => { @@ -144,7 +144,7 @@ describe('ThresholdVisualization', () => { }); test('renders multiple line series chart when visualization results contain multiple groups', async () => { - getThresholdAlertVisualizationData.mockImplementation(() => + getThresholdRuleVisualizationData.mockImplementation(() => Promise.resolve({ results: [ { group: 'a', metrics: [['b', 2]] }, @@ -165,7 +165,7 @@ describe('ThresholdVisualization', () => { test('renders error callout with message when getting visualization fails', async () => { const errorMessage = 'oh no'; - getThresholdAlertVisualizationData.mockImplementation(() => + getThresholdRuleVisualizationData.mockImplementation(() => Promise.reject(new Error(errorMessage)) ); const wrapper = await setup(); @@ -182,7 +182,7 @@ describe('ThresholdVisualization', () => { }); test('renders error callout even when unable to get message from error', async () => { - getThresholdAlertVisualizationData.mockImplementation(() => + getThresholdRuleVisualizationData.mockImplementation(() => Promise.reject(new Error(undefined)) ); const wrapper = await setup(); @@ -199,7 +199,7 @@ describe('ThresholdVisualization', () => { }); test('renders no data message when visualization results are empty', async () => { - getThresholdAlertVisualizationData.mockImplementation(() => Promise.resolve({ results: [] })); + getThresholdRuleVisualizationData.mockImplementation(() => Promise.resolve({ results: [] })); const wrapper = await setup(); expect(wrapper.find('[data-test-subj="alertVisualizationChart"]').exists()).toBeTruthy(); diff --git a/x-pack/plugins/stack_alerts/public/alert_types/threshold/visualization.tsx b/x-pack/plugins/stack_alerts/public/rule_types/threshold/visualization.tsx similarity index 96% rename from x-pack/plugins/stack_alerts/public/alert_types/threshold/visualization.tsx rename to x-pack/plugins/stack_alerts/public/rule_types/threshold/visualization.tsx index e1d2ec285f39c5..052936509564d7 100644 --- a/x-pack/plugins/stack_alerts/public/alert_types/threshold/visualization.tsx +++ b/x-pack/plugins/stack_alerts/public/rule_types/threshold/visualization.tsx @@ -35,10 +35,10 @@ import { useKibana } from '@kbn/kibana-react-plugin/public'; import { AggregationType, Comparator } from '@kbn/triggers-actions-ui-plugin/public'; import { parseDuration } from '@kbn/alerting-plugin/common/parse_duration'; import { - getThresholdAlertVisualizationData, - GetThresholdAlertVisualizationDataParams, + getThresholdRuleVisualizationData, + GetThresholdRuleVisualizationDataParams, } from './index_threshold_api'; -import { IndexThresholdAlertParams } from './types'; +import { IndexThresholdRuleParams } from './types'; const customTheme = () => { return { @@ -87,7 +87,7 @@ const getDomain = (alertInterval: string, startAt: Date) => { }; interface Props { - ruleParams: IndexThresholdAlertParams; + ruleParams: IndexThresholdRuleParams; alertInterval: string; aggregationTypes: { [key: string]: AggregationType }; comparators: { @@ -336,11 +336,11 @@ export const ThresholdVisualization: React.FunctionComponent = ({ // convert the data from the visualization API into something easier to digest with charts async function getVisualizationData( - model: IndexThresholdAlertParams, - visualizeOptions: GetThresholdAlertVisualizationDataParams['visualizeOptions'], + model: IndexThresholdRuleParams, + visualizeOptions: GetThresholdRuleVisualizationDataParams['visualizeOptions'], http: HttpSetup ) { - const vizData = await getThresholdAlertVisualizationData({ + const vizData = await getThresholdRuleVisualizationData({ model, visualizeOptions, http, diff --git a/x-pack/plugins/stack_alerts/server/feature.ts b/x-pack/plugins/stack_alerts/server/feature.ts index 9005a8435657b1..85dac89bcfb81b 100644 --- a/x-pack/plugins/stack_alerts/server/feature.ts +++ b/x-pack/plugins/stack_alerts/server/feature.ts @@ -9,9 +9,9 @@ import { i18n } from '@kbn/i18n'; import { KibanaFeatureConfig } from '@kbn/features-plugin/common'; import { DEFAULT_APP_CATEGORIES } from '@kbn/core/server'; import { TRANSFORM_RULE_TYPE } from '@kbn/transform-plugin/common'; -import { ID as IndexThreshold } from './alert_types/index_threshold/rule_type'; -import { GEO_CONTAINMENT_ID as GeoContainment } from './alert_types/geo_containment/alert_type'; -import { ES_QUERY_ID as ElasticsearchQuery } from './alert_types/es_query/constants'; +import { ID as IndexThreshold } from './rule_types/index_threshold/rule_type'; +import { GEO_CONTAINMENT_ID as GeoContainment } from './rule_types/geo_containment/alert_type'; +import { ES_QUERY_ID as ElasticsearchQuery } from './rule_types/es_query/constants'; import { STACK_ALERTS_FEATURE_ID } from '../common'; const TransformHealth = TRANSFORM_RULE_TYPE.TRANSFORM_HEALTH; diff --git a/x-pack/plugins/stack_alerts/server/index.ts b/x-pack/plugins/stack_alerts/server/index.ts index 54831242090282..36423a6c1acbc6 100644 --- a/x-pack/plugins/stack_alerts/server/index.ts +++ b/x-pack/plugins/stack_alerts/server/index.ts @@ -8,7 +8,7 @@ import { get } from 'lodash'; import { PluginConfigDescriptor, PluginInitializerContext } from '@kbn/core/server'; import { AlertingBuiltinsPlugin } from './plugin'; import { configSchema, Config } from '../common/config'; -export { ID as INDEX_THRESHOLD_ID } from './alert_types/index_threshold/rule_type'; +export { ID as INDEX_THRESHOLD_ID } from './rule_types/index_threshold/rule_type'; export const config: PluginConfigDescriptor = { exposeToBrowser: {}, diff --git a/x-pack/plugins/stack_alerts/server/plugin.ts b/x-pack/plugins/stack_alerts/server/plugin.ts index 6473e8405dda75..b4b25bb9831950 100644 --- a/x-pack/plugins/stack_alerts/server/plugin.ts +++ b/x-pack/plugins/stack_alerts/server/plugin.ts @@ -8,7 +8,7 @@ import { Plugin, Logger, CoreSetup, PluginInitializerContext } from '@kbn/core/server'; import { StackAlertsDeps, StackAlertsStartDeps } from './types'; -import { registerBuiltInAlertTypes } from './alert_types'; +import { registerBuiltInRuleTypes } from './rule_types'; import { BUILT_IN_ALERTS_FEATURE } from './feature'; export class AlertingBuiltinsPlugin @@ -23,7 +23,7 @@ export class AlertingBuiltinsPlugin public setup(core: CoreSetup, { alerting, features }: StackAlertsDeps) { features.registerKibanaFeature(BUILT_IN_ALERTS_FEATURE); - registerBuiltInAlertTypes({ + registerBuiltInRuleTypes({ logger: this.logger, data: core .getStartServices() diff --git a/x-pack/plugins/stack_alerts/server/alert_types/es_query/action_context.test.ts b/x-pack/plugins/stack_alerts/server/rule_types/es_query/action_context.test.ts similarity index 100% rename from x-pack/plugins/stack_alerts/server/alert_types/es_query/action_context.test.ts rename to x-pack/plugins/stack_alerts/server/rule_types/es_query/action_context.test.ts diff --git a/x-pack/plugins/stack_alerts/server/alert_types/es_query/action_context.ts b/x-pack/plugins/stack_alerts/server/rule_types/es_query/action_context.ts similarity index 100% rename from x-pack/plugins/stack_alerts/server/alert_types/es_query/action_context.ts rename to x-pack/plugins/stack_alerts/server/rule_types/es_query/action_context.ts diff --git a/x-pack/plugins/stack_alerts/server/alert_types/es_query/constants.ts b/x-pack/plugins/stack_alerts/server/rule_types/es_query/constants.ts similarity index 100% rename from x-pack/plugins/stack_alerts/server/alert_types/es_query/constants.ts rename to x-pack/plugins/stack_alerts/server/rule_types/es_query/constants.ts diff --git a/x-pack/plugins/stack_alerts/server/alert_types/es_query/executor.test.ts b/x-pack/plugins/stack_alerts/server/rule_types/es_query/executor.test.ts similarity index 100% rename from x-pack/plugins/stack_alerts/server/alert_types/es_query/executor.test.ts rename to x-pack/plugins/stack_alerts/server/rule_types/es_query/executor.test.ts diff --git a/x-pack/plugins/stack_alerts/server/alert_types/es_query/executor.ts b/x-pack/plugins/stack_alerts/server/rule_types/es_query/executor.ts similarity index 100% rename from x-pack/plugins/stack_alerts/server/alert_types/es_query/executor.ts rename to x-pack/plugins/stack_alerts/server/rule_types/es_query/executor.ts diff --git a/x-pack/plugins/stack_alerts/server/alert_types/es_query/index.ts b/x-pack/plugins/stack_alerts/server/rule_types/es_query/index.ts similarity index 100% rename from x-pack/plugins/stack_alerts/server/alert_types/es_query/index.ts rename to x-pack/plugins/stack_alerts/server/rule_types/es_query/index.ts diff --git a/x-pack/plugins/stack_alerts/server/alert_types/es_query/lib/fetch_es_query.ts b/x-pack/plugins/stack_alerts/server/rule_types/es_query/lib/fetch_es_query.ts similarity index 100% rename from x-pack/plugins/stack_alerts/server/alert_types/es_query/lib/fetch_es_query.ts rename to x-pack/plugins/stack_alerts/server/rule_types/es_query/lib/fetch_es_query.ts diff --git a/x-pack/plugins/stack_alerts/server/alert_types/es_query/lib/fetch_search_source_query.test.ts b/x-pack/plugins/stack_alerts/server/rule_types/es_query/lib/fetch_search_source_query.test.ts similarity index 100% rename from x-pack/plugins/stack_alerts/server/alert_types/es_query/lib/fetch_search_source_query.test.ts rename to x-pack/plugins/stack_alerts/server/rule_types/es_query/lib/fetch_search_source_query.test.ts diff --git a/x-pack/plugins/stack_alerts/server/alert_types/es_query/lib/fetch_search_source_query.ts b/x-pack/plugins/stack_alerts/server/rule_types/es_query/lib/fetch_search_source_query.ts similarity index 100% rename from x-pack/plugins/stack_alerts/server/alert_types/es_query/lib/fetch_search_source_query.ts rename to x-pack/plugins/stack_alerts/server/rule_types/es_query/lib/fetch_search_source_query.ts diff --git a/x-pack/plugins/stack_alerts/server/alert_types/es_query/lib/get_search_params.ts b/x-pack/plugins/stack_alerts/server/rule_types/es_query/lib/get_search_params.ts similarity index 100% rename from x-pack/plugins/stack_alerts/server/alert_types/es_query/lib/get_search_params.ts rename to x-pack/plugins/stack_alerts/server/rule_types/es_query/lib/get_search_params.ts diff --git a/x-pack/plugins/stack_alerts/server/alert_types/es_query/rule_type.test.ts b/x-pack/plugins/stack_alerts/server/rule_types/es_query/rule_type.test.ts similarity index 100% rename from x-pack/plugins/stack_alerts/server/alert_types/es_query/rule_type.test.ts rename to x-pack/plugins/stack_alerts/server/rule_types/es_query/rule_type.test.ts diff --git a/x-pack/plugins/stack_alerts/server/alert_types/es_query/rule_type.ts b/x-pack/plugins/stack_alerts/server/rule_types/es_query/rule_type.ts similarity index 100% rename from x-pack/plugins/stack_alerts/server/alert_types/es_query/rule_type.ts rename to x-pack/plugins/stack_alerts/server/rule_types/es_query/rule_type.ts diff --git a/x-pack/plugins/stack_alerts/server/alert_types/es_query/rule_type_params.test.ts b/x-pack/plugins/stack_alerts/server/rule_types/es_query/rule_type_params.test.ts similarity index 100% rename from x-pack/plugins/stack_alerts/server/alert_types/es_query/rule_type_params.test.ts rename to x-pack/plugins/stack_alerts/server/rule_types/es_query/rule_type_params.test.ts diff --git a/x-pack/plugins/stack_alerts/server/alert_types/es_query/rule_type_params.ts b/x-pack/plugins/stack_alerts/server/rule_types/es_query/rule_type_params.ts similarity index 100% rename from x-pack/plugins/stack_alerts/server/alert_types/es_query/rule_type_params.ts rename to x-pack/plugins/stack_alerts/server/rule_types/es_query/rule_type_params.ts diff --git a/x-pack/plugins/stack_alerts/server/alert_types/es_query/types.ts b/x-pack/plugins/stack_alerts/server/rule_types/es_query/types.ts similarity index 100% rename from x-pack/plugins/stack_alerts/server/alert_types/es_query/types.ts rename to x-pack/plugins/stack_alerts/server/rule_types/es_query/types.ts diff --git a/x-pack/plugins/stack_alerts/server/alert_types/es_query/util.ts b/x-pack/plugins/stack_alerts/server/rule_types/es_query/util.ts similarity index 100% rename from x-pack/plugins/stack_alerts/server/alert_types/es_query/util.ts rename to x-pack/plugins/stack_alerts/server/rule_types/es_query/util.ts diff --git a/x-pack/plugins/stack_alerts/server/alert_types/geo_containment/alert_type.ts b/x-pack/plugins/stack_alerts/server/rule_types/geo_containment/alert_type.ts similarity index 100% rename from x-pack/plugins/stack_alerts/server/alert_types/geo_containment/alert_type.ts rename to x-pack/plugins/stack_alerts/server/rule_types/geo_containment/alert_type.ts diff --git a/x-pack/plugins/stack_alerts/server/alert_types/geo_containment/es_query_builder.ts b/x-pack/plugins/stack_alerts/server/rule_types/geo_containment/es_query_builder.ts similarity index 100% rename from x-pack/plugins/stack_alerts/server/alert_types/geo_containment/es_query_builder.ts rename to x-pack/plugins/stack_alerts/server/rule_types/geo_containment/es_query_builder.ts diff --git a/x-pack/plugins/stack_alerts/server/alert_types/geo_containment/geo_containment.ts b/x-pack/plugins/stack_alerts/server/rule_types/geo_containment/geo_containment.ts similarity index 100% rename from x-pack/plugins/stack_alerts/server/alert_types/geo_containment/geo_containment.ts rename to x-pack/plugins/stack_alerts/server/rule_types/geo_containment/geo_containment.ts diff --git a/x-pack/plugins/stack_alerts/server/alert_types/geo_containment/get_context.ts b/x-pack/plugins/stack_alerts/server/rule_types/geo_containment/get_context.ts similarity index 100% rename from x-pack/plugins/stack_alerts/server/alert_types/geo_containment/get_context.ts rename to x-pack/plugins/stack_alerts/server/rule_types/geo_containment/get_context.ts diff --git a/x-pack/plugins/stack_alerts/server/alert_types/geo_containment/index.ts b/x-pack/plugins/stack_alerts/server/rule_types/geo_containment/index.ts similarity index 100% rename from x-pack/plugins/stack_alerts/server/alert_types/geo_containment/index.ts rename to x-pack/plugins/stack_alerts/server/rule_types/geo_containment/index.ts diff --git a/x-pack/plugins/stack_alerts/server/alert_types/geo_containment/tests/__snapshots__/alert_type.test.ts.snap b/x-pack/plugins/stack_alerts/server/rule_types/geo_containment/tests/__snapshots__/alert_type.test.ts.snap similarity index 100% rename from x-pack/plugins/stack_alerts/server/alert_types/geo_containment/tests/__snapshots__/alert_type.test.ts.snap rename to x-pack/plugins/stack_alerts/server/rule_types/geo_containment/tests/__snapshots__/alert_type.test.ts.snap diff --git a/x-pack/plugins/stack_alerts/server/alert_types/geo_containment/tests/alert_type.test.ts b/x-pack/plugins/stack_alerts/server/rule_types/geo_containment/tests/alert_type.test.ts similarity index 100% rename from x-pack/plugins/stack_alerts/server/alert_types/geo_containment/tests/alert_type.test.ts rename to x-pack/plugins/stack_alerts/server/rule_types/geo_containment/tests/alert_type.test.ts diff --git a/x-pack/plugins/stack_alerts/server/alert_types/geo_containment/tests/es_query_builder.test.ts b/x-pack/plugins/stack_alerts/server/rule_types/geo_containment/tests/es_query_builder.test.ts similarity index 100% rename from x-pack/plugins/stack_alerts/server/alert_types/geo_containment/tests/es_query_builder.test.ts rename to x-pack/plugins/stack_alerts/server/rule_types/geo_containment/tests/es_query_builder.test.ts diff --git a/x-pack/plugins/stack_alerts/server/alert_types/geo_containment/tests/es_sample_response.json b/x-pack/plugins/stack_alerts/server/rule_types/geo_containment/tests/es_sample_response.json similarity index 100% rename from x-pack/plugins/stack_alerts/server/alert_types/geo_containment/tests/es_sample_response.json rename to x-pack/plugins/stack_alerts/server/rule_types/geo_containment/tests/es_sample_response.json diff --git a/x-pack/plugins/stack_alerts/server/alert_types/geo_containment/tests/es_sample_response_shapes.json b/x-pack/plugins/stack_alerts/server/rule_types/geo_containment/tests/es_sample_response_shapes.json similarity index 100% rename from x-pack/plugins/stack_alerts/server/alert_types/geo_containment/tests/es_sample_response_shapes.json rename to x-pack/plugins/stack_alerts/server/rule_types/geo_containment/tests/es_sample_response_shapes.json diff --git a/x-pack/plugins/stack_alerts/server/alert_types/geo_containment/tests/es_sample_response_with_nesting.json b/x-pack/plugins/stack_alerts/server/rule_types/geo_containment/tests/es_sample_response_with_nesting.json similarity index 100% rename from x-pack/plugins/stack_alerts/server/alert_types/geo_containment/tests/es_sample_response_with_nesting.json rename to x-pack/plugins/stack_alerts/server/rule_types/geo_containment/tests/es_sample_response_with_nesting.json diff --git a/x-pack/plugins/stack_alerts/server/alert_types/geo_containment/tests/geo_containment.test.ts b/x-pack/plugins/stack_alerts/server/rule_types/geo_containment/tests/geo_containment.test.ts similarity index 100% rename from x-pack/plugins/stack_alerts/server/alert_types/geo_containment/tests/geo_containment.test.ts rename to x-pack/plugins/stack_alerts/server/rule_types/geo_containment/tests/geo_containment.test.ts diff --git a/x-pack/plugins/stack_alerts/server/alert_types/geo_containment/tests/get_context.test.ts b/x-pack/plugins/stack_alerts/server/rule_types/geo_containment/tests/get_context.test.ts similarity index 100% rename from x-pack/plugins/stack_alerts/server/alert_types/geo_containment/tests/get_context.test.ts rename to x-pack/plugins/stack_alerts/server/rule_types/geo_containment/tests/get_context.test.ts diff --git a/x-pack/plugins/stack_alerts/server/alert_types/index.ts b/x-pack/plugins/stack_alerts/server/rule_types/index.ts similarity index 87% rename from x-pack/plugins/stack_alerts/server/alert_types/index.ts rename to x-pack/plugins/stack_alerts/server/rule_types/index.ts index 93a3b679ab0f10..a9a2e15dbcb1cd 100644 --- a/x-pack/plugins/stack_alerts/server/alert_types/index.ts +++ b/x-pack/plugins/stack_alerts/server/rule_types/index.ts @@ -10,14 +10,14 @@ import { AlertingSetup, StackAlertsStartDeps } from '../types'; import { register as registerIndexThreshold } from './index_threshold'; import { register as registerGeoContainment } from './geo_containment'; import { register as registerEsQuery } from './es_query'; -interface RegisterAlertTypesParams { +interface RegisterRuleTypesParams { logger: Logger; data: Promise; alerting: AlertingSetup; core: CoreSetup; } -export function registerBuiltInAlertTypes(params: RegisterAlertTypesParams) { +export function registerBuiltInRuleTypes(params: RegisterRuleTypesParams) { registerIndexThreshold(params); registerGeoContainment(params); registerEsQuery(params); diff --git a/x-pack/plugins/stack_alerts/server/alert_types/index_threshold/README.md b/x-pack/plugins/stack_alerts/server/rule_types/index_threshold/README.md similarity index 100% rename from x-pack/plugins/stack_alerts/server/alert_types/index_threshold/README.md rename to x-pack/plugins/stack_alerts/server/rule_types/index_threshold/README.md diff --git a/x-pack/plugins/stack_alerts/server/alert_types/index_threshold/action_context.test.ts b/x-pack/plugins/stack_alerts/server/rule_types/index_threshold/action_context.test.ts similarity index 100% rename from x-pack/plugins/stack_alerts/server/alert_types/index_threshold/action_context.test.ts rename to x-pack/plugins/stack_alerts/server/rule_types/index_threshold/action_context.test.ts diff --git a/x-pack/plugins/stack_alerts/server/alert_types/index_threshold/action_context.ts b/x-pack/plugins/stack_alerts/server/rule_types/index_threshold/action_context.ts similarity index 100% rename from x-pack/plugins/stack_alerts/server/alert_types/index_threshold/action_context.ts rename to x-pack/plugins/stack_alerts/server/rule_types/index_threshold/action_context.ts diff --git a/x-pack/plugins/stack_alerts/server/alert_types/index_threshold/index.ts b/x-pack/plugins/stack_alerts/server/rule_types/index_threshold/index.ts similarity index 100% rename from x-pack/plugins/stack_alerts/server/alert_types/index_threshold/index.ts rename to x-pack/plugins/stack_alerts/server/rule_types/index_threshold/index.ts diff --git a/x-pack/plugins/stack_alerts/server/alert_types/index_threshold/rule_type.test.ts b/x-pack/plugins/stack_alerts/server/rule_types/index_threshold/rule_type.test.ts similarity index 100% rename from x-pack/plugins/stack_alerts/server/alert_types/index_threshold/rule_type.test.ts rename to x-pack/plugins/stack_alerts/server/rule_types/index_threshold/rule_type.test.ts diff --git a/x-pack/plugins/stack_alerts/server/alert_types/index_threshold/rule_type.ts b/x-pack/plugins/stack_alerts/server/rule_types/index_threshold/rule_type.ts similarity index 100% rename from x-pack/plugins/stack_alerts/server/alert_types/index_threshold/rule_type.ts rename to x-pack/plugins/stack_alerts/server/rule_types/index_threshold/rule_type.ts diff --git a/x-pack/plugins/stack_alerts/server/alert_types/index_threshold/rule_type_params.test.ts b/x-pack/plugins/stack_alerts/server/rule_types/index_threshold/rule_type_params.test.ts similarity index 100% rename from x-pack/plugins/stack_alerts/server/alert_types/index_threshold/rule_type_params.test.ts rename to x-pack/plugins/stack_alerts/server/rule_types/index_threshold/rule_type_params.test.ts diff --git a/x-pack/plugins/stack_alerts/server/alert_types/index_threshold/rule_type_params.ts b/x-pack/plugins/stack_alerts/server/rule_types/index_threshold/rule_type_params.ts similarity index 100% rename from x-pack/plugins/stack_alerts/server/alert_types/index_threshold/rule_type_params.ts rename to x-pack/plugins/stack_alerts/server/rule_types/index_threshold/rule_type_params.ts diff --git a/x-pack/plugins/stack_alerts/server/alert_types/lib/comparator.test.ts b/x-pack/plugins/stack_alerts/server/rule_types/lib/comparator.test.ts similarity index 100% rename from x-pack/plugins/stack_alerts/server/alert_types/lib/comparator.test.ts rename to x-pack/plugins/stack_alerts/server/rule_types/lib/comparator.test.ts diff --git a/x-pack/plugins/stack_alerts/server/alert_types/lib/comparator.ts b/x-pack/plugins/stack_alerts/server/rule_types/lib/comparator.ts similarity index 100% rename from x-pack/plugins/stack_alerts/server/alert_types/lib/comparator.ts rename to x-pack/plugins/stack_alerts/server/rule_types/lib/comparator.ts diff --git a/x-pack/plugins/stack_alerts/server/alert_types/lib/index.ts b/x-pack/plugins/stack_alerts/server/rule_types/lib/index.ts similarity index 100% rename from x-pack/plugins/stack_alerts/server/alert_types/lib/index.ts rename to x-pack/plugins/stack_alerts/server/rule_types/lib/index.ts diff --git a/x-pack/plugins/synthetics/common/runtime_types/monitor_management/monitor_types.ts b/x-pack/plugins/synthetics/common/runtime_types/monitor_management/monitor_types.ts index e76ab594e7de77..f05729e29b49c1 100644 --- a/x-pack/plugins/synthetics/common/runtime_types/monitor_management/monitor_types.ts +++ b/x-pack/plugins/synthetics/common/runtime_types/monitor_management/monitor_types.ts @@ -400,7 +400,7 @@ export type MonitorOverviewItem = t.TypeOf; export const MonitorOverviewResultCodec = t.type({ total: t.number, allMonitorIds: t.array(t.string), - pages: t.record(t.string, t.array(MonitorOverviewItemCodec)), + monitors: t.array(MonitorOverviewItemCodec), }); export type MonitorOverviewResult = t.TypeOf; diff --git a/x-pack/plugins/synthetics/common/runtime_types/monitor_management/synthetics_overview_status.ts b/x-pack/plugins/synthetics/common/runtime_types/monitor_management/synthetics_overview_status.ts index afd6579788a991..7d85b1c2278df1 100644 --- a/x-pack/plugins/synthetics/common/runtime_types/monitor_management/synthetics_overview_status.ts +++ b/x-pack/plugins/synthetics/common/runtime_types/monitor_management/synthetics_overview_status.ts @@ -7,10 +7,19 @@ import * as t from 'io-ts'; +export const OverviewStatusMetaDataCodec = t.interface({ + heartbeatId: t.string, + configId: t.string, + location: t.string, +}); + export const OverviewStatusType = t.type({ up: t.number, down: t.number, disabledCount: t.number, + upConfigs: t.array(OverviewStatusMetaDataCodec), + downConfigs: t.array(OverviewStatusMetaDataCodec), }); export type OverviewStatus = t.TypeOf; +export type OverviewStatusMetaData = t.TypeOf; diff --git a/x-pack/plugins/synthetics/e2e/journeys/synthetics/index.ts b/x-pack/plugins/synthetics/e2e/journeys/synthetics/index.ts index 1b74aa6a05b42e..5affc2796c28a3 100644 --- a/x-pack/plugins/synthetics/e2e/journeys/synthetics/index.ts +++ b/x-pack/plugins/synthetics/e2e/journeys/synthetics/index.ts @@ -8,3 +8,5 @@ export * from './getting_started.journey'; export * from './add_monitor.journey'; export * from './monitor_selector.journey'; +export * from './overview_sorting.journey'; +export * from './overview_scrolling.journey'; diff --git a/x-pack/plugins/synthetics/e2e/journeys/synthetics/monitor_selector.journey.ts b/x-pack/plugins/synthetics/e2e/journeys/synthetics/monitor_selector.journey.ts index 866df48d97e781..ab22de07846fc8 100644 --- a/x-pack/plugins/synthetics/e2e/journeys/synthetics/monitor_selector.journey.ts +++ b/x-pack/plugins/synthetics/e2e/journeys/synthetics/monitor_selector.journey.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { journey, step, expect, before } from '@elastic/synthetics'; +import { journey, step, expect, before, after } from '@elastic/synthetics'; import { addTestMonitor, cleanTestMonitors, @@ -28,6 +28,10 @@ journey(`MonitorSelector`, async ({ page, params }) => { await addTestMonitor(params.kibanaUrl, testMonitor3); }); + after(async () => { + await cleanTestMonitors(params); + }); + step('Go to monitor-management', async () => { await syntheticsApp.navigateToMonitorManagement(); }); diff --git a/x-pack/plugins/synthetics/e2e/journeys/synthetics/overview_scrolling.journey.ts b/x-pack/plugins/synthetics/e2e/journeys/synthetics/overview_scrolling.journey.ts new file mode 100644 index 00000000000000..448bc2f1068968 --- /dev/null +++ b/x-pack/plugins/synthetics/e2e/journeys/synthetics/overview_scrolling.journey.ts @@ -0,0 +1,63 @@ +/* + * 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 { before, after, expect, journey, step } from '@elastic/synthetics'; +import { + addTestMonitor, + cleanTestMonitors, + enableMonitorManagedViaApi, +} from './services/add_monitor'; +import { syntheticsAppPageProvider } from '../../page_objects/synthetics_app'; + +journey('Overview Scrolling', async ({ page, params }) => { + const syntheticsApp = syntheticsAppPageProvider({ page, kibanaUrl: params.kibanaUrl }); + + before(async () => { + await enableMonitorManagedViaApi(params.kibanaUrl); + await cleanTestMonitors(params); + + for (let i = 0; i < 100; i++) { + await addTestMonitor(params.kibanaUrl, `test monitor ${i}`); + } + + await syntheticsApp.waitForLoadingToFinish(); + }); + + after(async () => { + await cleanTestMonitors(params); + }); + + step('Go to overview', async () => { + await syntheticsApp.navigateToOverview(); + }); + + step('login to Kibana', async () => { + await syntheticsApp.loginToKibana(); + const invalid = await page.locator(`text=Username or password is incorrect. Please try again.`); + expect(await invalid.isVisible()).toBeFalsy(); + }); + + step('scroll until you see showing all monitors', async () => { + let showingAllMonitorsNode; + + const gridItems = await page.locator(`[data-test-subj="syntheticsOverviewGridItem"]`); + await page.waitForSelector(`text="test monitor 0"`); + let count = await gridItems.count(); + + expect(count).toBe(32); + + while (!showingAllMonitorsNode) { + await page.mouse.wheel(0, 100); + showingAllMonitorsNode = await page.$(`text="Showing all monitors"`); + } + + expect(await showingAllMonitorsNode.isVisible()).toBe(true); + + count = await gridItems.count(); + expect(count).toBe(100); + }); +}); diff --git a/x-pack/plugins/synthetics/e2e/journeys/synthetics/overview_sorting.journey.ts b/x-pack/plugins/synthetics/e2e/journeys/synthetics/overview_sorting.journey.ts new file mode 100644 index 00000000000000..27c6355de3c09e --- /dev/null +++ b/x-pack/plugins/synthetics/e2e/journeys/synthetics/overview_sorting.journey.ts @@ -0,0 +1,130 @@ +/* + * 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 { before, expect, journey, step } from '@elastic/synthetics'; +import { + addTestMonitor, + cleanTestMonitors, + enableMonitorManagedViaApi, +} from './services/add_monitor'; +import { syntheticsAppPageProvider } from '../../page_objects/synthetics_app'; + +journey('Overview Sorting', async ({ page, params }) => { + const syntheticsApp = syntheticsAppPageProvider({ page, kibanaUrl: params.kibanaUrl }); + const testMonitor1 = 'acb'; // second alpha, first created + const testMonitor2 = 'aCd'; // third alpha, second created + const testMonitor3 = 'Abc'; // first alpha, last created + + before(async () => { + await enableMonitorManagedViaApi(params.kibanaUrl); + await cleanTestMonitors(params); + + await addTestMonitor(params.kibanaUrl, testMonitor1); + await addTestMonitor(params.kibanaUrl, testMonitor2); + await addTestMonitor(params.kibanaUrl, testMonitor3); + + await syntheticsApp.waitForLoadingToFinish(); + }); + + step('Go to monitor-management', async () => { + await syntheticsApp.navigateToOverview(); + }); + + step('login to Kibana', async () => { + await syntheticsApp.loginToKibana(); + const invalid = await page.locator(`text=Username or password is incorrect. Please try again.`); + expect(await invalid.isVisible()).toBeFalsy(); + }); + + step('sort alpbhaetical asc', async () => { + await syntheticsApp.navigateToOverview(); + await page.waitForSelector(`[data-test-subj="syntheticsOverviewGridItem"]`); + await page.click('[data-test-subj="syntheticsOverviewSortButton"]'); + await page.click('button:has-text("Alphabetical")'); + await page.waitForSelector('text=Loading'); + await page.waitForSelector(`text=${testMonitor1}`); + await page.waitForSelector(`text=${testMonitor2}`); + await page.waitForSelector(`text=${testMonitor3}`); + const gridItems = await page.locator(`[data-test-subj="syntheticsOverviewGridItem"]`); + const first = await gridItems.nth(0); + const second = await gridItems.nth(1); + const third = await gridItems.nth(2); + const correctFirstMonitor = await first.locator(`button:has-text('${testMonitor3}')`); + const correctSecondMonitor = await second.locator(`button:has-text('${testMonitor1}')`); + const correctThirdMonitor = await third.locator(`button:has-text('${testMonitor2}')`); + expect(await correctFirstMonitor.count()).toBe(1); + expect(await correctSecondMonitor.count()).toBe(1); + expect(await correctThirdMonitor.count()).toBe(1); + }); + + step('sort alpbhaetical desc', async () => { + await page.waitForSelector(`[data-test-subj="syntheticsOverviewGridItem"]`); + await page.click('[data-test-subj="syntheticsOverviewSortButton"]'); + await page.click('button:has-text("Z -> A")'); + await page.waitForSelector('text=Loading'); + await page.waitForSelector(`text=${testMonitor1}`); + await page.waitForSelector(`text=${testMonitor2}`); + await page.waitForSelector(`text=${testMonitor3}`); + const gridItems = await page.locator(`[data-test-subj="syntheticsOverviewGridItem"]`); + const first = await gridItems.nth(0); + const second = await gridItems.nth(1); + const third = await gridItems.nth(2); + const correctFirstMonitor = await first.locator(`button:has-text('${testMonitor2}')`); + const correctSecondMonitor = await second.locator(`button:has-text('${testMonitor1}')`); + const correctThirdMonitor = await third.locator(`button:has-text('${testMonitor3}')`); + expect(await correctFirstMonitor.count()).toBe(1); + expect(await correctSecondMonitor.count()).toBe(1); + expect(await correctThirdMonitor.count()).toBe(1); + }); + + step('sort last updated asc', async () => { + await page.waitForSelector(`[data-test-subj="syntheticsOverviewGridItem"]`); + await page.click('[data-test-subj="syntheticsOverviewSortButton"]'); + await page.click('button:has-text("Last modified")'); + await page.waitForSelector('text=Loading'); + await page.waitForSelector(`text=${testMonitor1}`); + await page.waitForSelector(`text=${testMonitor2}`); + await page.waitForSelector(`text=${testMonitor3}`); + const gridItems = await page.locator(`[data-test-subj="syntheticsOverviewGridItem"]`); + const first = await gridItems.nth(0); + const second = await gridItems.nth(1); + const third = await gridItems.nth(2); + const correctFirstMonitor = await first.locator(`button:has-text('${testMonitor3}')`); + const correctSecondMonitor = await second.locator(`button:has-text('${testMonitor2}')`); + const correctThirdMonitor = await third.locator(`button:has-text('${testMonitor1}')`); + expect(await correctFirstMonitor.count()).toBe(1); + expect(await correctSecondMonitor.count()).toBe(1); + expect(await correctThirdMonitor.count()).toBe(1); + await page.waitForTimeout(30000); + }); + + step('sort last updated desc', async () => { + await page.waitForSelector(`[data-test-subj="syntheticsOverviewGridItem"]`); + await page.click('[data-test-subj="syntheticsOverviewSortButton"]'); + await page.click('button:has-text("Oldest first")'); + await page.waitForSelector('text=Loading'); + await page.waitForSelector(`text=${testMonitor1}`); + await page.waitForSelector(`text=${testMonitor2}`); + await page.waitForSelector(`text=${testMonitor3}`); + const gridItems = await page.locator(`[data-test-subj="syntheticsOverviewGridItem"]`); + const first = await gridItems.nth(0); + const second = await gridItems.nth(1); + const third = await gridItems.nth(2); + const correctFirstMonitor = await first.locator(`button:has-text('${testMonitor1}')`); + const correctSecondMonitor = await second.locator(`button:has-text('${testMonitor2}')`); + const correctThirdMonitor = await third.locator(`button:has-text('${testMonitor3}')`); + expect(await correctFirstMonitor.count()).toBe(1); + expect(await correctSecondMonitor.count()).toBe(1); + expect(await correctThirdMonitor.count()).toBe(1); + await page.waitForTimeout(30000); + }); + + step('delete monitors', async () => { + await syntheticsApp.navigateToMonitorManagement(); + expect(await syntheticsApp.deleteMonitors()).toBeTruthy(); + }); +}); diff --git a/x-pack/plugins/synthetics/e2e/page_objects/synthetics_app.tsx b/x-pack/plugins/synthetics/e2e/page_objects/synthetics_app.tsx index 2813427ae52258..71c4dafe5f07f8 100644 --- a/x-pack/plugins/synthetics/e2e/page_objects/synthetics_app.tsx +++ b/x-pack/plugins/synthetics/e2e/page_objects/synthetics_app.tsx @@ -21,6 +21,7 @@ export function syntheticsAppPageProvider({ page, kibanaUrl }: { page: Page; kib const basePath = isRemote ? remoteKibanaUrl : kibanaUrl; const monitorManagement = `${basePath}/app/synthetics/monitors`; const addMonitor = `${basePath}/app/synthetics/add-monitor`; + const overview = `${basePath}/app/synthetics`; return { ...loginPageProvider({ page, @@ -37,6 +38,10 @@ export function syntheticsAppPageProvider({ page, kibanaUrl }: { page: Page; kib await this.waitForMonitorManagementLoadingToFinish(); }, + async navigateToOverview() { + await page.goto(overview, { waitUntil: 'networkidle' }); + }, + async waitForMonitorManagementLoadingToFinish() { while (true) { if ((await page.$(this.byTestId('uptimeLoader'))) === null) break; diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/metric_item.tsx b/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/metric_item.tsx index 755777bad04ea3..bf93da5a6adea6 100644 --- a/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/metric_item.tsx +++ b/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/metric_item.tsx @@ -7,13 +7,14 @@ import { i18n } from '@kbn/i18n'; import React, { useState } from 'react'; import { Chart, Settings, Metric, MetricTrendShape } from '@elastic/charts'; -import { EuiPanel, EuiLoadingChart } from '@elastic/eui'; +import { EuiPanel } from '@elastic/eui'; import { DARK_THEME } from '@elastic/charts'; import { useTheme } from '@kbn/observability-plugin/public'; import { useLocationName, useStatusByLocation } from '../../../../hooks'; import { formatDuration } from '../../../../utils/formatting'; import { MonitorOverviewItem, Ping } from '../../../../../../../common/runtime_types'; import { ActionsPopover } from './actions_popover'; +import { OverviewGridItemLoader } from './overview_grid_item_loader'; export const getColor = (theme: ReturnType, isEnabled: boolean, ping?: Ping) => { if (!isEnabled) { @@ -101,7 +102,7 @@ export const MetricItem = ({ )} ) : ( - + )}
); diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/overview_grid.test.tsx b/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/overview_grid.test.tsx index 0e566856364bca..9514bba4258edb 100644 --- a/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/overview_grid.test.tsx +++ b/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/overview_grid.test.tsx @@ -48,22 +48,64 @@ describe('Overview Grid', () => { return hits; }; + const perPage = 20; + it('renders correctly', async () => { jest .spyOn(hooks, 'useLast50DurationChart') .mockReturnValue({ data: getMockChart(), averageDuration: 30000, loading: false }); - const { getByText, getAllByTestId } = render(, { + const { getByText, getAllByTestId, queryByText } = render(, { state: { overview: { pageState: { - perPage: 20, + perPage, }, data: { - pages: { - 0: getMockData().slice(0, 20), - 1: getMockData().slice(20, 40), + monitors: getMockData(), + allMonitorIds: [], // not critical for this test + total: getMockData().length, + }, + loaded: true, + loading: false, + }, + serviceLocations: { + locations: [ + { + id: 'us_central', + label: 'Us Central', + }, + { + id: 'us_east', + label: 'US East', }, + ], + locationsLoaded: true, + loading: false, + }, + }, + }); + + expect(getByText('Showing')).toBeInTheDocument(); + expect(getByText('40')).toBeInTheDocument(); + expect(getByText('Monitors')).toBeInTheDocument(); + expect(queryByText('Showing all monitors')).not.toBeInTheDocument(); + expect(getAllByTestId('syntheticsOverviewGridItem').length).toEqual(perPage); + }); + + it('displays showing all monitors label when reaching the end of the list', async () => { + jest + .spyOn(hooks, 'useLast50DurationChart') + .mockReturnValue({ data: getMockChart(), averageDuration: 30000, loading: false }); + + const { getByText } = render(, { + state: { + overview: { + pageState: { + perPage, + }, + data: { + monitors: getMockData().slice(0, 16), allMonitorIds: [], // not critical for this test total: getMockData().length, }, @@ -87,9 +129,6 @@ describe('Overview Grid', () => { }, }); - expect(getByText(/1-20/)).toBeInTheDocument(); - expect(getByText(/of 40/)).toBeInTheDocument(); - expect(getByText('Rows per page: 20')).toBeInTheDocument(); - expect(getAllByTestId('syntheticsOverviewGridItem').length).toEqual(20); + expect(getByText('Showing all monitors')).toBeInTheDocument(); }); }); diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/overview_grid.tsx b/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/overview_grid.tsx index 359f292079fdbc..cf3163052bd73d 100644 --- a/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/overview_grid.tsx +++ b/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/overview_grid.tsx @@ -4,40 +4,77 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import React, { useState } from 'react'; -import { useDispatch, useSelector } from 'react-redux'; +import React, { useEffect, useState, useRef } from 'react'; import { i18n } from '@kbn/i18n'; +import useThrottle from 'react-use/lib/useThrottle'; +import { useSelector } from 'react-redux'; +import useIntersection from 'react-use/lib/useIntersection'; import { + EuiFlexGroup, EuiFlexItem, EuiFlexGrid, EuiSpacer, - EuiTablePagination, - EuiFlexGroup, + EuiButtonEmpty, + EuiText, } from '@elastic/eui'; -import { selectOverviewState, setOverviewPerPageAction } from '../../../../state/overview'; +import { selectOverviewState } from '../../../../state/overview'; +import { MonitorOverviewItem } from '../../../../../../../common/runtime_types'; import { OverviewPaginationInfo } from './overview_pagination_info'; import { OverviewGridItem } from './overview_grid_item'; +import { SortFields } from './sort_fields'; +import { useMonitorsSortedByStatus } from '../../../../hooks/use_monitors_sorted_by_status'; +import { OverviewLoader } from './overview_loader'; import { OverviewStatus } from './overview_status'; export const OverviewGrid = () => { const { - data: { pages }, + data: { monitors }, loaded, - pageState: { perPage }, + pageState, } = useSelector(selectOverviewState); - const dispatch = useDispatch(); - const [page, setPage] = useState(0); - const currentMonitors = pages[page] || []; + const { perPage, sortField } = pageState; + const [loadNextPage, setLoadNextPage] = useState(false); + const [page, setPage] = useState(1); + + const { monitorsSortedByStatus } = useMonitorsSortedByStatus( + sortField === 'status' && monitors.length !== 0 + ); + const currentMonitors = getCurrentMonitors({ + monitors, + monitorsSortedByStatus, + perPage, + page, + sortField, + }); + + const intersectionRef = useRef(null); + const intersection = useIntersection(intersectionRef, { + root: null, + rootMargin: '640px', // Height of 4 rows of monitors, minus the gutters + threshold: 0.1, + }); + const hasIntersected = intersection && intersection.intersectionRatio > 0; - const goToPage = (pageNumber: number) => { - setPage(pageNumber); - }; + useThrottle(() => { + if ( + hasIntersected && + currentMonitors.length === page * perPage && + currentMonitors.length !== monitors.length + ) { + setLoadNextPage(true); + } else { + setLoadNextPage(false); + } + }, 1000); - const changeItemsPerPage = (itemsPerPage: number) => { - dispatch(setOverviewPerPageAction(itemsPerPage)); - }; + useEffect(() => { + if (loadNextPage) { + setPage((p) => p + 1); + setLoadNextPage(false); + } + }, [loadNextPage]); - return loaded ? ( + return ( <> @@ -45,29 +82,82 @@ export const OverviewGrid = () => { - + + + + + + setPage(1)} /> + + - - {currentMonitors.map((monitor) => ( - - + {loaded && currentMonitors.length ? ( + + {currentMonitors.map((monitor) => ( + + + + ))} + + ) : ( + + )} + + + + + {currentMonitors.length === monitors.length && ( + + {SHOWING_ALL_MONITORS_LABEL} + + )} + {currentMonitors.length === monitors.length && currentMonitors.length > perPage && ( + + window.scrollTo(0, 0)} + iconType="sortUp" + iconSide="right" + size="xs" + > + {SCROLL_TO_TOP_LABEL} + - ))} - - + )} + - ) : null; + ); }; + +const getCurrentMonitors = ({ + sortField, + perPage, + page, + monitors, + monitorsSortedByStatus, +}: { + sortField: string; + perPage: number; + page: number; + monitors: MonitorOverviewItem[]; + monitorsSortedByStatus: MonitorOverviewItem[]; +}) => { + if (sortField === 'status') { + return monitorsSortedByStatus.slice(0, perPage * page); + } else { + return monitors.slice(0, perPage * page); + } +}; + +const SHOWING_ALL_MONITORS_LABEL = i18n.translate( + 'xpack.synthetics.overview.grid.showingAllMonitors.label', + { + defaultMessage: 'Showing all monitors', + } +); + +const SCROLL_TO_TOP_LABEL = i18n.translate('xpack.synthetics.overview.grid.scrollToTop.label', { + defaultMessage: 'Back to top', +}); diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/overview_grid_item_loader.tsx b/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/overview_grid_item_loader.tsx new file mode 100644 index 00000000000000..71a369ad44db55 --- /dev/null +++ b/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/overview_grid_item_loader.tsx @@ -0,0 +1,21 @@ +/* + * 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 React from 'react'; +import { EuiPanel, EuiLoadingContent } from '@elastic/eui'; + +export const OverviewGridItemLoader = () => { + return ( + + + + ); +}; diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/overview_loader.tsx b/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/overview_loader.tsx new file mode 100644 index 00000000000000..92cb67187b5bb2 --- /dev/null +++ b/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/overview_loader.tsx @@ -0,0 +1,27 @@ +/* + * 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 React from 'react'; +import { EuiFlexGrid, EuiFlexItem } from '@elastic/eui'; +import { OverviewGridItemLoader } from './overview_grid_item_loader'; + +export const OverviewLoader = () => { + const ROWS = 4; + const COLUMNS = 4; + const loaders = Array(ROWS * COLUMNS).fill(null); + return ( + <> + + {loaders.map((_, i) => ( + + + + ))} + + + ); +}; diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/overview_pagination_info.tsx b/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/overview_pagination_info.tsx index a00f9f9d1692e4..d684e4aa41e88d 100644 --- a/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/overview_pagination_info.tsx +++ b/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/overview_pagination_info.tsx @@ -5,42 +5,88 @@ * 2.0. */ import React from 'react'; -import { EuiText } from '@elastic/eui'; +import { EuiText, EuiLoadingSpinner, EuiI18nNumber, EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; import { useSelector } from 'react-redux'; import { FormattedMessage } from '@kbn/i18n-react'; import { selectOverviewState } from '../../../../state/overview'; -export const OverviewPaginationInfo = ({ page }: { page: number }) => { +export const OverviewPaginationInfo = ({ + page, + loading, + startRange, + endRange, +}: { + page: number; + loading: boolean; + startRange?: number; + endRange?: number; +}) => { const { - data: { total, pages }, + data: { total, monitors }, loaded, - pageState: { perPage }, } = useSelector(selectOverviewState); - const startRange = (page + 1) * perPage - perPage + 1; - const endRange = startRange + (pages[`${page}`]?.length || 0) - 1; - if (loaded && !Object.keys(pages).length) { + if (loaded && !monitors.length) { return null; } return loaded ? ( - {`${startRange}-${endRange}`}, - total, - monitors: ( - - - - ), - }} - /> + {startRange && endRange ? ( + {`${startRange}-${endRange}`}, + total, + monitors: ( + + + + ), + }} + /> + ) : ( + + + + ), + monitorsLabel: ( + + + + ), + }} + /> + )} - ) : null; + ) : ( + + + + + + + + + + + ); }; diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/sort_fields.tsx b/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/sort_fields.tsx new file mode 100644 index 00000000000000..5bd3dfd44dd339 --- /dev/null +++ b/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/sort_fields.tsx @@ -0,0 +1,211 @@ +/* + * 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 React from 'react'; +import type { PayloadAction } from '@reduxjs/toolkit'; +import { useDispatch, useSelector } from 'react-redux'; +import { i18n } from '@kbn/i18n'; +import { EuiFlexGroup, EuiFlexItem, EuiTitle } from '@elastic/eui'; +import { ConfigKey } from '../../../../../../../common/runtime_types'; + +import { selectOverviewState, setOverviewPageStateAction } from '../../../../state/overview'; +import { SortMenu } from './sort_menu'; + +export const SortFields = ({ onSortChange }: { onSortChange?: () => void }) => { + const { + pageState: { sortOrder, sortField }, + } = useSelector(selectOverviewState); + const dispatch = useDispatch(); + const { asc, desc, label } = getOrderContent(sortField); + const handleSortChange = (payloadAction: PayloadAction) => { + if (onSortChange) { + onSortChange(); + } + dispatch(payloadAction); + }; + + const orderByOptions = [ + { + label: asc, + value: 'asc', + checked: sortOrder === 'asc', + onClick: () => { + handleSortChange( + setOverviewPageStateAction({ + sortOrder: 'asc', + }) + ); + }, + }, + { + label: desc, + value: 'desc', + checked: sortOrder === 'desc', + onClick: () => { + handleSortChange( + setOverviewPageStateAction({ + sortOrder: 'desc', + }) + ); + }, + }, + ]; + const sortByOptions = [ + { + label: STATUS_LABEL, + value: 'status', + checked: sortField === 'status', + defaultSortOrder: 'asc', + onClick: () => { + handleSortChange( + setOverviewPageStateAction({ + sortField: 'status', + sortOrder: 'asc', + }) + ); + }, + }, + { + label: ALPHABETICAL_LABEL, + value: `${ConfigKey.NAME}.keyword`, + checked: sortField === `${ConfigKey.NAME}.keyword`, + defaultSortOrder: 'asc', + onClick: () => { + handleSortChange( + setOverviewPageStateAction({ + sortField: `${ConfigKey.NAME}.keyword`, + sortOrder: 'asc', + }) + ); + }, + }, + { + label: LAST_MODIFIED_LABEL, + value: 'updated_at', + checked: sortField === 'updated_at', + defaultSortOrder: 'desc', + onClick: () => { + handleSortChange( + setOverviewPageStateAction({ + sortField: 'updated_at', + sortOrder: 'desc', + }) + ); + }, + }, + ]; + + return ( + + + + + + {SORT_TITLE} + + + + + + + + + ); +}; + +const getOrderContent = (sortField: string) => { + switch (sortField) { + case `${ConfigKey.NAME}.keyword`: + return { + asc: SORT_ALPHABETICAL_ASC, + desc: SORT_ALPHABETICAL_DESC, + label: ALPHABETICAL_LABEL, + }; + case 'updated_at': + return { + asc: SORT_UPDATED_ASC, + desc: SORT_UPDATED_DESC, + label: LAST_MODIFIED_LABEL, + }; + case 'status': + return { + asc: SORT_STATUS_ASC, + desc: SORT_STATUS_DESC, + label: STATUS_LABEL, + }; + default: + return { + asc: ASCENDING_LABEL, + desc: DESCENDING_LABEL, + label: '', + }; + } +}; + +const SORT_TITLE = i18n.translate('xpack.synthetics.overview.sortPopover.sort.title', { + defaultMessage: 'Sort', +}); + +const SORT_ALPHABETICAL_ASC = i18n.translate( + 'xpack.synthetics.overview.sortPopover.alphabetical.asc', + { + defaultMessage: 'A -> Z', + description: 'Describes ascending alphabetical sort order', + } +); + +const SORT_ALPHABETICAL_DESC = i18n.translate( + 'xpack.synthetics.overview.sortPopover.alphabetical.desc', + { + defaultMessage: 'Z -> A', + description: 'Describes descending alphabetical sort order', + } +); + +const SORT_UPDATED_ASC = i18n.translate('xpack.synthetics.overview.sortPopover.lastModified.asc', { + defaultMessage: 'Oldest first', +}); + +const SORT_UPDATED_DESC = i18n.translate( + 'xpack.synthetics.overview.sortPopover.lastModified.desc', + { + defaultMessage: 'Newest first', + } +); + +const SORT_STATUS_ASC = i18n.translate('xpack.synthetics.overview.sortPopover.status.asc', { + defaultMessage: 'Down first', +}); + +const SORT_STATUS_DESC = i18n.translate('xpack.synthetics.overview.sortPopover.status.desc', { + defaultMessage: 'Up first', +}); + +const ASCENDING_LABEL = i18n.translate('xpack.synthetics.overview.sortPopover.ascending.label', { + defaultMessage: 'Ascending', +}); + +const DESCENDING_LABEL = i18n.translate('xpack.synthetics.overview.sortPopover.descending.label', { + defaultMessage: 'Descending', +}); + +const STATUS_LABEL = i18n.translate('xpack.synthetics.overview.sortPopover.status.label', { + defaultMessage: 'Status', +}); + +const ALPHABETICAL_LABEL = i18n.translate( + 'xpack.synthetics.overview.sortPopover.alphabetical.label', + { + defaultMessage: 'Alphabetical', + } +); + +const LAST_MODIFIED_LABEL = i18n.translate( + 'xpack.synthetics.overview.sortPopover.lastModified.label', + { + defaultMessage: 'Last modified', + } +); diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/sort_menu.tsx b/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/sort_menu.tsx new file mode 100644 index 00000000000000..c512fcb0bf3886 --- /dev/null +++ b/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/sort_menu.tsx @@ -0,0 +1,126 @@ +/* + * 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 React, { useState } from 'react'; +import { i18n } from '@kbn/i18n'; +import { + EuiButtonEmpty, + EuiContextMenuPanel, + EuiContextMenuItem, + EuiPopover, + useGeneratedHtmlId, + EuiText, + EuiPanel, + EuiHorizontalRule, +} from '@elastic/eui'; + +interface Option { + label: string; + value: string; + checked: boolean; + defaultSortOrder?: string; + onClick: () => void; +} + +interface Props { + sortOptions: Option[]; + orderOptions: Option[]; + sortField: string; +} + +export const SortMenu = ({ sortOptions, orderOptions, sortField }: Props) => { + const [isPopoverOpen, setPopover] = useState(false); + + const singleContextMenuPopoverId = useGeneratedHtmlId({ + prefix: 'singleContextMenuPopover', + }); + + const onButtonClick = () => { + setPopover(!isPopoverOpen); + }; + + const closePopover = () => { + setPopover(false); + }; + + const button = ( + + {sortField} + + ); + + const items = [ + + +

{SORT_BY_TITLE}

+
+
, + ...sortOptions.map((option) => ( + + )), + , + + + +

{ORDER_BY_TITLE}

+
+
, + + ...orderOptions.map((option) => ( + + )), + ]; + + return ( + + + + ); +}; + +const ContextMenuItem = ({ + option, + onClosePopover, +}: { + option: Option; + onClosePopover: () => void; +}) => { + const getIconType = (checked: boolean) => { + return checked ? 'check' : 'empty'; + }; + + return ( + { + onClosePopover(); + option.onClick(); + }} + style={{ + marginRight: 24, + }} + > + {option.label} + + ); +}; + +const SORT_BY_TITLE = i18n.translate('xpack.synthetics.overview.sortPopover.sortBy.title', { + defaultMessage: 'Sort by', +}); + +const ORDER_BY_TITLE = i18n.translate('xpack.synthetics.overview.sortPopover.orderBy.title', { + defaultMessage: 'Order', +}); diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/overview/overview_page.tsx b/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/overview/overview_page.tsx index 23997199c5b603..7b15883b79f3ed 100644 --- a/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/overview/overview_page.tsx +++ b/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/overview/overview_page.tsx @@ -7,13 +7,13 @@ import React, { useEffect } from 'react'; import { useDispatch, useSelector } from 'react-redux'; -import { EuiLoadingElastic, EuiFlexGroup, EuiFlexItem, EuiSpacer } from '@elastic/eui'; import { useTrackPageview } from '@kbn/observability-plugin/public'; import { Redirect } from 'react-router-dom'; import { useEnablement } from '../../../hooks'; import { useSyntheticsRefreshContext } from '../../../contexts/synthetics_refresh_context'; import { fetchMonitorOverviewAction, + quietFetchOverviewAction, selectOverviewState, selectServiceLocationsState, } from '../../../state'; @@ -34,7 +34,7 @@ export const OverviewPage: React.FC = () => { const { refreshApp, lastRefresh } = useSyntheticsRefreshContext(); - const { loading, pageState } = useSelector(selectOverviewState); + const { pageState } = useSelector(selectOverviewState); const { loading: locationsLoading, locationsLoaded } = useSelector(selectServiceLocationsState); useEffect(() => { @@ -48,10 +48,14 @@ export const OverviewPage: React.FC = () => { if (!locationsLoading && !locationsLoaded) { dispatch(getServiceLocations()); } - }, [dispatch, locationsLoaded, locationsLoading, pageState]); + }, [dispatch, locationsLoaded, locationsLoading]); useEffect(() => { dispatch(fetchMonitorOverviewAction.get(pageState)); + }, [dispatch, pageState]); + + useEffect(() => { + dispatch(quietFetchOverviewAction.get(pageState)); }, [dispatch, pageState, lastRefresh]); const { @@ -69,14 +73,5 @@ export const OverviewPage: React.FC = () => { return ; } - return !loading ? ( - - ) : ( - - - - - - - ); + return ; }; diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/step_details_page/components/network_timings_donut.tsx b/x-pack/plugins/synthetics/public/apps/synthetics/components/step_details_page/components/network_timings_donut.tsx new file mode 100644 index 00000000000000..62e5219c68105a --- /dev/null +++ b/x-pack/plugins/synthetics/public/apps/synthetics/components/step_details_page/components/network_timings_donut.tsx @@ -0,0 +1,89 @@ +/* + * 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 { + Chart, + Partition, + Settings, + PartitionLayout, + Datum, + LIGHT_THEME, + PartialTheme, +} from '@elastic/charts'; +import React from 'react'; +import { useTheme } from '@kbn/observability-plugin/public'; + +import { EuiLoadingSpinner, EuiSpacer, EuiTitle } from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; +import { useNetworkTimings } from '../hooks/use_network_timings'; + +const themeOverrides: PartialTheme = { + chartMargins: { top: 0, bottom: 0, left: 0, right: 0 }, + partition: { + linkLabel: { + maximumSection: Infinity, + maxCount: 0, + }, + idealFontSizeJump: 1.1, + outerSizeRatio: 0.9, + emptySizeRatio: 0.6, + circlePadding: 5, + }, +}; + +export const NetworkTimingsDonut = () => { + const networkTimings = useNetworkTimings(); + + const theme = useTheme(); + + if (!networkTimings) { + return ; + } + + return ( + <> + +

{TIMINGS_BREAKDOWN}

+
+ + + + d?.value} + valueFormatter={(d: number) => formatMillisecond(d)} + layers={[ + { + groupByRollup: (d: Datum) => d.label, + nodeLabel: (d: Datum) => d, + shape: { + fillColor: (d: Datum, index: number) => { + return (theme.eui as unknown as Record)[ + `euiColorVis${index + 1}` + ]; + }, + }, + }, + ]} + /> + + + ); +}; + +const TIMINGS_BREAKDOWN = i18n.translate('xpack.synthetics.stepDetailsRoute.timingsBreakdown', { + defaultMessage: 'Timings breakdown', +}); + +export const formatMillisecond = (ms: number) => { + if (ms < 1000) { + return `${ms.toFixed(0)} ms`; + } + return `${(ms / 1000).toFixed(1)} s`; +}; diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/step_details_page/components/timings_breakdown/breakdown_legend.tsx b/x-pack/plugins/synthetics/public/apps/synthetics/components/step_details_page/components/timings_breakdown/breakdown_legend.tsx new file mode 100644 index 00000000000000..323bd98a4f7585 --- /dev/null +++ b/x-pack/plugins/synthetics/public/apps/synthetics/components/step_details_page/components/timings_breakdown/breakdown_legend.tsx @@ -0,0 +1,40 @@ +/* + * 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 { EuiFlexGroup, EuiFlexItem, EuiHealth, EuiSpacer, EuiText } from '@elastic/eui'; +import React from 'react'; +import { useTheme } from '@kbn/observability-plugin/public'; +import { formatMillisecond } from '../network_timings_donut'; +import { useNetworkTimings } from '../../hooks/use_network_timings'; + +export const BreakdownLegend = () => { + const networkTimings = useNetworkTimings(); + + const theme = useTheme(); + + return ( + <> + + + {networkTimings.timingsWithLabels.map(({ label, value }, index) => ( + + + )[`euiColorVis${index + 1}`]} + > + {label} + + + + {formatMillisecond(value)} + + + ))} + + + ); +}; diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/step_details_page/hooks/use_network_timings.ts b/x-pack/plugins/synthetics/public/apps/synthetics/components/step_details_page/hooks/use_network_timings.ts new file mode 100644 index 00000000000000..911e5a54f05f77 --- /dev/null +++ b/x-pack/plugins/synthetics/public/apps/synthetics/components/step_details_page/hooks/use_network_timings.ts @@ -0,0 +1,204 @@ +/* + * 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 { useEsSearch } from '@kbn/observability-plugin/public'; +import { + NETWORK_TIMINGS_FIELDS, + SYNTHETICS_BLOCKED_TIMINGS, + SYNTHETICS_CONNECT_TIMINGS, + SYNTHETICS_DNS_TIMINGS, + SYNTHETICS_RECEIVE_TIMINGS, + SYNTHETICS_SEND_TIMINGS, + SYNTHETICS_SSL_TIMINGS, + SYNTHETICS_STEP_DURATION, + SYNTHETICS_TOTAL_TIMINGS, + SYNTHETICS_WAIT_TIMINGS, +} from '@kbn/observability-plugin/common'; +import { useParams } from 'react-router-dom'; +import { i18n } from '@kbn/i18n'; + +export const useStepFilters = (prevCheckGroupId?: string) => { + const { checkGroupId, stepIndex } = useParams<{ checkGroupId: string; stepIndex: string }>(); + return [ + { + term: { + 'monitor.check_group': prevCheckGroupId ?? checkGroupId, + }, + }, + { + term: { + 'synthetics.step.index': Number(stepIndex), + }, + }, + ]; +}; + +export const useNetworkTimings = () => { + const runTimeMappings = NETWORK_TIMINGS_FIELDS.reduce( + (acc, field) => ({ + ...acc, + [field]: { + type: 'double', + }, + }), + {} + ); + + const networkAggs = NETWORK_TIMINGS_FIELDS.reduce( + (acc, field) => ({ + ...acc, + [field]: { + sum: { + field, + }, + }, + }), + {} + ); + + const { data } = useEsSearch( + { + index: 'synthetics-*', + body: { + size: 0, + runtime_mappings: runTimeMappings, + query: { + bool: { + filter: [ + { + term: { + 'synthetics.type': 'journey/network_info', + }, + }, + ...useStepFilters(), + ], + }, + }, + aggs: { + ...networkAggs, + totalDuration: { + sum: { + field: SYNTHETICS_STEP_DURATION, + }, + }, + dns: { + sum: { + field: SYNTHETICS_DNS_TIMINGS, + }, + }, + ssl: { + sum: { + field: SYNTHETICS_SSL_TIMINGS, + }, + }, + blocked: { + sum: { + field: SYNTHETICS_BLOCKED_TIMINGS, + }, + }, + connect: { + sum: { + field: SYNTHETICS_CONNECT_TIMINGS, + }, + }, + receive: { + sum: { + field: SYNTHETICS_RECEIVE_TIMINGS, + }, + }, + send: { + sum: { + field: SYNTHETICS_SEND_TIMINGS, + }, + }, + wait: { + sum: { + field: SYNTHETICS_WAIT_TIMINGS, + }, + }, + total: { + sum: { + field: SYNTHETICS_TOTAL_TIMINGS, + }, + }, + }, + }, + }, + [], + { name: 'networkTimings' } + ); + + const aggs = data?.aggregations; + + const timings = { + dns: aggs?.dns.value ?? 0, + connect: aggs?.connect.value ?? 0, + receive: aggs?.receive.value ?? 0, + send: aggs?.send.value ?? 0, + wait: aggs?.wait.value ?? 0, + blocked: aggs?.blocked.value ?? 0, + ssl: aggs?.ssl.value ?? 0, + }; + + return { + timings, + timingsWithLabels: [ + { + value: timings.dns, + label: SYNTHETICS_DNS_TIMINGS_LABEL, + }, + { + value: timings.ssl, + label: SYNTHETICS_SSL_TIMINGS_LABEL, + }, + { + value: timings.blocked, + label: SYNTHETICS_BLOCKED_TIMINGS_LABEL, + }, + { + value: timings.connect, + label: SYNTHETICS_CONNECT_TIMINGS_LABEL, + }, + { + value: timings.receive, + label: SYNTHETICS_RECEIVE_TIMINGS_LABEL, + }, + { + value: timings.send, + label: SYNTHETICS_SEND_TIMINGS_LABEL, + }, + { + value: timings.wait, + label: SYNTHETICS_WAIT_TIMINGS_LABEL, + }, + ].sort((a, b) => b.value - a.value), + totalDuration: aggs?.totalDuration.value ?? 0, + }; +}; + +const SYNTHETICS_CONNECT_TIMINGS_LABEL = i18n.translate('xpack.synthetics.connect.label', { + defaultMessage: 'Connect', +}); +const SYNTHETICS_DNS_TIMINGS_LABEL = i18n.translate('xpack.synthetics.dns', { + defaultMessage: 'DNS', +}); +const SYNTHETICS_WAIT_TIMINGS_LABEL = i18n.translate('xpack.synthetics.wait', { + defaultMessage: 'Wait', +}); + +const SYNTHETICS_SSL_TIMINGS_LABEL = i18n.translate('xpack.synthetics.ssl', { + defaultMessage: 'SSL', +}); +const SYNTHETICS_BLOCKED_TIMINGS_LABEL = i18n.translate('xpack.synthetics.blocked', { + defaultMessage: 'Blocked', +}); +const SYNTHETICS_SEND_TIMINGS_LABEL = i18n.translate('xpack.synthetics.send', { + defaultMessage: 'Send', +}); +const SYNTHETICS_RECEIVE_TIMINGS_LABEL = i18n.translate('xpack.synthetics.receive', { + defaultMessage: 'Receive', +}); diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/step_details_page/network_timings_breakdown.tsx b/x-pack/plugins/synthetics/public/apps/synthetics/components/step_details_page/network_timings_breakdown.tsx index 2413d917665d4f..27ec3e6deffbb3 100644 --- a/x-pack/plugins/synthetics/public/apps/synthetics/components/step_details_page/network_timings_breakdown.tsx +++ b/x-pack/plugins/synthetics/public/apps/synthetics/components/step_details_page/network_timings_breakdown.tsx @@ -12,12 +12,12 @@ import { EuiSpacer, EuiTitle } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { ClientPluginsStart } from '../../../../plugin'; -export const NetworkTimingsBreakdown = () => { +export const NetworkTimingsBreakdown = ({ monitorId }: { monitorId: string }) => { const { observability } = useKibana().services; const ExploratoryViewEmbeddable = observability.ExploratoryViewEmbeddable; - const { checkGroupId, stepIndex } = useParams<{ checkGroupId: string; stepIndex: string }>(); + const { stepIndex } = useParams<{ checkGroupId: string; stepIndex: string }>(); return ( <> @@ -37,7 +37,7 @@ export const NetworkTimingsBreakdown = () => { dataType: 'synthetics', name: 'Network timings', selectedMetricField: 'network_timings', - reportDefinitions: { 'monitor.check_group': [checkGroupId] }, + reportDefinitions: { 'monitor.id': [monitorId] }, time: { from: 'now-24h/h', to: 'now', diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/step_details_page/step_detail_page.tsx b/x-pack/plugins/synthetics/public/apps/synthetics/components/step_details_page/step_detail_page.tsx index 999d805d6167cf..af7e8dfe9ced25 100644 --- a/x-pack/plugins/synthetics/public/apps/synthetics/components/step_details_page/step_detail_page.tsx +++ b/x-pack/plugins/synthetics/public/apps/synthetics/components/step_details_page/step_detail_page.tsx @@ -16,8 +16,10 @@ import { EuiLoadingSpinner, EuiSpacer, } from '@elastic/eui'; +import { BreakdownLegend } from './components/timings_breakdown/breakdown_legend'; import { WaterfallChartContainer } from './components/network_waterfall/step_detail/waterfall/waterfall_chart_container'; import { ObjectWeightList } from './components/object_weight_list'; +import { NetworkTimingsDonut } from './components/network_timings_donut'; import { NetworkTimingsBreakdown } from './network_timings_breakdown'; import { ObjectCountList } from './components/object_count_list'; import { StepImage } from './components/step_image'; @@ -73,10 +75,13 @@ export const StepDetailPage = () => { - {/* TODO: Add breakdown of network timings donut*/} + + + + - + diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/hooks/use_location_names.test.tsx b/x-pack/plugins/synthetics/public/apps/synthetics/hooks/use_location_names.test.tsx new file mode 100644 index 00000000000000..26d808ca5ef7c7 --- /dev/null +++ b/x-pack/plugins/synthetics/public/apps/synthetics/hooks/use_location_names.test.tsx @@ -0,0 +1,53 @@ +/* + * 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 React from 'react'; +import { renderHook } from '@testing-library/react-hooks'; +import { useLocationNames } from './use_location_names'; +import { WrappedHelper } from '../utils/testing'; + +describe('useMonitorListFilters', () => { + beforeEach(() => { + jest.clearAllMocks(); + }); + + it('returns map of id to name', () => { + const WrapperWithState = ({ children }: { children: React.ReactElement }) => { + return ( + + {children} + + ); + }; + + const { result } = renderHook(() => useLocationNames(), { wrapper: WrapperWithState }); + expect(result.current).toEqual({ + us_central: 'US Central', + us_east: 'US East', + }); + }); +}); diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/hooks/use_location_names.tsx b/x-pack/plugins/synthetics/public/apps/synthetics/hooks/use_location_names.tsx new file mode 100644 index 00000000000000..1911719a093e3a --- /dev/null +++ b/x-pack/plugins/synthetics/public/apps/synthetics/hooks/use_location_names.tsx @@ -0,0 +1,29 @@ +/* + * 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 { useMemo, useEffect } from 'react'; +import { useSelector, useDispatch } from 'react-redux'; +import { selectServiceLocationsState, getServiceLocations } from '../state'; + +export function useLocationNames() { + const dispatch = useDispatch(); + const { locationsLoaded, locations } = useSelector(selectServiceLocationsState); + useEffect(() => { + if (!locationsLoaded) { + dispatch(getServiceLocations()); + } + }); + + return useMemo( + () => + locations.reduce>((acc, location) => { + acc[location.id] = location.label; + return acc; + }, {}), + [locations] + ); +} diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/hooks/use_monitors_sorted_by_status.test.tsx b/x-pack/plugins/synthetics/public/apps/synthetics/hooks/use_monitors_sorted_by_status.test.tsx new file mode 100644 index 00000000000000..844eb04649f8e6 --- /dev/null +++ b/x-pack/plugins/synthetics/public/apps/synthetics/hooks/use_monitors_sorted_by_status.test.tsx @@ -0,0 +1,244 @@ +/* + * 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 React from 'react'; +import { renderHook } from '@testing-library/react-hooks'; +import { useMonitorsSortedByStatus } from './use_monitors_sorted_by_status'; +import { WrappedHelper } from '../utils/testing'; + +describe('useMonitorsSortedByStatus', () => { + const location1 = { + url: 'mockUrl', + id: 'us_central', + label: 'US Central', + isServiceManaged: true, + }; + + const location2 = { + url: 'mockUrl', + id: 'us_east', + label: 'US East', + isServiceManaged: true, + }; + + beforeEach(() => { + jest.clearAllMocks(); + }); + + const WrapperWithState = ({ + children, + sortOrder = 'asc', + }: { + children: React.ReactElement; + sortOrder: 'asc' | 'desc'; + }) => { + return ( + + {children} + + ); + }; + + it('returns monitors down first when sort order is asc', () => { + const { result } = renderHook(() => useMonitorsSortedByStatus(true), { + wrapper: WrapperWithState, + }); + expect(result.current).toEqual({ + monitorsSortedByStatus: [ + { + id: 'test-monitor-2', + name: 'Test monitor 2', + location: location1, + isEnabled: true, + }, + { + id: 'test-monitor-3', + name: 'Test monitor 3', + location: location1, + isEnabled: true, + }, + { + id: 'test-monitor-1', + name: 'Test monitor 1', + location: location2, + isEnabled: true, + }, + { + id: 'test-monitor-2', + name: 'Test monitor 2', + location: location2, + isEnabled: true, + }, + { + id: 'test-monitor-3', + name: 'Test monitor 3', + location: location2, + isEnabled: true, + }, + { + id: 'test-monitor-1', + name: 'Test monitor 1', + location: location1, + isEnabled: false, + }, + ], + downMonitors: { + 'test-monitor-1': ['US Central'], + 'test-monitor-2': ['US Central'], + 'test-monitor-3': ['US Central'], + }, + }); + }); + + it('returns monitors up first when sort order is desc', () => { + const { result } = renderHook(() => useMonitorsSortedByStatus(true), { + wrapper: ({ children }: { children: React.ReactElement }) => ( + {children} + ), + }); + expect(result.current).toEqual({ + monitorsSortedByStatus: [ + { + id: 'test-monitor-1', + name: 'Test monitor 1', + location: location2, + isEnabled: true, + }, + { + id: 'test-monitor-2', + name: 'Test monitor 2', + location: location2, + isEnabled: true, + }, + { + id: 'test-monitor-3', + name: 'Test monitor 3', + location: location2, + isEnabled: true, + }, + { + id: 'test-monitor-2', + name: 'Test monitor 2', + location: location1, + isEnabled: true, + }, + { + id: 'test-monitor-3', + name: 'Test monitor 3', + location: location1, + isEnabled: true, + }, + { + id: 'test-monitor-1', + name: 'Test monitor 1', + location: location1, + isEnabled: false, + }, + ], + downMonitors: { + 'test-monitor-1': ['US Central'], + 'test-monitor-2': ['US Central'], + 'test-monitor-3': ['US Central'], + }, + }); + }); +}); diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/hooks/use_monitors_sorted_by_status.tsx b/x-pack/plugins/synthetics/public/apps/synthetics/hooks/use_monitors_sorted_by_status.tsx new file mode 100644 index 00000000000000..0227722d7092a5 --- /dev/null +++ b/x-pack/plugins/synthetics/public/apps/synthetics/hooks/use_monitors_sorted_by_status.tsx @@ -0,0 +1,83 @@ +/* + * 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 { useEffect, useMemo, useState, useRef } from 'react'; +import { isEqual } from 'lodash'; +import { useSelector } from 'react-redux'; +import { MonitorOverviewItem } from '../../../../common/runtime_types'; +import { selectOverviewState } from '../state/overview'; +import { useLocationNames } from './use_location_names'; + +export function useMonitorsSortedByStatus(shouldUpdate: boolean) { + const { + pageState: { sortOrder }, + data: { monitors }, + status, + } = useSelector(selectOverviewState); + const [monitorsSortedByStatus, setMonitorsSortedByStatus] = useState< + Record + >({ up: [], down: [], disabled: [] }); + const downMonitors = useRef | null>(null); + const currentMonitors = useRef(monitors); + const locationNames = useLocationNames(); + + useEffect(() => { + if (!status) { + return; + } + const { downConfigs } = status; + const downMonitorMap: Record = {}; + downConfigs.forEach(({ location, configId }) => { + if (downMonitorMap[configId]) { + downMonitorMap[configId].push(location); + } else { + downMonitorMap[configId] = [location]; + } + }); + + if ( + !isEqual(downMonitorMap, downMonitors.current) || + !isEqual(monitors, currentMonitors.current) + ) { + const orderedDownMonitors: MonitorOverviewItem[] = []; + const orderedUpMonitors: MonitorOverviewItem[] = []; + const orderedDisabledMonitors: MonitorOverviewItem[] = []; + monitors.forEach((monitor) => { + const monitorLocation = locationNames[monitor.location.id]; + if (!monitor.isEnabled) { + orderedDisabledMonitors.push(monitor); + } else if ( + Object.keys(downMonitorMap).includes(monitor.id) && + downMonitorMap[monitor.id].includes(monitorLocation) + ) { + orderedDownMonitors.push(monitor); + } else { + orderedUpMonitors.push(monitor); + } + }); + downMonitors.current = downMonitorMap; + currentMonitors.current = monitors; + setMonitorsSortedByStatus({ + down: orderedDownMonitors, + up: orderedUpMonitors, + disabled: orderedDisabledMonitors, + }); + } + }, [monitors, locationNames, downMonitors, status]); + + return useMemo(() => { + const upAndDownMonitors = + sortOrder === 'asc' + ? [...monitorsSortedByStatus.down, ...monitorsSortedByStatus.up] + : [...monitorsSortedByStatus.up, ...monitorsSortedByStatus.down]; + + return { + monitorsSortedByStatus: [...upAndDownMonitors, ...monitorsSortedByStatus.disabled], + downMonitors: downMonitors.current, + }; + }, [downMonitors, monitorsSortedByStatus, sortOrder]); +} diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/routes.tsx b/x-pack/plugins/synthetics/public/apps/synthetics/routes.tsx index be85e9bdcc08de..8f9253cf984a6b 100644 --- a/x-pack/plugins/synthetics/public/apps/synthetics/routes.tsx +++ b/x-pack/plugins/synthetics/public/apps/synthetics/routes.tsx @@ -148,7 +148,7 @@ const getRoutes = ( values: { baseTitle }, }), path: OVERVIEW_ROUTE, - component: () => , + component: OverviewPage, dataTestSubj: 'syntheticsOverviewPage', pageHeader: { pageTitle: ( diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/state/overview/actions.ts b/x-pack/plugins/synthetics/public/apps/synthetics/state/overview/actions.ts index c89179a41806ec..d94ab2d9652161 100644 --- a/x-pack/plugins/synthetics/public/apps/synthetics/state/overview/actions.ts +++ b/x-pack/plugins/synthetics/public/apps/synthetics/state/overview/actions.ts @@ -15,7 +15,9 @@ export const fetchMonitorOverviewAction = createAsyncAction< MonitorOverviewResult >('fetchMonitorOverviewAction'); -export const setOverviewPerPageAction = createAction('setOverviewPerPageAction'); +export const setOverviewPageStateAction = createAction>( + 'setOverviewPageStateAction' +); export const quietFetchOverviewAction = createAsyncAction< MonitorOverviewPageState, diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/state/overview/api.ts b/x-pack/plugins/synthetics/public/apps/synthetics/state/overview/api.ts index ecd91b16bb940b..db470a18b0423a 100644 --- a/x-pack/plugins/synthetics/public/apps/synthetics/state/overview/api.ts +++ b/x-pack/plugins/synthetics/public/apps/synthetics/state/overview/api.ts @@ -21,7 +21,7 @@ export const fetchMonitorOverview = async ( ): Promise => { return await apiService.get( SYNTHETICS_API_URLS.SYNTHETICS_OVERVIEW, - { perPage: pageState.perPage }, + { perPage: pageState.perPage, sortOrder: pageState.sortOrder, sortField: pageState.sortField }, MonitorOverviewResultCodec ); }; diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/state/overview/effects.ts b/x-pack/plugins/synthetics/public/apps/synthetics/state/overview/effects.ts index 56b056a93110c1..0e880dca5a387a 100644 --- a/x-pack/plugins/synthetics/public/apps/synthetics/state/overview/effects.ts +++ b/x-pack/plugins/synthetics/public/apps/synthetics/state/overview/effects.ts @@ -17,7 +17,7 @@ import { fetchMonitorOverview, fetchOverviewStatus } from './api'; export function* fetchMonitorOverviewEffect() { yield takeLeading( - fetchMonitorOverviewAction.get, + [fetchMonitorOverviewAction.get, quietFetchOverviewAction.get], fetchEffectFactory( fetchMonitorOverview, fetchMonitorOverviewAction.success, @@ -26,17 +26,6 @@ export function* fetchMonitorOverviewEffect() { ); } -export function* quietFetchOverviewEffect() { - yield takeLeading( - quietFetchOverviewAction.get, - fetchEffectFactory( - fetchMonitorOverview, - quietFetchOverviewAction.success, - quietFetchOverviewAction.fail - ) - ); -} - export function* fetchOverviewStatusEffect() { yield takeLatest( [fetchOverviewStatusAction.get, fetchUpsertSuccessAction], diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/state/overview/index.ts b/x-pack/plugins/synthetics/public/apps/synthetics/state/overview/index.ts index 82272638ffb116..8f2031480f1153 100644 --- a/x-pack/plugins/synthetics/public/apps/synthetics/state/overview/index.ts +++ b/x-pack/plugins/synthetics/public/apps/synthetics/state/overview/index.ts @@ -17,7 +17,7 @@ import { fetchMonitorOverviewAction, fetchOverviewStatusAction, quietFetchOverviewAction, - setOverviewPerPageAction, + setOverviewPageStateAction, } from './actions'; export interface MonitorOverviewState { @@ -34,10 +34,12 @@ const initialState: MonitorOverviewState = { data: { total: 0, allMonitorIds: [], - pages: {}, + monitors: [], }, pageState: { - perPage: 20, + perPage: 16, + sortOrder: 'asc', + sortField: 'status', }, loading: false, loaded: false, @@ -68,10 +70,10 @@ export const monitorOverviewReducer = createReducer(initialState, (builder) => { .addCase(quietFetchOverviewAction.fail, (state, action) => { state.error = action.payload; }) - .addCase(setOverviewPerPageAction, (state, action) => { + .addCase(setOverviewPageStateAction, (state, action) => { state.pageState = { ...state.pageState, - perPage: action.payload, + ...action.payload, }; state.loaded = false; }) diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/state/overview/models.ts b/x-pack/plugins/synthetics/public/apps/synthetics/state/overview/models.ts index d7dcaafeba9179..6cc423a3bddda1 100644 --- a/x-pack/plugins/synthetics/public/apps/synthetics/state/overview/models.ts +++ b/x-pack/plugins/synthetics/public/apps/synthetics/state/overview/models.ts @@ -7,4 +7,6 @@ export interface MonitorOverviewPageState { perPage: number; + sortOrder: 'asc' | 'desc'; + sortField: string; } diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/state/root_effect.ts b/x-pack/plugins/synthetics/public/apps/synthetics/state/root_effect.ts index f8f13b7ed54e8f..7a5c55d72fd249 100644 --- a/x-pack/plugins/synthetics/public/apps/synthetics/state/root_effect.ts +++ b/x-pack/plugins/synthetics/public/apps/synthetics/state/root_effect.ts @@ -11,11 +11,7 @@ import { fetchSyntheticsMonitorEffect } from './monitor_details'; import { fetchIndexStatusEffect } from './index_status'; import { fetchSyntheticsEnablementEffect } from './synthetics_enablement'; import { fetchMonitorListEffect, upsertMonitorEffect } from './monitor_list'; -import { - fetchMonitorOverviewEffect, - quietFetchOverviewEffect, - fetchOverviewStatusEffect, -} from './overview'; +import { fetchMonitorOverviewEffect, fetchOverviewStatusEffect } from './overview'; import { fetchServiceLocationsEffect } from './service_locations'; import { browserJourneyEffects } from './browser_journey'; @@ -28,7 +24,6 @@ export const rootEffect = function* root(): Generator { fork(fetchMonitorListEffect), fork(fetchSyntheticsMonitorEffect), fork(fetchMonitorOverviewEffect), - fork(quietFetchOverviewEffect), fork(browserJourneyEffects), fork(fetchOverviewStatusEffect), fork(fetchNetworkEventsEffect), diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/utils/testing/__mocks__/synthetics_store.mock.ts b/x-pack/plugins/synthetics/public/apps/synthetics/utils/testing/__mocks__/synthetics_store.mock.ts index c591b90ac5440e..7bf845deee9a6e 100644 --- a/x-pack/plugins/synthetics/public/apps/synthetics/utils/testing/__mocks__/synthetics_store.mock.ts +++ b/x-pack/plugins/synthetics/public/apps/synthetics/utils/testing/__mocks__/synthetics_store.mock.ts @@ -87,11 +87,13 @@ export const mockState: SyntheticsAppState = { overview: { pageState: { perPage: 10, + sortOrder: 'asc', + sortField: 'name.keyword', }, data: { total: 0, allMonitorIds: [], - pages: {}, + monitors: [], }, error: null, loaded: false, diff --git a/x-pack/plugins/synthetics/server/routes/monitor_cruds/get_monitor.ts b/x-pack/plugins/synthetics/server/routes/monitor_cruds/get_monitor.ts index 1d02454ce04ba6..0a3ece38ee7883 100644 --- a/x-pack/plugins/synthetics/server/routes/monitor_cruds/get_monitor.ts +++ b/x-pack/plugins/synthetics/server/routes/monitor_cruds/get_monitor.ts @@ -6,7 +6,7 @@ */ import { schema } from '@kbn/config-schema'; import { SavedObjectsErrorHelpers } from '@kbn/core/server'; -import { ConfigKey } from '../../../common/runtime_types'; +import { ConfigKey, MonitorOverviewItem, SyntheticsMonitor } from '../../../common/runtime_types'; import { UMServerLibs } from '../../legacy_uptime/lib/lib'; import { SyntheticsRestApiRouteFactory } from '../../legacy_uptime/routes/types'; import { API_URLS, SYNTHETICS_API_URLS } from '../../../common/constants'; @@ -112,55 +112,42 @@ export const getSyntheticsMonitorOverviewRoute: SyntheticsRestApiRouteFactory = query: querySchema, }, handler: async ({ request, savedObjectsClient, syntheticsMonitorClient }): Promise => { - const { perPage = 5 } = request.query; - const { saved_objects: monitors } = await getMonitors( - { - perPage: 1000, - sortField: 'name.keyword', - sortOrder: 'asc', - page: 1, - }, - syntheticsMonitorClient.syntheticsService, - savedObjectsClient - ); + const { sortField, sortOrder } = request.query; + const finder = savedObjectsClient.createPointInTimeFinder({ + type: syntheticsMonitorType, + sortField: sortField === 'status' ? `${ConfigKey.NAME}.keyword` : sortField, + sortOrder, + perPage: 500, + }); const allMonitorIds: string[] = []; - const pages: Record = {}; - let currentPage = 0; - let currentItem = 0; let total = 0; + const allMonitors: MonitorOverviewItem[] = []; - monitors.forEach((monitor) => { + for await (const result of finder.find()) { /* collect all monitor ids for use * in filtering overview requests */ - const id = monitor.id; - allMonitorIds.push(id); + result.saved_objects.forEach((monitor) => { + const id = monitor.id; + allMonitorIds.push(id); - /* for reach location, add a config item */ - const locations = monitor.attributes[ConfigKey.LOCATIONS]; - locations.forEach((location) => { - const config = { - id, - name: monitor.attributes[ConfigKey.NAME], - location, - isEnabled: monitor.attributes[ConfigKey.ENABLED], - }; - if (!pages[currentPage]) { - pages[currentPage] = [config]; - } else { - pages[currentPage].push(config); - } - currentItem++; - total++; - if (currentItem % perPage === 0) { - currentPage++; - currentItem = 0; - } + /* for reach location, add a config item */ + const locations = monitor.attributes[ConfigKey.LOCATIONS]; + locations.forEach((location) => { + const config = { + id, + name: monitor.attributes[ConfigKey.NAME], + location, + isEnabled: monitor.attributes[ConfigKey.ENABLED], + }; + allMonitors.push(config); + total++; + }); }); - }); + } return { - pages, + monitors: allMonitors, total, allMonitorIds, }; diff --git a/x-pack/plugins/synthetics/server/routes/status/current_status.test.ts b/x-pack/plugins/synthetics/server/routes/status/current_status.test.ts index 12fdea5b9fd4d7..3a03d96f14db7a 100644 --- a/x-pack/plugins/synthetics/server/routes/status/current_status.test.ts +++ b/x-pack/plugins/synthetics/server/routes/status/current_status.test.ts @@ -78,11 +78,18 @@ describe('current status route', () => { '@timestamp': '2022-09-15T16:08:16.724Z', monitor: { status: 'up', + id: 'id1', }, summary: { up: 1, down: 0, }, + config_id: 'id1', + observer: { + geo: { + name: 'test-location', + }, + }, }, }, ], @@ -106,11 +113,18 @@ describe('current status route', () => { '@timestamp': '2022-09-15T16:09:16.724Z', monitor: { status: 'up', + id: 'id2', }, summary: { up: 1, down: 0, }, + config_id: 'id2', + observer: { + geo: { + name: 'test-location', + }, + }, }, }, ], @@ -127,11 +141,18 @@ describe('current status route', () => { '@timestamp': '2022-09-15T16:19:16.724Z', monitor: { status: 'down', + id: 'id2', }, summary: { down: 1, up: 0, }, + config_id: 'id2', + observer: { + geo: { + name: 'test-location', + }, + }, }, }, ], @@ -146,6 +167,25 @@ describe('current status route', () => { expect(await queryMonitorStatus(uptimeEsClient, 3, 140000, ['id1', 'id2'])).toEqual({ down: 1, up: 2, + upConfigs: [ + { + configId: 'id1', + heartbeatId: 'id1', + location: 'test-location', + }, + { + configId: 'id2', + heartbeatId: 'id2', + location: 'test-location', + }, + ], + downConfigs: [ + { + configId: 'id2', + heartbeatId: 'id2', + location: 'test-location', + }, + ], }); }); @@ -167,11 +207,18 @@ describe('current status route', () => { '@timestamp': '2022-09-15T16:08:16.724Z', monitor: { status: 'up', + id: 'id1', }, summary: { up: 1, down: 0, }, + config_id: 'id1', + observer: { + geo: { + name: 'test-location', + }, + }, }, }, ], @@ -195,11 +242,18 @@ describe('current status route', () => { '@timestamp': '2022-09-15T16:09:16.724Z', monitor: { status: 'up', + id: 'id2', }, summary: { up: 1, down: 0, }, + config_id: 'id2', + observer: { + geo: { + name: 'test-location', + }, + }, }, }, ], @@ -216,11 +270,18 @@ describe('current status route', () => { '@timestamp': '2022-09-15T16:19:16.724Z', monitor: { status: 'down', + id: 'id2', }, summary: { up: 0, down: 1, }, + config_id: 'id2', + observer: { + geo: { + name: 'test-location', + }, + }, }, }, ], @@ -242,6 +303,25 @@ describe('current status route', () => { expect(await queryMonitorStatus(uptimeEsClient, 10000, 2500, ['id1', 'id2'])).toEqual({ down: 1, up: 2, + upConfigs: [ + { + configId: 'id1', + heartbeatId: 'id1', + location: 'test-location', + }, + { + configId: 'id2', + heartbeatId: 'id2', + location: 'test-location', + }, + ], + downConfigs: [ + { + configId: 'id2', + heartbeatId: 'id2', + location: 'test-location', + }, + ], }); expect(esClient.search).toHaveBeenCalledTimes(2); // These assertions are to ensure that we are paginating through the IDs we use for filtering diff --git a/x-pack/plugins/synthetics/server/routes/status/current_status.ts b/x-pack/plugins/synthetics/server/routes/status/current_status.ts index 0de4de69776af3..5770ab5b9d6254 100644 --- a/x-pack/plugins/synthetics/server/routes/status/current_status.ts +++ b/x-pack/plugins/synthetics/server/routes/status/current_status.ts @@ -15,7 +15,7 @@ import { SyntheticsRestApiRouteFactory } from '../../legacy_uptime/routes'; import { getMonitors } from '../common'; import { UptimeEsClient } from '../../legacy_uptime/lib/lib'; import { SyntheticsMonitorClient } from '../../synthetics_service/synthetics_monitor/synthetics_monitor_client'; -import { ConfigKey, OverviewStatus } from '../../../common/runtime_types'; +import { ConfigKey, OverviewStatus, OverviewStatusMetaData } from '../../../common/runtime_types'; /** * Helper function that converts a monitor's schedule to a value to use to generate @@ -36,7 +36,7 @@ export async function queryMonitorStatus( maxLocations: number, maxPeriod: number, ids: Array -): Promise> { +): Promise> { const idSize = Math.trunc(DEFAULT_MAX_ES_BUCKET_SIZE / maxLocations); const pageCount = Math.ceil(ids.length / idSize); const promises: Array> = []; @@ -92,7 +92,7 @@ export async function queryMonitorStatus( }, ], _source: { - includes: ['@timestamp', 'summary'], + includes: ['@timestamp', 'summary', 'monitor', 'observer', 'config_id'], }, }, }, @@ -107,20 +107,35 @@ export async function queryMonitorStatus( } let up = 0; let down = 0; + const upConfigs: OverviewStatusMetaData[] = []; + const downConfigs: OverviewStatusMetaData[] = []; for await (const response of promises) { response.aggregations?.id.buckets.forEach(({ location }: { key: string; location: any }) => { location.buckets.forEach(({ status }: { key: string; status: any }) => { const downCount = status.hits.hits[0]._source.summary.down; const upCount = status.hits.hits[0]._source.summary.up; + const configId = status.hits.hits[0]._source.config_id; + const heartbeatId = status.hits.hits[0]._source.monitor.id; + const locationName = status.hits.hits[0]._source.observer?.geo?.name; if (upCount > 0) { up += 1; + upConfigs.push({ + configId, + heartbeatId, + location: locationName, + }); } else if (downCount > 0) { down += 1; + downConfigs.push({ + configId, + heartbeatId, + location: locationName, + }); } }); }); } - return { up, down }; + return { up, down, upConfigs, downConfigs }; } /** @@ -169,7 +184,7 @@ export async function getStatus( }); } while (monitors.saved_objects.length === monitors.per_page); - const { up, down } = await queryMonitorStatus( + const { up, down, upConfigs, downConfigs } = await queryMonitorStatus( uptimeEsClient, maxLocations, maxPeriod, @@ -180,6 +195,8 @@ export async function getStatus( disabledCount, up, down, + upConfigs, + downConfigs, }; } diff --git a/x-pack/plugins/task_manager/server/monitoring/workload_statistics.test.ts b/x-pack/plugins/task_manager/server/monitoring/workload_statistics.test.ts index 947f8e397a2cfc..f60531886453f5 100644 --- a/x-pack/plugins/task_manager/server/monitoring/workload_statistics.test.ts +++ b/x-pack/plugins/task_manager/server/monitoring/workload_statistics.test.ts @@ -123,6 +123,7 @@ describe('Workload Statistics Aggregator', () => { schedule: { terms: { field: 'task.schedule.interval', + size: 100, }, }, nonRecurringTasks: { diff --git a/x-pack/plugins/task_manager/server/monitoring/workload_statistics.ts b/x-pack/plugins/task_manager/server/monitoring/workload_statistics.ts index c79a5660b20f71..bacd05dcb6a06a 100644 --- a/x-pack/plugins/task_manager/server/monitoring/workload_statistics.ts +++ b/x-pack/plugins/task_manager/server/monitoring/workload_statistics.ts @@ -62,7 +62,7 @@ export interface WorkloadAggregation { }; }; schedule: { - terms: { field: string }; + terms: { field: string; size: number }; }; idleTasks: { filter: { @@ -141,7 +141,7 @@ export function createWorkloadAggregator( }, }, schedule: { - terms: { field: 'task.schedule.interval' }, + terms: { field: 'task.schedule.interval', size: 100 }, }, nonRecurringTasks: { missing: { field: 'task.schedule' }, diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index 9e334bb8ec7f86..28b01bd81281aa 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -6140,7 +6140,7 @@ "visualizations.deprecatedTag": "Déclassé", "visualizations.disabledLabVisualizationLink": "Lire la documentation", "visualizations.disabledLabVisualizationMessage": "Veuillez activer le mode lab dans les paramètres avancés pour consulter les visualisations lab.", - "visualizations.displayName": "Visualisation", + "visualizations.displayName": "visualisation", "visualizations.editor.createBreadcrumb": "Créer", "visualizations.editor.defaultEditBreadcrumbText": "Modifier la visualisation", "visualizations.embeddable.inspectorTitle": "Inspecteur", @@ -6175,7 +6175,6 @@ "visualizations.listing.table.typeColumnName": "Type", "visualizations.listingPageTitle": "Bibliothèque Visualize", "visualizations.missedDataView.dataViewReconfigure": "Recréez-la dans la page de gestion des vues de données.", - "visualizations.missedDataView.editInVisualizeEditor": "Effectuer des modifications dans l'éditeur Visualize pour corriger l'erreur", "visualizations.newChart.conditionalMessage.advancedSettingsLink": "Paramètres avancés.", "visualizations.newChart.libraryMode.new": "nouveau", "visualizations.newChart.libraryMode.old": "âge", @@ -17450,7 +17449,7 @@ "xpack.lens.embeddable.missingTimeRangeParam.longMessage": "La propriété timeRange est requise pour cette configuration.", "xpack.lens.embeddable.missingTimeRangeParam.shortMessage": "Propriété timeRange manquante", "xpack.lens.embeddable.moreErrors": "Effectuez des modifications dans l'éditeur Lens pour afficher plus d'erreurs", - "xpack.lens.embeddableDisplayName": "lens", + "xpack.lens.embeddableDisplayName": "Lens", "xpack.lens.endValue.nearest": "La plus proche", "xpack.lens.endValue.none": "Masquer", "xpack.lens.endValue.zero": "Zéro", @@ -31217,7 +31216,6 @@ "xpack.synthetics.overview.heading": "Moniteurs", "xpack.synthetics.overview.monitors.label": "Moniteurs", "xpack.synthetics.overview.pageHeader.title": "Aperçu", - "xpack.synthetics.overview.pagination.ariaLabel": "Pagination pour l’aperçu du moniteur", "xpack.synthetics.overviewPage.overviewCrumb": "Aperçu", "xpack.synthetics.overviewPageLink.disabled.ariaLabel": "Bouton de pagination désactivé indiquant qu'aucune autre navigation ne peut être effectuée dans la liste des moniteurs.", "xpack.synthetics.overviewPageLink.next.ariaLabel": "Page de résultats suivante", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index 3ed2387f36680c..4f2f30e3e1fdbb 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -6169,7 +6169,6 @@ "visualizations.listing.table.typeColumnName": "型", "visualizations.listingPageTitle": "Visualizeライブラリ", "visualizations.missedDataView.dataViewReconfigure": "データビュー管理ページで再作成", - "visualizations.missedDataView.editInVisualizeEditor": "Visualizeエディターで編集し、エラーを修正", "visualizations.newChart.conditionalMessage.advancedSettingsLink": "高度な設定", "visualizations.newChart.libraryMode.new": "新規", "visualizations.newChart.libraryMode.old": "古", @@ -31193,7 +31192,6 @@ "xpack.synthetics.overview.heading": "監視", "xpack.synthetics.overview.monitors.label": "監視", "xpack.synthetics.overview.pageHeader.title": "概要", - "xpack.synthetics.overview.pagination.ariaLabel": "監視概要のページネーション", "xpack.synthetics.overviewPage.overviewCrumb": "概要", "xpack.synthetics.overviewPageLink.disabled.ariaLabel": "無効になったページ付けボタンです。モニターリストがこれ以上ナビゲーションできないことを示しています。", "xpack.synthetics.overviewPageLink.next.ariaLabel": "次の結果ページ", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index e7194fc92904e1..c11034dbc5b937 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -6176,7 +6176,6 @@ "visualizations.listing.table.typeColumnName": "类型", "visualizations.listingPageTitle": "Visualize 库", "visualizations.missedDataView.dataViewReconfigure": "在数据视图管理页面中重新创建", - "visualizations.missedDataView.editInVisualizeEditor": "在 Visualize 编辑器中编辑以修复该错误", "visualizations.newChart.conditionalMessage.advancedSettingsLink": "免费的 API 密钥。", "visualizations.newChart.libraryMode.new": "新", "visualizations.newChart.libraryMode.old": "以前", @@ -17458,7 +17457,7 @@ "xpack.lens.embeddable.missingTimeRangeParam.longMessage": "给定配置需要包含 timeRange 属性", "xpack.lens.embeddable.missingTimeRangeParam.shortMessage": "缺少 timeRange 属性", "xpack.lens.embeddable.moreErrors": "在 Lens 编辑器中编辑以查看更多错误", - "xpack.lens.embeddableDisplayName": "lens", + "xpack.lens.embeddableDisplayName": "Lens", "xpack.lens.endValue.nearest": "最近", "xpack.lens.endValue.none": "隐藏", "xpack.lens.endValue.zero": "零", @@ -31228,7 +31227,6 @@ "xpack.synthetics.overview.heading": "监测", "xpack.synthetics.overview.monitors.label": "监测", "xpack.synthetics.overview.pageHeader.title": "概览", - "xpack.synthetics.overview.pagination.ariaLabel": "监测概述的分页", "xpack.synthetics.overviewPage.overviewCrumb": "概览", "xpack.synthetics.overviewPageLink.disabled.ariaLabel": "禁用的分页按钮表示在监测列表中无法进行进一步导航。", "xpack.synthetics.overviewPageLink.next.ariaLabel": "下页结果", diff --git a/x-pack/plugins/triggers_actions_ui/README.md b/x-pack/plugins/triggers_actions_ui/README.md index 0643a7d266a88b..225fc6ff978e5b 100644 --- a/x-pack/plugins/triggers_actions_ui/README.md +++ b/x-pack/plugins/triggers_actions_ui/README.md @@ -83,7 +83,7 @@ ruleParamsExpression should be a lazy loaded React component extending an expres ``` interface IndexThresholdProps { - ruleParams: IndexThresholdAlertParams; + ruleParams: IndexThresholdRuleParams; setRuleParams: (property: string, value: any) => void; setRuleProperty: (key: string, value: any) => void; errors: { [key: string]: string[] }; @@ -175,7 +175,7 @@ export const alertReducer = (state: any, action: AlertReducerAction) => { The Expression component should be lazy loaded which means it'll have to be the default export in `index_threshold_expression.ts`: ``` -export const IndexThresholdAlertTypeExpression: React.FunctionComponent = ({ +export const IndexThresholdRuleTypeExpression: React.FunctionComponent = ({ ruleParams, setRuleParams, setRuleProperty, @@ -227,7 +227,7 @@ export const IndexThresholdAlertTypeExpression: React.FunctionComponent { }; const expected = { - chunksLength: 13, - actionsLength: 12, + chunksLength: 34, + actionsLength: 33, noIndexChunksLength: 4, noIndexActionsLength: 3, changePointFilter: 'add_change_points', diff --git a/x-pack/test/api_integration/apis/synthetics/get_monitor_overview.ts b/x-pack/test/api_integration/apis/synthetics/get_monitor_overview.ts index ff690e0093f777..7477e4e48b3c17 100644 --- a/x-pack/test/api_integration/apis/synthetics/get_monitor_overview.ts +++ b/x-pack/test/api_integration/apis/synthetics/get_monitor_overview.ts @@ -82,33 +82,7 @@ export default function ({ getService }: FtrProviderContext) { expect(apiResponse.body.allMonitorIds.sort()).eql( savedMonitors.map((monitor) => monitor.id).sort() ); - expect(apiResponse.body.pages).to.have.keys(['0', '1']); - expect(apiResponse.body.pages[1].length).eql(20); - } finally { - await Promise.all( - savedMonitors.map((monitor) => { - return deleteMonitor(monitor.id); - }) - ); - } - }); - - it('adjusts pagination correctly', async () => { - let savedMonitors: SimpleSavedObject[] = []; - try { - const savedResponse = await Promise.all(monitors.map(saveMonitor)); - savedMonitors = savedResponse; - - const apiResponse = await supertest.get( - SYNTHETICS_API_URLS.SYNTHETICS_OVERVIEW + '?perPage=5' - ); - - expect(apiResponse.body.total).eql(monitors.length * 2); - expect(apiResponse.body.allMonitorIds.sort()).eql( - savedMonitors.map((monitor) => monitor.id).sort() - ); - expect(apiResponse.body.pages).to.have.keys(['0', '1', '2', '3', '4']); - expect(apiResponse.body.pages[1].length).eql(5); + expect(apiResponse.body.monitors.length).eql(40); } finally { await Promise.all( savedMonitors.map((monitor) => { diff --git a/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/package_policy_upgrade/0.1.0/data_stream/test_stream/manifest.yml b/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/package_policy_upgrade/0.1.0/data_stream/test_stream/manifest.yml index 461d4fa9417084..476a62174f6441 100644 --- a/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/package_policy_upgrade/0.1.0/data_stream/test_stream/manifest.yml +++ b/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/package_policy_upgrade/0.1.0/data_stream/test_stream/manifest.yml @@ -2,3 +2,4 @@ title: Test stream type: logs streams: - input: test_input + title: test input diff --git a/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/package_policy_upgrade/0.2.0-add-non-required-test-var/data_stream/test_stream/manifest.yml b/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/package_policy_upgrade/0.2.0-add-non-required-test-var/data_stream/test_stream/manifest.yml index 3500fa8888ceb4..5ad939f2c71be5 100644 --- a/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/package_policy_upgrade/0.2.0-add-non-required-test-var/data_stream/test_stream/manifest.yml +++ b/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/package_policy_upgrade/0.2.0-add-non-required-test-var/data_stream/test_stream/manifest.yml @@ -2,6 +2,7 @@ title: Test stream type: logs streams: - input: test_input + title: test input vars: - name: test_var type: text diff --git a/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/package_policy_upgrade/0.2.5-non-breaking-change/data_stream/test_stream/manifest.yml b/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/package_policy_upgrade/0.2.5-non-breaking-change/data_stream/test_stream/manifest.yml index 95b72f0122aec8..7ef056ac735955 100644 --- a/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/package_policy_upgrade/0.2.5-non-breaking-change/data_stream/test_stream/manifest.yml +++ b/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/package_policy_upgrade/0.2.5-non-breaking-change/data_stream/test_stream/manifest.yml @@ -2,6 +2,7 @@ title: Test stream type: logs streams: - input: test_input + title: test input vars: - name: test_var type: text diff --git a/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/package_policy_upgrade/0.3.0-remove-test-var/data_stream/test_stream/manifest.yml b/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/package_policy_upgrade/0.3.0-remove-test-var/data_stream/test_stream/manifest.yml index 47c2fe0f32d339..476a62174f6441 100644 --- a/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/package_policy_upgrade/0.3.0-remove-test-var/data_stream/test_stream/manifest.yml +++ b/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/package_policy_upgrade/0.3.0-remove-test-var/data_stream/test_stream/manifest.yml @@ -2,10 +2,4 @@ title: Test stream type: logs streams: - input: test_input - # vars: - # - name: test_var - # type: text - # title: Test Var - # required: true - # show_user: true - # default: Test Value + title: test input diff --git a/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/package_policy_upgrade/0.4.0-add-test-var-as-bool/data_stream/test_stream/manifest.yml b/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/package_policy_upgrade/0.4.0-add-test-var-as-bool/data_stream/test_stream/manifest.yml index f96486e1a19326..403a084a4e2d43 100644 --- a/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/package_policy_upgrade/0.4.0-add-test-var-as-bool/data_stream/test_stream/manifest.yml +++ b/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/package_policy_upgrade/0.4.0-add-test-var-as-bool/data_stream/test_stream/manifest.yml @@ -2,6 +2,7 @@ title: Test stream type: logs streams: - input: test_input + title: test input vars: - name: test_var type: bool diff --git a/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/package_policy_upgrade/0.5.0-restructure-inputs/data_stream/test_stream_new/manifest.yml b/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/package_policy_upgrade/0.5.0-restructure-inputs/data_stream/test_stream_new/manifest.yml index 42b5d8641c6cd7..ec4b71337738a1 100644 --- a/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/package_policy_upgrade/0.5.0-restructure-inputs/data_stream/test_stream_new/manifest.yml +++ b/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/package_policy_upgrade/0.5.0-restructure-inputs/data_stream/test_stream_new/manifest.yml @@ -2,6 +2,7 @@ title: Test stream type: logs streams: - input: test_input_new + title: test input new vars: - name: test_var_new type: text diff --git a/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/package_policy_upgrade/0.5.0-restructure-inputs/data_stream/test_stream_new_2/manifest.yml b/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/package_policy_upgrade/0.5.0-restructure-inputs/data_stream/test_stream_new_2/manifest.yml index af942e7b6413a9..df9bfa4e58ac62 100644 --- a/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/package_policy_upgrade/0.5.0-restructure-inputs/data_stream/test_stream_new_2/manifest.yml +++ b/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/package_policy_upgrade/0.5.0-restructure-inputs/data_stream/test_stream_new_2/manifest.yml @@ -2,6 +2,7 @@ title: Test stream type: logs streams: - input: test_input_new_2 + title: test input new 2 vars: - name: test_input_new_2_var_1 type: text diff --git a/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/package_policy_upgrade/0.6.0-restructure-policy-templates/data_stream/test_stream_new/manifest.yml b/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/package_policy_upgrade/0.6.0-restructure-policy-templates/data_stream/test_stream_new/manifest.yml index 42b5d8641c6cd7..ec4b71337738a1 100644 --- a/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/package_policy_upgrade/0.6.0-restructure-policy-templates/data_stream/test_stream_new/manifest.yml +++ b/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/package_policy_upgrade/0.6.0-restructure-policy-templates/data_stream/test_stream_new/manifest.yml @@ -2,6 +2,7 @@ title: Test stream type: logs streams: - input: test_input_new + title: test input new vars: - name: test_var_new type: text diff --git a/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/package_policy_upgrade/0.6.0-restructure-policy-templates/data_stream/test_stream_new_2/manifest.yml b/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/package_policy_upgrade/0.6.0-restructure-policy-templates/data_stream/test_stream_new_2/manifest.yml index af942e7b6413a9..df9bfa4e58ac62 100644 --- a/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/package_policy_upgrade/0.6.0-restructure-policy-templates/data_stream/test_stream_new_2/manifest.yml +++ b/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/package_policy_upgrade/0.6.0-restructure-policy-templates/data_stream/test_stream_new_2/manifest.yml @@ -2,6 +2,7 @@ title: Test stream type: logs streams: - input: test_input_new_2 + title: test input new 2 vars: - name: test_input_new_2_var_1 type: text diff --git a/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/package_policy_upgrade/0.7.0-add-stream-with-no-vars/data_stream/test_stream/manifest.yml b/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/package_policy_upgrade/0.7.0-add-stream-with-no-vars/data_stream/test_stream/manifest.yml index 461d4fa9417084..476a62174f6441 100644 --- a/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/package_policy_upgrade/0.7.0-add-stream-with-no-vars/data_stream/test_stream/manifest.yml +++ b/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/package_policy_upgrade/0.7.0-add-stream-with-no-vars/data_stream/test_stream/manifest.yml @@ -2,3 +2,4 @@ title: Test stream type: logs streams: - input: test_input + title: test input diff --git a/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/package_policy_upgrade/0.8.0-add-vars-to-stream-with-no-vars/data_stream/test_stream/manifest.yml b/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/package_policy_upgrade/0.8.0-add-vars-to-stream-with-no-vars/data_stream/test_stream/manifest.yml index 8b8ea1987ccc34..15b6496c50d76c 100644 --- a/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/package_policy_upgrade/0.8.0-add-vars-to-stream-with-no-vars/data_stream/test_stream/manifest.yml +++ b/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/package_policy_upgrade/0.8.0-add-vars-to-stream-with-no-vars/data_stream/test_stream/manifest.yml @@ -2,6 +2,7 @@ title: Test stream type: logs streams: - input: test_input + title: test input vars: - name: test_var_new type: text diff --git a/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/with_required_variables/0.1.0/data_stream/log/manifest.yml b/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/with_required_variables/0.1.0/data_stream/log/manifest.yml index 0b1ae9c6cb9959..a4473a8b3fa2bc 100644 --- a/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/with_required_variables/0.1.0/data_stream/log/manifest.yml +++ b/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/with_required_variables/0.1.0/data_stream/log/manifest.yml @@ -2,6 +2,7 @@ title: Test stream type: logs streams: - input: test_input + title: test input vars: - name: test_var_required type: string diff --git a/x-pack/test/plugin_api_integration/test_suites/task_manager/health_route.ts b/x-pack/test/plugin_api_integration/test_suites/task_manager/health_route.ts index 6a2cfa6c71323a..1bd158019c6f4f 100644 --- a/x-pack/test/plugin_api_integration/test_suites/task_manager/health_route.ts +++ b/x-pack/test/plugin_api_integration/test_suites/task_manager/health_route.ts @@ -145,8 +145,7 @@ export default function ({ getService }: FtrProviderContext) { }); }); - // https://github.com/elastic/kibana/issues/144558 - it.skip('should return the task manager workload', async () => { + it('should return the task manager workload', async () => { const health = await getHealth(); const { status, diff --git a/x-pack/test/plugin_api_integration/test_suites/task_manager/task_management.ts b/x-pack/test/plugin_api_integration/test_suites/task_manager/task_management.ts index dadc32bca7214b..1c130e332fbc02 100644 --- a/x-pack/test/plugin_api_integration/test_suites/task_manager/task_management.ts +++ b/x-pack/test/plugin_api_integration/test_suites/task_manager/task_management.ts @@ -55,7 +55,7 @@ export default function ({ getService }: FtrProviderContext) { const testHistoryIndex = '.kibana_task_manager_test_result'; // FLAKY: https://github.com/elastic/kibana/issues/141055 - describe.skip('scheduling and running tasks', () => { + describe('scheduling and running tasks', () => { beforeEach(async () => { // clean up before each test return await supertest.delete('/api/sample_tasks').set('kbn-xsrf', 'xxx').expect(200); @@ -657,11 +657,13 @@ export default function ({ getService }: FtrProviderContext) { expect(task.enabled).to.eql(true); }); - // disable the task - await bulkDisable([scheduledTask.id]); - await retry.try(async () => { + // disable the task + await bulkDisable([scheduledTask.id]); const task = await currentTask(scheduledTask.id); + log.debug( + `bulkDisable:task(${scheduledTask.id}) enabled: ${task.enabled}, when runSoon = true` + ); expect(task.enabled).to.eql(false); }); @@ -672,6 +674,9 @@ export default function ({ getService }: FtrProviderContext) { const task = await currentTask(scheduledTask.id); expect(task.enabled).to.eql(true); + log.debug( + `bulkEnable:task(${scheduledTask.id}) enabled: ${task.enabled}, when runSoon = true` + ); expect(Date.parse(task.scheduledAt)).to.be.greaterThan( Date.parse(scheduledTask.scheduledAt) ); @@ -700,6 +705,9 @@ export default function ({ getService }: FtrProviderContext) { let disabledTask: SerializedConcreteTaskInstance; await retry.try(async () => { disabledTask = await currentTask(scheduledTask.id); + log.debug( + `bulkDisable:task(${scheduledTask.id}) enabled: ${disabledTask.enabled}, when runSoon = false` + ); expect(disabledTask.enabled).to.eql(false); }); @@ -708,7 +716,9 @@ export default function ({ getService }: FtrProviderContext) { await retry.try(async () => { const task = await currentTask(scheduledTask.id); - + log.debug( + `bulkEnable:task(${scheduledTask.id}) enabled: ${task.enabled}, when runSoon = true` + ); expect(task.enabled).to.eql(true); expect(Date.parse(task.scheduledAt)).to.eql(Date.parse(disabledTask.scheduledAt)); }); diff --git a/x-pack/test/reporting_api_integration/reporting_and_security/ilm_migration_apis.ts b/x-pack/test/reporting_api_integration/reporting_and_security/ilm_migration_apis.ts index 3a360ca0a1f5c4..db131130f40eae 100644 --- a/x-pack/test/reporting_api_integration/reporting_and_security/ilm_migration_apis.ts +++ b/x-pack/test/reporting_api_integration/reporting_and_security/ilm_migration_apis.ts @@ -64,15 +64,16 @@ export default function ({ getService }: FtrProviderContext) { await runMigrate(); // ensure that the ILM policy exists for the first test }); - after(async () => { - await reportingAPI.teardownLogs(); - }); - afterEach(async () => { await reportingAPI.deleteAllReports(); await runMigrate(); // ensure that the ILM policy exists }); + after(async () => { + await reportingAPI.teardownLogs(); + await reportingAPI.makeAllReportingIndicesUnmanaged(); // ensure that a delete phase does not remove the index while future tests are running + }); + it('detects when no migration is needed', async () => { expect( await reportingAPI.checkIlmMigrationStatus( diff --git a/x-pack/test/reporting_api_integration/reporting_and_security/validation.ts b/x-pack/test/reporting_api_integration/reporting_and_security/validation.ts index aafd24b7a08e2c..dfd75d2e652485 100644 --- a/x-pack/test/reporting_api_integration/reporting_and_security/validation.ts +++ b/x-pack/test/reporting_api_integration/reporting_and_security/validation.ts @@ -27,8 +27,7 @@ export default function ({ getService }: FtrProviderContext) { } }; - // Failing: See https://github.com/elastic/kibana/issues/143717 - describe.skip('Job parameter validation', () => { + describe('Job parameter validation', () => { before(async () => { await reportingAPI.initEcommerce(); }); diff --git a/yarn.lock b/yarn.lock index cfd47f45918b36..bef4e2ded15fd1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1297,17 +1297,12 @@ resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== -"@cspotcode/source-map-consumer@0.8.0": - version "0.8.0" - resolved "https://registry.yarnpkg.com/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz#33bf4b7b39c178821606f669bbc447a6a629786b" - integrity sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg== - -"@cspotcode/source-map-support@0.7.0": - version "0.7.0" - resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz#4789840aa859e46d2f3173727ab707c66bf344f5" - integrity sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA== +"@cspotcode/source-map-support@^0.8.0", "@cspotcode/source-map-support@^0.8.1": + version "0.8.1" + resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" + integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== dependencies: - "@cspotcode/source-map-consumer" "0.8.0" + "@jridgewell/trace-mapping" "0.3.9" "@csstools/selector-specificity@^2.0.1": version "2.0.1" @@ -1658,24 +1653,31 @@ history "^4.9.0" qs "^6.7.0" -"@elastic/synthetics@^1.0.0-beta.22": - version "1.0.0-beta.22" - resolved "https://registry.yarnpkg.com/@elastic/synthetics/-/synthetics-1.0.0-beta.22.tgz#1ec60e212e925ffaf7fd63619858ad6ce6dfa85d" - integrity sha512-hDFPqBuY30naAZct8UNRMhKNtsVbPV5nYApkwRf/7y3/SgQBXPnMkxUBlxy+2vkPR4QnKusvWROUxMMwgVnXyA== +"@elastic/synthetics@^1.0.0-beta.23": + version "1.0.0-beta.37" + resolved "https://registry.yarnpkg.com/@elastic/synthetics/-/synthetics-1.0.0-beta.37.tgz#ba89918107c7aa166bcf43bbd0cbe4ad6a3b4430" + integrity sha512-MSYu+n4SuZ31AbxWpha5WBS33Y/YTVEvOc8g3WkCIxSqa8iSAPgGEAOZimk/pHOzPZNXJcRKIpL01HnKvqd14g== dependencies: - commander "^9.0.0" + "@cspotcode/source-map-support" "^0.8.1" + "@esbuild-plugins/node-resolve" "^0.1.4" + archiver "^5.3.1" + commander "^9.4.0" deepmerge "^4.2.2" - expect "^27.0.2" + enquirer "^2.3.6" + esbuild "^0.14.54" + expect "^28.1.3" http-proxy "^1.18.1" - kleur "^4.1.4" - micromatch "^4.0.4" - playwright-chromium "=1.14.0" - sharp "^0.30.1" - snakecase-keys "^3.2.1" - sonic-boom "^2.6.0" - source-map-support "^0.5.21" - ts-node "^10.5.0" - typescript "^4.5.5" + kleur "^4.1.5" + micromatch "^4.0.5" + playwright-chromium "=1.26.0" + playwright-core "=1.26.0" + sharp "^0.31.1" + snakecase-keys "^4.0.0" + sonic-boom "^3.2.0" + ts-node "^10.9.1" + typescript "^4.8.3" + undici "^5.10.0" + yaml "^2.1.1" "@elastic/transport@^8.2.0": version "8.2.0" @@ -1919,6 +1921,21 @@ resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.3.0.tgz#ea89004119dc42db2e1dba0f97d553f7372f6fcb" integrity sha512-AHPmaAx+RYfZz0eYu6Gviiagpmiyw98ySSlQvCUhVGDRtDFe4DBS0x1bSjdF3gqUDYOczB+yYvBTtEylYSdRhg== +"@esbuild-plugins/node-resolve@^0.1.4": + version "0.1.4" + resolved "https://registry.yarnpkg.com/@esbuild-plugins/node-resolve/-/node-resolve-0.1.4.tgz#2257ef3b233c9cb3acd2ebde7d5a3d6874046d38" + integrity sha512-haFQ0qhxEpqtWWY0kx1Y5oE3sMyO1PcoSiWEPrAw6tm/ZOOLXjSs6Q+v1v9eyuVF0nNt50YEvrcrvENmyoMv5g== + dependencies: + "@types/resolve" "^1.17.1" + debug "^4.3.1" + escape-string-regexp "^4.0.0" + resolve "^1.19.0" + +"@esbuild/linux-loong64@0.14.54": + version "0.14.54" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.14.54.tgz#de2a4be678bd4d0d1ffbb86e6de779cde5999028" + integrity sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw== + "@eslint/eslintrc@^0.4.3": version "0.4.3" resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c" @@ -2403,6 +2420,13 @@ dependencies: jest-get-type "^28.0.2" +"@jest/expect-utils@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-28.1.3.tgz#58561ce5db7cd253a7edddbc051fb39dda50f525" + integrity sha512-wvbi9LUrHJLn3NlDW6wF2hvIMtd4JUl2QNVrjq+IBSHirgfrR3o9RnVtxzdEGO2n9JyIWwHnLfby5KzqBGg2YA== + dependencies: + jest-get-type "^28.0.2" + "@jest/fake-timers@^27.5.1": version "27.5.1" resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-27.5.1.tgz#76979745ce0579c8a94a4678af7a748eda8ada74" @@ -2462,6 +2486,13 @@ dependencies: "@sinclair/typebox" "^0.23.3" +"@jest/schemas@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-28.1.3.tgz#ad8b86a66f11f33619e3d7e1dcddd7f2d40ff905" + integrity sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg== + dependencies: + "@sinclair/typebox" "^0.24.1" + "@jest/source-map@^27.5.1": version "27.5.1" resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-27.5.1.tgz#6608391e465add4205eae073b55e7f279e04e8cf" @@ -2555,12 +2586,12 @@ "@types/yargs" "^16.0.0" chalk "^4.0.0" -"@jest/types@^28.1.1": - version "28.1.1" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-28.1.1.tgz#d059bbc80e6da6eda9f081f293299348bd78ee0b" - integrity sha512-vRXVqSg1VhDnB8bWcmvLzmg0Bt9CRKVgHPXqYwvWMX3TvAjeO+nRuK6+VdTKCtWOvYlmkF/HqNAL/z+N3B53Kw== +"@jest/types@^28.1.1", "@jest/types@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-28.1.3.tgz#b05de80996ff12512bc5ceb1d208285a7d11748b" + integrity sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ== dependencies: - "@jest/schemas" "^28.0.2" + "@jest/schemas" "^28.1.3" "@types/istanbul-lib-coverage" "^2.0.0" "@types/istanbul-reports" "^3.0.0" "@types/node" "*" @@ -2599,6 +2630,14 @@ resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz#771a1d8d744eeb71b6adb35808e1a6c7b9b8c8ec" integrity sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg== +"@jridgewell/trace-mapping@0.3.9": + version "0.3.9" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" + integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping@^0.3.0", "@jridgewell/trace-mapping@^0.3.14", "@jridgewell/trace-mapping@^0.3.8", "@jridgewell/trace-mapping@^0.3.9": version "0.3.15" resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz#aba35c48a38d3fd84b37e66c9c0423f9744f9774" @@ -4863,6 +4902,11 @@ resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.23.5.tgz#93f7b9f4e3285a7a9ade7557d9a8d36809cbc47d" integrity sha512-AFBVi/iT4g20DHoujvMH1aEDn8fGJh4xsRGCP6d8RpLPMqsNPvW01Jcn0QysXTsg++/xj25NmJsGyH9xug/wKg== +"@sinclair/typebox@^0.24.1": + version "0.24.46" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.24.46.tgz#57501b58023776dbbae9e25619146286440be34c" + integrity sha512-ng4ut1z2MCBhK/NwDVwIQp3pAUOCs/KNaW3cBxdFB2xTDrOuo1xuNmpr/9HHFhxqIvHrs1NTH3KJg6q+JSy1Kw== + "@sindresorhus/is@^0.14.0": version "0.14.0" resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" @@ -6140,6 +6184,11 @@ resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-4.2.0.tgz#14264692a9d6e2fa4db3df5e56e94b5e25647ac0" integrity sha512-iIgQNzCm0v7QMhhe4Jjn9uRh+I6GoPmt03CbEtwx3ao8/EfoQcmgtqH4vQ5Db/lxiIGaWDv6nwvunuh0RyX0+A== +"@types/async@^3.2.3": + version "3.2.15" + resolved "https://registry.yarnpkg.com/@types/async/-/async-3.2.15.tgz#26d4768fdda0e466f18d6c9918ca28cc89a4e1fe" + integrity sha512-PAmPfzvFA31mRoqZyTVsgJMsvbynR429UTTxhmfsUCrWGh3/fxOrzqBtaTPJsn4UtzTv4Vb0+/O7CARWb69N4g== + "@types/babel__core@*", "@types/babel__core@^7.1.14", "@types/babel__core@^7.1.19": version "7.1.19" resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.19.tgz#7b497495b7d1b4812bdb9d02804d0576f43ee460" @@ -7392,7 +7441,7 @@ resolved "https://registry.yarnpkg.com/@types/resize-observer-browser/-/resize-observer-browser-0.1.5.tgz#36d897708172ac2380cd486da7a3daf1161c1e23" integrity sha512-8k/67Z95Goa6Lznuykxkfhq9YU3l1Qe6LNZmwde1u7802a3x8v44oq0j91DICclxatTr0rNnhXx7+VTIetSrSQ== -"@types/resolve@^1.20.1": +"@types/resolve@^1.17.1", "@types/resolve@^1.20.1": version "1.20.1" resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.20.1.tgz#3727e48042fda81e374f5d5cf2fa92288bf698f8" integrity sha512-Ku5+GPFa12S3W26Uwtw+xyrtIpaZsGYHH6zxNbZlstmlvMYSZRzOwzwsXbxlVUbHyUucctSyuFtu6bNxwYomIw== @@ -9830,6 +9879,13 @@ builtin-status-codes@^3.0.0: resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= +busboy@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/busboy/-/busboy-1.6.0.tgz#966ea36a9502e43cdb9146962523b92f531f6893" + integrity sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA== + dependencies: + streamsearch "^1.1.0" + byte-size@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/byte-size/-/byte-size-8.1.0.tgz#6353d0bc14ab7a69abcefbf11f8db0145a862cb5" @@ -10650,20 +10706,15 @@ commander@^5.0.0, commander@^5.1.0: resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae" integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg== -commander@^6.1.0, commander@^6.2.1: +commander@^6.2.1: version "6.2.1" resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c" integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA== -commander@^8.2.0: - version "8.3.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" - integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== - -commander@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-9.0.0.tgz#86d58f24ee98126568936bd1d3574e0308a99a40" - integrity sha512-JJfP2saEKbQqvW+FI93OYUB4ByV5cizMpFMiiJI8xDbBvQvSkIk0VvQdn1CZ8mqAO8Loq2h0gYTYtDFUZUeERw== +commander@^9.4.0: + version "9.4.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-9.4.1.tgz#d1dd8f2ce6faf93147295c0df13c7c21141cfbdd" + integrity sha512-5EEkTNyHNGFPD2H+c/dXXfQZYa/scCKasxWcXJaWnNJ99pnQN9Vnmqow+p+PlFPE63Q6mThaZws1T+HxfpgtPw== common-path-prefix@^3.0.0: version "3.0.0" @@ -12509,6 +12560,14 @@ dot-case@^3.0.3: no-case "^3.0.3" tslib "^1.10.0" +dot-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" + integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + dot-prop@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.2.0.tgz#c34ecc29556dc45f1f4c22697b6f4904e0cc4fcb" @@ -13073,6 +13132,133 @@ es6-weak-map@^2.0.2: es6-iterator "^2.0.1" es6-symbol "^3.1.1" +esbuild-android-64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-android-64/-/esbuild-android-64-0.14.54.tgz#505f41832884313bbaffb27704b8bcaa2d8616be" + integrity sha512-Tz2++Aqqz0rJ7kYBfz+iqyE3QMycD4vk7LBRyWaAVFgFtQ/O8EJOnVmTOiDWYZ/uYzB4kvP+bqejYdVKzE5lAQ== + +esbuild-android-arm64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.54.tgz#8ce69d7caba49646e009968fe5754a21a9871771" + integrity sha512-F9E+/QDi9sSkLaClO8SOV6etqPd+5DgJje1F9lOWoNncDdOBL2YF59IhsWATSt0TLZbYCf3pNlTHvVV5VfHdvg== + +esbuild-darwin-64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.54.tgz#24ba67b9a8cb890a3c08d9018f887cc221cdda25" + integrity sha512-jtdKWV3nBviOd5v4hOpkVmpxsBy90CGzebpbO9beiqUYVMBtSc0AL9zGftFuBon7PNDcdvNCEuQqw2x0wP9yug== + +esbuild-darwin-arm64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.54.tgz#3f7cdb78888ee05e488d250a2bdaab1fa671bf73" + integrity sha512-OPafJHD2oUPyvJMrsCvDGkRrVCar5aVyHfWGQzY1dWnzErjrDuSETxwA2HSsyg2jORLY8yBfzc1MIpUkXlctmw== + +esbuild-freebsd-64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.54.tgz#09250f997a56ed4650f3e1979c905ffc40bbe94d" + integrity sha512-OKwd4gmwHqOTp4mOGZKe/XUlbDJ4Q9TjX0hMPIDBUWWu/kwhBAudJdBoxnjNf9ocIB6GN6CPowYpR/hRCbSYAg== + +esbuild-freebsd-arm64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.54.tgz#bafb46ed04fc5f97cbdb016d86947a79579f8e48" + integrity sha512-sFwueGr7OvIFiQT6WeG0jRLjkjdqWWSrfbVwZp8iMP+8UHEHRBvlaxL6IuKNDwAozNUmbb8nIMXa7oAOARGs1Q== + +esbuild-linux-32@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.14.54.tgz#e2a8c4a8efdc355405325033fcebeb941f781fe5" + integrity sha512-1ZuY+JDI//WmklKlBgJnglpUL1owm2OX+8E1syCD6UAxcMM/XoWd76OHSjl/0MR0LisSAXDqgjT3uJqT67O3qw== + +esbuild-linux-64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.14.54.tgz#de5fdba1c95666cf72369f52b40b03be71226652" + integrity sha512-EgjAgH5HwTbtNsTqQOXWApBaPVdDn7XcK+/PtJwZLT1UmpLoznPd8c5CxqsH2dQK3j05YsB3L17T8vE7cp4cCg== + +esbuild-linux-arm64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.54.tgz#dae4cd42ae9787468b6a5c158da4c84e83b0ce8b" + integrity sha512-WL71L+0Rwv+Gv/HTmxTEmpv0UgmxYa5ftZILVi2QmZBgX3q7+tDeOQNqGtdXSdsL8TQi1vIaVFHUPDe0O0kdig== + +esbuild-linux-arm@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.54.tgz#a2c1dff6d0f21dbe8fc6998a122675533ddfcd59" + integrity sha512-qqz/SjemQhVMTnvcLGoLOdFpCYbz4v4fUo+TfsWG+1aOu70/80RV6bgNpR2JCrppV2moUQkww+6bWxXRL9YMGw== + +esbuild-linux-mips64le@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.54.tgz#d9918e9e4cb972f8d6dae8e8655bf9ee131eda34" + integrity sha512-qTHGQB8D1etd0u1+sB6p0ikLKRVuCWhYQhAHRPkO+OF3I/iSlTKNNS0Lh2Oc0g0UFGguaFZZiPJdJey3AGpAlw== + +esbuild-linux-ppc64le@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.54.tgz#3f9a0f6d41073fb1a640680845c7de52995f137e" + integrity sha512-j3OMlzHiqwZBDPRCDFKcx595XVfOfOnv68Ax3U4UKZ3MTYQB5Yz3X1mn5GnodEVYzhtZgxEBidLWeIs8FDSfrQ== + +esbuild-linux-riscv64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.54.tgz#618853c028178a61837bc799d2013d4695e451c8" + integrity sha512-y7Vt7Wl9dkOGZjxQZnDAqqn+XOqFD7IMWiewY5SPlNlzMX39ocPQlOaoxvT4FllA5viyV26/QzHtvTjVNOxHZg== + +esbuild-linux-s390x@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.54.tgz#d1885c4c5a76bbb5a0fe182e2c8c60eb9e29f2a6" + integrity sha512-zaHpW9dziAsi7lRcyV4r8dhfG1qBidQWUXweUjnw+lliChJqQr+6XD71K41oEIC3Mx1KStovEmlzm+MkGZHnHA== + +esbuild-netbsd-64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.54.tgz#69ae917a2ff241b7df1dbf22baf04bd330349e81" + integrity sha512-PR01lmIMnfJTgeU9VJTDY9ZerDWVFIUzAtJuDHwwceppW7cQWjBBqP48NdeRtoP04/AtO9a7w3viI+PIDr6d+w== + +esbuild-openbsd-64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.54.tgz#db4c8495287a350a6790de22edea247a57c5d47b" + integrity sha512-Qyk7ikT2o7Wu76UsvvDS5q0amJvmRzDyVlL0qf5VLsLchjCa1+IAvd8kTBgUxD7VBUUVgItLkk609ZHUc1oCaw== + +esbuild-sunos-64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.54.tgz#54287ee3da73d3844b721c21bc80c1dc7e1bf7da" + integrity sha512-28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw== + +esbuild-windows-32@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.14.54.tgz#f8aaf9a5667630b40f0fb3aa37bf01bbd340ce31" + integrity sha512-T+rdZW19ql9MjS7pixmZYVObd9G7kcaZo+sETqNH4RCkuuYSuv9AGHUVnPoP9hhuE1WM1ZimHz1CIBHBboLU7w== + +esbuild-windows-64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.14.54.tgz#bf54b51bd3e9b0f1886ffdb224a4176031ea0af4" + integrity sha512-AoHTRBUuYwXtZhjXZbA1pGfTo8cJo3vZIcWGLiUcTNgHpJJMC1rVA44ZereBHMJtotyN71S8Qw0npiCIkW96cQ== + +esbuild-windows-arm64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.54.tgz#937d15675a15e4b0e4fafdbaa3a01a776a2be982" + integrity sha512-M0kuUvXhot1zOISQGXwWn6YtS+Y/1RT9WrVIOywZnJHo3jCDyewAc79aKNQWFCQm+xNHVTq9h8dZKvygoXQQRg== + +esbuild@^0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.14.54.tgz#8b44dcf2b0f1a66fc22459943dccf477535e9aa2" + integrity sha512-Cy9llcy8DvET5uznocPyqL3BFRrFXSVqbgpMJ9Wz8oVjZlh/zUSNbPRbov0VX7VxN2JH1Oa0uNxZ7eLRb62pJA== + optionalDependencies: + "@esbuild/linux-loong64" "0.14.54" + esbuild-android-64 "0.14.54" + esbuild-android-arm64 "0.14.54" + esbuild-darwin-64 "0.14.54" + esbuild-darwin-arm64 "0.14.54" + esbuild-freebsd-64 "0.14.54" + esbuild-freebsd-arm64 "0.14.54" + esbuild-linux-32 "0.14.54" + esbuild-linux-64 "0.14.54" + esbuild-linux-arm "0.14.54" + esbuild-linux-arm64 "0.14.54" + esbuild-linux-mips64le "0.14.54" + esbuild-linux-ppc64le "0.14.54" + esbuild-linux-riscv64 "0.14.54" + esbuild-linux-s390x "0.14.54" + esbuild-netbsd-64 "0.14.54" + esbuild-openbsd-64 "0.14.54" + esbuild-sunos-64 "0.14.54" + esbuild-windows-32 "0.14.54" + esbuild-windows-64 "0.14.54" + esbuild-windows-arm64 "0.14.54" + escalade@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" @@ -13642,7 +13828,7 @@ expect@^26.6.2: jest-message-util "^26.6.2" jest-regex-util "^26.0.0" -expect@^27.0.2, expect@^27.5.1: +expect@^27.5.1: version "27.5.1" resolved "https://registry.yarnpkg.com/expect/-/expect-27.5.1.tgz#83ce59f1e5bdf5f9d2b94b61d2050db48f3fef74" integrity sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw== @@ -13663,6 +13849,17 @@ expect@^28.1.1: jest-message-util "^28.1.1" jest-util "^28.1.1" +expect@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/expect/-/expect-28.1.3.tgz#90a7c1a124f1824133dd4533cce2d2bdcb6603ec" + integrity sha512-eEh0xn8HlsuOBxFgIss+2mX85VAS4Qy3OSkjV7rlBWljtA4oWH37glVGyOZSZvErDT/yBywZdPGwCXuTvSG85g== + dependencies: + "@jest/expect-utils" "^28.1.3" + jest-get-type "^28.0.2" + jest-matcher-utils "^28.1.3" + jest-message-util "^28.1.3" + jest-util "^28.1.3" + expiry-js@0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/expiry-js/-/expiry-js-0.1.7.tgz#76be8c05e572bf936df40c1766448d0b3b2f555f" @@ -16916,6 +17113,16 @@ jest-diff@^28.1.1: jest-get-type "^28.0.2" pretty-format "^28.1.1" +jest-diff@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-28.1.3.tgz#948a192d86f4e7a64c5264ad4da4877133d8792f" + integrity sha512-8RqP1B/OXzjjTWkqMX67iqgwBVJRgCyKD3L9nq+6ZqJMdvjE8RgHktqZ6jNrkdMT+dJuYNI3rhQpxaz7drJHfw== + dependencies: + chalk "^4.0.0" + diff-sequences "^28.1.1" + jest-get-type "^28.0.2" + pretty-format "^28.1.3" + jest-docblock@^27.5.1: version "27.5.1" resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-27.5.1.tgz#14092f364a42c6108d42c33c8cf30e058e25f6c0" @@ -17086,6 +17293,16 @@ jest-matcher-utils@^28.1.1: jest-get-type "^28.0.2" pretty-format "^28.1.1" +jest-matcher-utils@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-28.1.3.tgz#5a77f1c129dd5ba3b4d7fc20728806c78893146e" + integrity sha512-kQeJ7qHemKfbzKoGjHHrRKH6atgxMk8Enkk2iPQ3XwO6oE/KYD8lMYOziCkeSB9G4adPM4nR1DE8Tf5JeWH6Bw== + dependencies: + chalk "^4.0.0" + jest-diff "^28.1.3" + jest-get-type "^28.0.2" + pretty-format "^28.1.3" + jest-message-util@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-26.6.2.tgz#58173744ad6fc0506b5d21150b9be56ef001ca07" @@ -17116,18 +17333,18 @@ jest-message-util@^27.5.1: slash "^3.0.0" stack-utils "^2.0.3" -jest-message-util@^28.1.1: - version "28.1.1" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-28.1.1.tgz#60aa0b475cfc08c8a9363ed2fb9108514dd9ab89" - integrity sha512-xoDOOT66fLfmTRiqkoLIU7v42mal/SqwDKvfmfiWAdJMSJiU+ozgluO7KbvoAgiwIrrGZsV7viETjc8GNrA/IQ== +jest-message-util@^28.1.1, jest-message-util@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-28.1.3.tgz#232def7f2e333f1eecc90649b5b94b0055e7c43d" + integrity sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g== dependencies: "@babel/code-frame" "^7.12.13" - "@jest/types" "^28.1.1" + "@jest/types" "^28.1.3" "@types/stack-utils" "^2.0.0" chalk "^4.0.0" graceful-fs "^4.2.9" micromatch "^4.0.4" - pretty-format "^28.1.1" + pretty-format "^28.1.3" slash "^3.0.0" stack-utils "^2.0.3" @@ -17384,6 +17601,18 @@ jest-util@^28.1.1: graceful-fs "^4.2.9" picomatch "^2.2.3" +jest-util@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-28.1.3.tgz#f4f932aa0074f0679943220ff9cbba7e497028b0" + integrity sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ== + dependencies: + "@jest/types" "^28.1.3" + "@types/node" "*" + chalk "^4.0.0" + ci-info "^3.2.0" + graceful-fs "^4.2.9" + picomatch "^2.2.3" + jest-validate@^27.5.1: version "27.5.1" resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-27.5.1.tgz#9197d54dc0bdb52260b8db40b46ae668e04df067" @@ -17457,11 +17686,6 @@ jpeg-js@^0.3.2: resolved "https://registry.yarnpkg.com/jpeg-js/-/jpeg-js-0.3.7.tgz#471a89d06011640592d314158608690172b1028d" integrity sha512-9IXdWudL61npZjvLuVe/ktHiA41iE8qFyLB+4VDTblEsWBzeg8WQTlktdUK4CdncUqtUgUg0bbOmTE2bKBKaBQ== -jpeg-js@^0.4.2: - version "0.4.3" - resolved "https://registry.yarnpkg.com/jpeg-js/-/jpeg-js-0.4.3.tgz#6158e09f1983ad773813704be80680550eff977b" - integrity sha512-ru1HWKek8octvUHFHvE5ZzQ1yAsJmIvRdGWvSoKV52XKyuyYA437QWDttXT8eZXDSbuMpHlLzPDZUPd6idIz+Q== - jquery@^3.5.0: version "3.6.0" resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.6.0.tgz#c72a09f15c1bdce142f49dbf1170bdf8adac2470" @@ -17859,10 +18083,10 @@ kleur@^3.0.3: resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== -kleur@^4.1.4: - version "4.1.4" - resolved "https://registry.yarnpkg.com/kleur/-/kleur-4.1.4.tgz#8c202987d7e577766d039a8cd461934c01cda04d" - integrity sha512-8QADVssbrFjivHWQU7KkMgptGTl6WAcSdlbBPY4uNF+mWr6DGcKrvY2w4FQJoXch7+fKMjj0dRrL75vk3k23OA== +kleur@^4.1.5: + version "4.1.5" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-4.1.5.tgz#95106101795f7050c6c650f350c683febddb1780" + integrity sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ== klona@^2.0.4: version "2.0.4" @@ -18455,6 +18679,13 @@ lower-case@^2.0.1: dependencies: tslib "^1.10.0" +lower-case@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" + integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== + dependencies: + tslib "^2.0.3" + lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" @@ -19094,7 +19325,7 @@ mime@1.6.0, mime@^1.4.1: resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== -mime@^2.4.4, mime@^2.4.6: +mime@^2.4.4: version "2.5.2" resolved "https://registry.yarnpkg.com/mime/-/mime-2.5.2.tgz#6e3dc6cc2b9510643830e5f19d5cb753da5eeabe" integrity sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg== @@ -19655,6 +19886,14 @@ no-case@^3.0.3: lower-case "^2.0.1" tslib "^1.10.0" +no-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" + integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== + dependencies: + lower-case "^2.0.2" + tslib "^2.0.3" + nock@12.0.3: version "12.0.3" resolved "https://registry.yarnpkg.com/nock/-/nock-12.0.3.tgz#83f25076dbc4c9aa82b5cdf54c9604c7a778d1c9" @@ -20974,54 +21213,29 @@ platform@^1.3.0: resolved "https://registry.yarnpkg.com/platform/-/platform-1.3.5.tgz#fb6958c696e07e2918d2eeda0f0bc9448d733444" integrity sha512-TuvHS8AOIZNAlE77WUDiR4rySV/VMptyMfcfeoMgs4P8apaZM3JrnbzBiixKUv+XR6i+BXrQh8WAnjaSPFO65Q== -playwright-chromium@=1.14.0: - version "1.14.0" - resolved "https://registry.yarnpkg.com/playwright-chromium/-/playwright-chromium-1.14.0.tgz#b153eb96412fd6a4fa8d9233a4fdf694fc9f3139" - integrity sha512-qWQN9VTPhvEZdRpn1564EOtiNU+hRHhogKg1heBX9VsfGy6WHytR9XPFJjD4M6fhNAV1WKM2McVPYIbi1EOYww== +playwright-chromium@=1.26.0: + version "1.26.0" + resolved "https://registry.yarnpkg.com/playwright-chromium/-/playwright-chromium-1.26.0.tgz#fa4e75a2034a016b9e2e825fc6577f3efb0d2792" + integrity sha512-4hDiVmMKmtuHW5ne11S1HCQTdL+wytprQMhWYecEjMSIKBR1DJ3JLrcUDgqA0L5Jzi/CBKYQQk6TOVlTjXybXQ== dependencies: - commander "^6.1.0" - debug "^4.1.1" - extract-zip "^2.0.1" - https-proxy-agent "^5.0.0" - jpeg-js "^0.4.2" - mime "^2.4.6" - pngjs "^5.0.0" - progress "^2.0.3" - proper-lockfile "^4.1.1" - proxy-from-env "^1.1.0" - rimraf "^3.0.2" - stack-utils "^2.0.3" - ws "^7.4.6" - yazl "^2.5.1" + playwright-core "1.26.0" -playwright-core@=1.17.1: - version "1.17.1" - resolved "https://registry.yarnpkg.com/playwright-core/-/playwright-core-1.17.1.tgz#a16e0f89284a0ed8ae6d77e1c905c84b8a2ba022" - integrity sha512-C3c8RpPiC3qr15fRDN6dx6WnUkPLFmST37gms2aoHPDRvp7EaGDPMMZPpqIm/QWB5J40xDrQCD4YYHz2nBTojQ== - dependencies: - commander "^8.2.0" - debug "^4.1.1" - extract-zip "^2.0.1" - https-proxy-agent "^5.0.0" - jpeg-js "^0.4.2" - mime "^2.4.6" - pngjs "^5.0.0" - progress "^2.0.3" - proper-lockfile "^4.1.1" - proxy-from-env "^1.1.0" - rimraf "^3.0.2" - socks-proxy-agent "^6.1.0" - stack-utils "^2.0.3" - ws "^7.4.6" - yauzl "^2.10.0" - yazl "^2.5.1" +playwright-core@1.26.0, playwright-core@=1.26.0: + version "1.26.0" + resolved "https://registry.yarnpkg.com/playwright-core/-/playwright-core-1.26.0.tgz#850228f0638d410a5cdd69800d552f60e4d295cd" + integrity sha512-p8huU8eU4gD3VkJd3DA1nA7R3XA6rFvFL+1RYS96cSljCF2yJE9CWEHTPF4LqX8KN9MoWCrAfVKP5381X3CZqg== + +playwright-core@1.27.1: + version "1.27.1" + resolved "https://registry.yarnpkg.com/playwright-core/-/playwright-core-1.27.1.tgz#840ef662e55a3ed759d8b5d3d00a5f885a7184f4" + integrity sha512-9EmeXDncC2Pmp/z+teoVYlvmPWUC6ejSSYZUln7YaP89Z6lpAaiaAnqroUt/BoLo8tn7WYShcfaCh+xofZa44Q== -playwright@^1.17.1: - version "1.17.1" - resolved "https://registry.yarnpkg.com/playwright/-/playwright-1.17.1.tgz#a6d63302ee40f41283c4bf869de261c4743a787c" - integrity sha512-DisCkW9MblDJNS3rG61p8LiLA2WA7IY/4A4W7DX4BphWe/HuWjKmGQptuk4NVIh5UuSwXpW/jaH2+ZgjHs3GMA== +playwright@^1.26.0: + version "1.27.1" + resolved "https://registry.yarnpkg.com/playwright/-/playwright-1.27.1.tgz#4eecac5899566c589d4220ca8acc16abe8a67450" + integrity sha512-xXYZ7m36yTtC+oFgqH0eTgullGztKSRMb4yuwLPl8IYSmgBM88QiB+3IWb1mRIC9/NNwcgbG0RwtFlg+EAFQHQ== dependencies: - playwright-core "=1.17.1" + playwright-core "1.27.1" plugin-error@^1.0.1: version "1.0.1" @@ -21060,11 +21274,6 @@ pngjs@^3.3.3, pngjs@^3.4.0: resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-3.4.0.tgz#99ca7d725965fb655814eaf65f38f12bbdbf555f" integrity sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w== -pngjs@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-5.0.0.tgz#e79dd2b215767fd9c04561c01236df960bce7fbb" - integrity sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw== - pngjs@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-6.0.0.tgz#ca9e5d2aa48db0228a52c419c3308e87720da821" @@ -21516,6 +21725,16 @@ pretty-format@^28.1.1: ansi-styles "^5.0.0" react-is "^18.0.0" +pretty-format@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-28.1.3.tgz#c9fba8cedf99ce50963a11b27d982a9ae90970d5" + integrity sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q== + dependencies: + "@jest/schemas" "^28.1.3" + ansi-regex "^5.0.1" + ansi-styles "^5.0.0" + react-is "^18.0.0" + pretty-format@^3.8.0: version "3.8.0" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-3.8.0.tgz#bfbed56d5e9a776645f4b1ff7aa1a3ac4fa3c385" @@ -21567,7 +21786,7 @@ process@^0.11.10: resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= -progress@2.0.3, progress@^2.0.0, progress@^2.0.3: +progress@2.0.3, progress@^2.0.0: version "2.0.3" resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== @@ -21652,15 +21871,6 @@ propagate@^2.0.0: resolved "https://registry.yarnpkg.com/propagate/-/propagate-2.0.1.tgz#40cdedab18085c792334e64f0ac17256d38f9a45" integrity sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag== -proper-lockfile@^4.1.1: - version "4.1.2" - resolved "https://registry.yarnpkg.com/proper-lockfile/-/proper-lockfile-4.1.2.tgz#c8b9de2af6b2f1601067f98e01ac66baa223141f" - integrity sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA== - dependencies: - graceful-fs "^4.2.4" - retry "^0.12.0" - signal-exit "^3.0.2" - property-information@^5.0.0, property-information@^5.0.1, property-information@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/property-information/-/property-information-5.5.0.tgz#4dc075d493061a82e2b7d096f406e076ed859943" @@ -23985,10 +24195,10 @@ shallowequal@^1.1.0: resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8" integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ== -sharp@^0.30.1: - version "0.30.7" - resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.30.7.tgz#7862bda98804fdd1f0d5659c85e3324b90d94c7c" - integrity sha512-G+MY2YW33jgflKPTXXptVO28HvNOo9G3j0MybYAHeEmby+QuD2U98dT6ueht9cv/XDqZspSpIhoSW+BAKJ7Hig== +sharp@^0.31.1: + version "0.31.1" + resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.31.1.tgz#b2f7076d381a120761aa93700cadefcf90a22458" + integrity sha512-GR8M1wBwOiFKLkm9JPun27OQnNRZdHfSf9VwcdZX6UrRmM1/XnOrLFTF0GAil+y/YK4E6qcM/ugxs80QirsHxg== dependencies: color "^4.2.3" detect-libc "^2.0.1" @@ -24142,13 +24352,21 @@ smart-buffer@^4.1.0: resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== -snakecase-keys@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/snakecase-keys/-/snakecase-keys-3.2.1.tgz#ce5d1a2de8a93c939d7992f76f2743aa59f3d5ad" - integrity sha512-CjU5pyRfwOtaOITYv5C8DzpZ8XA/ieRsDpr93HI2r6e3YInC6moZpSQbmUtg8cTk58tq2x3jcG2gv+p1IZGmMA== +snake-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-3.0.4.tgz#4f2bbd568e9935abdfd593f34c691dadb49c452c" + integrity sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg== + dependencies: + dot-case "^3.0.4" + tslib "^2.0.3" + +snakecase-keys@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/snakecase-keys/-/snakecase-keys-4.0.2.tgz#72e28112b77753a68a4eeb110efec05ab391e190" + integrity sha512-ZFCo3zZtNN43cy2j4fQDHPxS557Uuzn887FBmDdaSB41D8l/MayuvaSrIlCXGFhZ8sXwrHiNaZiIPpKzi88gog== dependencies: map-obj "^4.1.0" - to-snake-case "^1.0.0" + snake-case "^3.0.4" snap-shot-compare@2.8.3: version "2.8.3" @@ -24213,7 +24431,7 @@ sockjs@^0.3.24: uuid "^8.3.2" websocket-driver "^0.7.4" -socks-proxy-agent@^6.0.0, socks-proxy-agent@^6.1.0: +socks-proxy-agent@^6.0.0: version "6.1.1" resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-6.1.1.tgz#e664e8f1aaf4e1fb3df945f09e3d94f911137f87" integrity sha512-t8J0kG3csjA4g6FTbsMOWws+7R7vuRC8aQ/wy3/1OWmsgwA68zs/+cExQ0koSitUDXqhufF/YJr9wtNMZHw5Ew== @@ -24238,10 +24456,10 @@ sonic-boom@^1.0.2: atomic-sleep "^1.0.0" flatstr "^1.0.12" -sonic-boom@^2.6.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/sonic-boom/-/sonic-boom-2.6.0.tgz#8786fc78be07c18a90381acd816d1d4afe3537a2" - integrity sha512-6xYZFRmDEtxGqfOKcDQ4cPLrNa0SPEDI+wlzDAHowXE6YV42NeXqg9mP2KkiM8JVu3lHfZ2iQKYlGOz+kTpphg== +sonic-boom@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/sonic-boom/-/sonic-boom-3.2.0.tgz#ce9f2de7557e68be2e52c8df6d9b052e7d348143" + integrity sha512-SbbZ+Kqj/XIunvIAgUZRlqd6CGQYq71tRRbXR92Za8J/R3Yh4Av+TWENiSiEgnlwckYLyP0YZQWVfyNC0dzLaA== dependencies: atomic-sleep "^1.0.0" @@ -24291,7 +24509,7 @@ source-map-support@0.5.9: buffer-from "^1.0.0" source-map "^0.6.0" -source-map-support@^0.5.16, source-map-support@^0.5.19, source-map-support@^0.5.20, source-map-support@^0.5.21, source-map-support@^0.5.6, source-map-support@~0.5.12, source-map-support@~0.5.20: +source-map-support@^0.5.16, source-map-support@^0.5.19, source-map-support@^0.5.20, source-map-support@^0.5.6, source-map-support@~0.5.12, source-map-support@~0.5.20: version "0.5.21" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== @@ -24680,6 +24898,11 @@ stream-to-async-iterator@^0.2.0: resolved "https://registry.yarnpkg.com/stream-to-async-iterator/-/stream-to-async-iterator-0.2.0.tgz#bef5c885e9524f98b2fa5effecc357bd58483780" integrity sha1-vvXIhelST5iy+l7/7MNXvVhIN4A= +streamsearch@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764" + integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== + strict-uri-encode@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546" @@ -25603,13 +25826,6 @@ to-regex@^3.0.1, to-regex@^3.0.2: regex-not "^1.0.2" safe-regex "^1.1.0" -to-snake-case@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/to-snake-case/-/to-snake-case-1.0.0.tgz#ce746913897946019a87e62edfaeaea4c608ab8c" - integrity sha1-znRpE4l5RgGah+Yu366upMYIq4w= - dependencies: - to-space-case "^1.0.0" - to-source-code@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/to-source-code/-/to-source-code-1.0.2.tgz#dd136bdb1e1dbd80bbeacf088992678e9070bfea" @@ -25783,12 +25999,12 @@ ts-morph@^13.0.2: "@ts-morph/common" "~0.12.2" code-block-writer "^11.0.0" -ts-node@^10.5.0: - version "10.7.0" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.7.0.tgz#35d503d0fab3e2baa672a0e94f4b40653c2463f5" - integrity sha512-TbIGS4xgJoX2i3do417KSaep1uRAW/Lu+WAL2doDHC0D6ummjirVOXU5/7aiZotbQ5p1Zp9tP7U6cYhA0O7M8A== +ts-node@^10.9.1: + version "10.9.1" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b" + integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== dependencies: - "@cspotcode/source-map-support" "0.7.0" + "@cspotcode/source-map-support" "^0.8.0" "@tsconfig/node10" "^1.0.7" "@tsconfig/node12" "^1.0.7" "@tsconfig/node14" "^1.0.0" @@ -25799,7 +26015,7 @@ ts-node@^10.5.0: create-require "^1.1.0" diff "^4.0.1" make-error "^1.1.1" - v8-compile-cache-lib "^3.0.0" + v8-compile-cache-lib "^3.0.1" yn "3.1.1" ts-pnp@^1.1.6: @@ -25971,7 +26187,7 @@ typescript-tuple@^2.2.1: dependencies: typescript-compare "^0.0.2" -typescript@4.6.3, typescript@^3.3.3333, typescript@^3.5.3, typescript@^4.5.5: +typescript@4.6.3, typescript@^3.3.3333, typescript@^3.5.3, typescript@^4.8.3: version "4.6.3" resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.6.3.tgz#eefeafa6afdd31d725584c67a0eaba80f6fc6c6c" integrity sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw== @@ -26024,6 +26240,13 @@ undici@^5.1.1: resolved "https://registry.yarnpkg.com/undici/-/undici-5.8.2.tgz#071fc8a6a5d24db0ad510ad442f607d9b09d5eec" integrity sha512-3KLq3pXMS0Y4IELV045fTxqz04Nk9Ms7yfBBHum3yxsTR4XNn+ZCaUbf/mWitgYDAhsplQ0B1G4S5D345lMO3A== +undici@^5.10.0: + version "5.11.0" + resolved "https://registry.yarnpkg.com/undici/-/undici-5.11.0.tgz#1db25f285821828fc09d3804b9e2e934ae86fc13" + integrity sha512-oWjWJHzFet0Ow4YZBkyiJwiK5vWqEYoH7BINzJAJOLedZ++JpAlCbUktW2GQ2DS2FpKmxD/JMtWUUWl1BtghGw== + dependencies: + busboy "^1.6.0" + unfetch@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/unfetch/-/unfetch-4.2.0.tgz#7e21b0ef7d363d8d9af0fb929a5555f6ef97a3be" @@ -26514,10 +26737,10 @@ uuid@^8.3.0, uuid@^8.3.2: resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== -v8-compile-cache-lib@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.0.tgz#0582bcb1c74f3a2ee46487ceecf372e46bce53e8" - integrity sha512-mpSYqfsFvASnSn5qMiwrr4VKfumbPyONLCOPmsR3A6pTY/r0+tSaVbgPWSAIuzbk3lCTa+FForeTiO+wBQGkjA== +v8-compile-cache-lib@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" + integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== v8-compile-cache@^2.0.3, v8-compile-cache@^2.3.0: version "2.3.0" @@ -27759,6 +27982,11 @@ yaml@^1.10.0, yaml@^1.10.2, yaml@^1.7.2: resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== +yaml@^2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.1.3.tgz#9b3a4c8aff9821b696275c79a8bee8399d945207" + integrity sha512-AacA8nRULjKMX2DvWvOAdBZMOfQlypSFkjcOcu9FalllIDJ1kvlREzcdIZmidQUqqeMv7jorHjq2HlLv/+c2lg== + yargs-parser@20.2.4, yargs-parser@^20.2.2, yargs-parser@^20.2.3: version "20.2.4" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54"