diff --git a/.buildkite/pipelines/on_merge.yml b/.buildkite/pipelines/on_merge.yml index 7085bcaeedf7a..73c173ae71cf8 100644 --- a/.buildkite/pipelines/on_merge.yml +++ b/.buildkite/pipelines/on_merge.yml @@ -79,9 +79,9 @@ steps: - command: .buildkite/scripts/steps/lint.sh label: 'Linting' agents: - queue: n2-2-spot + queue: n2-8-spot key: linting - timeout_in_minutes: 90 + timeout_in_minutes: 60 retry: automatic: - exit_status: '-1' diff --git a/.buildkite/pipelines/pull_request/base.yml b/.buildkite/pipelines/pull_request/base.yml index 36989003428e2..43b019f936d83 100644 --- a/.buildkite/pipelines/pull_request/base.yml +++ b/.buildkite/pipelines/pull_request/base.yml @@ -31,9 +31,13 @@ steps: - command: .buildkite/scripts/steps/lint.sh label: 'Linting' agents: - queue: n2-2 + queue: n2-8-spot key: linting - timeout_in_minutes: 90 + timeout_in_minutes: 60 + retry: + automatic: + - exit_status: '-1' + limit: 3 - command: .buildkite/scripts/steps/lint_with_types.sh label: 'Linting (with types)' diff --git a/.buildkite/scripts/steps/lint.sh b/.buildkite/scripts/steps/lint.sh index ad61fced12f50..8c6a2e2e6202a 100755 --- a/.buildkite/scripts/steps/lint.sh +++ b/.buildkite/scripts/steps/lint.sh @@ -16,9 +16,9 @@ echo '--- Lint: eslint' # after possibly commiting fixed files to the repo set +e; if is_pr && ! is_auto_commit_disabled; then - node scripts/eslint --no-cache --fix + git ls-files | grep -E '\.(js|mjs|ts|tsx)$' | xargs -n 250 -P 6 node scripts/eslint --no-cache --fix else - node scripts/eslint --no-cache + git ls-files | grep -E '\.(js|mjs|ts|tsx)$' | xargs -n 250 -P 6 node scripts/eslint --no-cache fi eslint_exit=$? diff --git a/api_docs/actions.mdx b/api_docs/actions.mdx index e4e93b5b885b2..5ac6dbd9bd365 100644 --- a/api_docs/actions.mdx +++ b/api_docs/actions.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/actions title: "actions" image: https://source.unsplash.com/400x175/?github summary: API docs for the actions plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'actions'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/advanced_settings.mdx b/api_docs/advanced_settings.mdx index c5205df73c164..0fec295fa5200 100644 --- a/api_docs/advanced_settings.mdx +++ b/api_docs/advanced_settings.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/advancedSettings title: "advancedSettings" image: https://source.unsplash.com/400x175/?github summary: API docs for the advancedSettings plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'advancedSettings'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/aiops.devdocs.json b/api_docs/aiops.devdocs.json index e351d2c17883e..84e7d22381d1e 100644 --- a/api_docs/aiops.devdocs.json +++ b/api_docs/aiops.devdocs.json @@ -10,11 +10,11 @@ "tags": [], "label": "ExplainLogRateSpikes", "description": [ - "\nLazy-wrapped ExplainLogRateSpikesWrapper React component" + "\nLazy-wrapped ExplainLogRateSpikesAppState React component" ], "signature": [ "(props: React.PropsWithChildren<", - "ExplainLogRateSpikesWrapperProps", + "ExplainLogRateSpikesAppStateProps", ">) => JSX.Element" ], "path": "x-pack/plugins/aiops/public/shared_lazy_components.tsx", @@ -31,7 +31,7 @@ ], "signature": [ "React.PropsWithChildren<", - "ExplainLogRateSpikesWrapperProps", + "ExplainLogRateSpikesAppStateProps", ">" ], "path": "x-pack/plugins/aiops/public/shared_lazy_components.tsx", diff --git a/api_docs/aiops.mdx b/api_docs/aiops.mdx index a664068bdd054..f967b22c85a53 100644 --- a/api_docs/aiops.mdx +++ b/api_docs/aiops.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/aiops title: "aiops" image: https://source.unsplash.com/400x175/?github summary: API docs for the aiops plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'aiops'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/alerting.devdocs.json b/api_docs/alerting.devdocs.json index cd60d093f2898..882b50b8524ba 100644 --- a/api_docs/alerting.devdocs.json +++ b/api_docs/alerting.devdocs.json @@ -3002,8 +3002,18 @@ "pluginId": "alerting", "scope": "common", "docId": "kibAlertingPluginApi", - "section": "def-common.IExecutionLogWithErrorsResult", - "text": "IExecutionLogWithErrorsResult" + "section": "def-common.IExecutionLogResult", + "text": "IExecutionLogResult" + }, + ">; getActionErrorLog: ({ id, dateStart, dateEnd, filter, page, perPage, sort, }: ", + "GetActionErrorLogByIdParams", + ") => Promise<", + { + "pluginId": "alerting", + "scope": "common", + "docId": "kibAlertingPluginApi", + "section": "def-common.IExecutionErrorsResult", + "text": "IExecutionErrorsResult" }, ">; bulkEdit: ; }; dataViews: { setup: {}; start: () => Promise<", + { + "pluginId": "dataViews", + "scope": "server", + "docId": "kibDataViewsPluginApi", + "section": "def-server.DataViewsServerPluginStart", + "text": "DataViewsServerPluginStart" + }, ">; }; actions?: { setup: ", { "pluginId": "actions", @@ -772,7 +778,7 @@ "label": "APIEndpoint", "description": [], "signature": [ - "\"POST /internal/apm/data_view/static\" | \"GET /internal/apm/data_view/dynamic\" | \"GET /internal/apm/environments\" | \"GET /internal/apm/services/{serviceName}/errors/groups/main_statistics\" | \"GET /internal/apm/services/{serviceName}/errors/groups/main_statistics_by_transaction_name\" | \"POST /internal/apm/services/{serviceName}/errors/groups/detailed_statistics\" | \"GET /internal/apm/services/{serviceName}/errors/{groupId}\" | \"GET /internal/apm/services/{serviceName}/errors/distribution\" | \"GET /internal/apm/services/{serviceName}/errors/{groupId}/top_erroneous_transactions\" | \"POST /internal/apm/latency/overall_distribution/transactions\" | \"GET /internal/apm/services/{serviceName}/metrics/charts\" | \"GET /internal/apm/observability_overview\" | \"GET /internal/apm/observability_overview/has_data\" | \"GET /internal/apm/service-map\" | \"GET /internal/apm/service-map/service/{serviceName}\" | \"GET /internal/apm/service-map/dependency\" | \"GET /internal/apm/services/{serviceName}/serviceNodes\" | \"GET /internal/apm/services\" | \"POST /internal/apm/services/detailed_statistics\" | \"GET /internal/apm/services/{serviceName}/metadata/details\" | \"GET /internal/apm/services/{serviceName}/metadata/icons\" | \"GET /internal/apm/services/{serviceName}/agent\" | \"GET /internal/apm/services/{serviceName}/transaction_types\" | \"GET /internal/apm/services/{serviceName}/node/{serviceNodeName}/metadata\" | \"GET /api/apm/services/{serviceName}/annotation/search\" | \"POST /api/apm/services/{serviceName}/annotation\" | \"GET /internal/apm/services/{serviceName}/service_overview_instances/details/{serviceNodeName}\" | \"GET /internal/apm/services/{serviceName}/throughput\" | \"GET /internal/apm/services/{serviceName}/service_overview_instances/main_statistics\" | \"GET /internal/apm/services/{serviceName}/service_overview_instances/detailed_statistics\" | \"GET /internal/apm/services/{serviceName}/dependencies\" | \"GET /internal/apm/services/{serviceName}/dependencies/breakdown\" | \"GET /internal/apm/services/{serviceName}/profiling/timeline\" | \"GET /internal/apm/services/{serviceName}/profiling/statistics\" | \"GET /internal/apm/services/{serviceName}/anomaly_charts\" | \"GET /internal/apm/sorted_and_filtered_services\" | \"GET /internal/apm/service-groups\" | \"GET /internal/apm/service-group\" | \"POST /internal/apm/service-group\" | \"DELETE /internal/apm/service-group\" | \"GET /internal/apm/service-group/services\" | \"GET /internal/apm/suggestions\" | \"GET /internal/apm/traces/{traceId}\" | \"GET /internal/apm/traces\" | \"GET /internal/apm/traces/{traceId}/root_transaction\" | \"GET /internal/apm/transactions/{transactionId}\" | \"GET /internal/apm/traces/find\" | \"GET /internal/apm/services/{serviceName}/transactions/groups/main_statistics\" | \"GET /internal/apm/services/{serviceName}/transactions/groups/detailed_statistics\" | \"GET /internal/apm/services/{serviceName}/transactions/charts/latency\" | \"GET /internal/apm/services/{serviceName}/transactions/traces/samples\" | \"GET /internal/apm/services/{serviceName}/transaction/charts/breakdown\" | \"GET /internal/apm/services/{serviceName}/transactions/charts/error_rate\" | \"GET /internal/apm/services/{serviceName}/transactions/charts/coldstart_rate\" | \"GET /internal/apm/services/{serviceName}/transactions/charts/coldstart_rate_by_transaction_name\" | \"GET /internal/apm/alerts/chart_preview/transaction_error_rate\" | \"GET /internal/apm/alerts/chart_preview/transaction_duration\" | \"GET /internal/apm/alerts/chart_preview/transaction_error_count\" | \"GET /api/apm/settings/agent-configuration\" | \"GET /api/apm/settings/agent-configuration/view\" | \"DELETE /api/apm/settings/agent-configuration\" | \"PUT /api/apm/settings/agent-configuration\" | \"POST /api/apm/settings/agent-configuration/search\" | \"GET /api/apm/settings/agent-configuration/environments\" | \"GET /api/apm/settings/agent-configuration/agent_name\" | \"GET /internal/apm/settings/anomaly-detection/jobs\" | \"POST /internal/apm/settings/anomaly-detection/jobs\" | \"GET /internal/apm/settings/anomaly-detection/environments\" | \"POST /internal/apm/settings/anomaly-detection/update_to_v3\" | \"GET /internal/apm/settings/apm-index-settings\" | \"GET /internal/apm/settings/apm-indices\" | \"POST /internal/apm/settings/apm-indices/save\" | \"GET /internal/apm/settings/custom_links/transaction\" | \"GET /internal/apm/settings/custom_links\" | \"POST /internal/apm/settings/custom_links\" | \"PUT /internal/apm/settings/custom_links/{id}\" | \"DELETE /internal/apm/settings/custom_links/{id}\" | \"GET /api/apm/sourcemaps\" | \"POST /api/apm/sourcemaps\" | \"DELETE /api/apm/sourcemaps/{id}\" | \"GET /internal/apm/fleet/has_apm_policies\" | \"GET /internal/apm/fleet/agents\" | \"POST /api/apm/fleet/apm_server_schema\" | \"GET /internal/apm/fleet/apm_server_schema/unsupported\" | \"GET /internal/apm/fleet/migration_check\" | \"POST /internal/apm/fleet/cloud_apm_package_policy\" | \"GET /internal/apm/fleet/java_agent_versions\" | \"GET /internal/apm/dependencies/top_dependencies\" | \"GET /internal/apm/dependencies/upstream_services\" | \"GET /internal/apm/dependencies/metadata\" | \"GET /internal/apm/dependencies/charts/latency\" | \"GET /internal/apm/dependencies/charts/throughput\" | \"GET /internal/apm/dependencies/charts/error_rate\" | \"GET /internal/apm/dependencies/operations\" | \"GET /internal/apm/dependencies/charts/distribution\" | \"GET /internal/apm/dependencies/operations/spans\" | \"GET /internal/apm/correlations/field_candidates/transactions\" | \"POST /internal/apm/correlations/field_stats/transactions\" | \"GET /internal/apm/correlations/field_value_stats/transactions\" | \"POST /internal/apm/correlations/field_value_pairs/transactions\" | \"POST /internal/apm/correlations/significant_correlations/transactions\" | \"POST /internal/apm/correlations/p_values/transactions\" | \"GET /internal/apm/fallback_to_transactions\" | \"GET /internal/apm/has_data\" | \"GET /internal/apm/event_metadata/{processorEvent}/{id}\" | \"GET /internal/apm/agent_keys\" | \"GET /internal/apm/agent_keys/privileges\" | \"POST /internal/apm/api_key/invalidate\" | \"POST /api/apm/agent_keys\" | \"GET /internal/apm/traces/{traceId}/span_links/{spanId}/parents\" | \"GET /internal/apm/traces/{traceId}/span_links/{spanId}/children\" | \"GET /internal/apm/services/{serviceName}/infrastructure_attributes\" | \"GET /internal/apm/debug-telemetry\" | \"GET /internal/apm/time_range_metadata\"" + "\"POST /internal/apm/data_view/static\" | \"GET /internal/apm/data_view/title\" | \"GET /internal/apm/environments\" | \"GET /internal/apm/services/{serviceName}/errors/groups/main_statistics\" | \"GET /internal/apm/services/{serviceName}/errors/groups/main_statistics_by_transaction_name\" | \"POST /internal/apm/services/{serviceName}/errors/groups/detailed_statistics\" | \"GET /internal/apm/services/{serviceName}/errors/{groupId}\" | \"GET /internal/apm/services/{serviceName}/errors/distribution\" | \"GET /internal/apm/services/{serviceName}/errors/{groupId}/top_erroneous_transactions\" | \"POST /internal/apm/latency/overall_distribution/transactions\" | \"GET /internal/apm/services/{serviceName}/metrics/charts\" | \"GET /internal/apm/observability_overview\" | \"GET /internal/apm/observability_overview/has_data\" | \"GET /internal/apm/service-map\" | \"GET /internal/apm/service-map/service/{serviceName}\" | \"GET /internal/apm/service-map/dependency\" | \"GET /internal/apm/services/{serviceName}/serviceNodes\" | \"GET /internal/apm/services\" | \"POST /internal/apm/services/detailed_statistics\" | \"GET /internal/apm/services/{serviceName}/metadata/details\" | \"GET /internal/apm/services/{serviceName}/metadata/icons\" | \"GET /internal/apm/services/{serviceName}/agent\" | \"GET /internal/apm/services/{serviceName}/transaction_types\" | \"GET /internal/apm/services/{serviceName}/node/{serviceNodeName}/metadata\" | \"GET /api/apm/services/{serviceName}/annotation/search\" | \"POST /api/apm/services/{serviceName}/annotation\" | \"GET /internal/apm/services/{serviceName}/service_overview_instances/details/{serviceNodeName}\" | \"GET /internal/apm/services/{serviceName}/throughput\" | \"GET /internal/apm/services/{serviceName}/service_overview_instances/main_statistics\" | \"GET /internal/apm/services/{serviceName}/service_overview_instances/detailed_statistics\" | \"GET /internal/apm/services/{serviceName}/dependencies\" | \"GET /internal/apm/services/{serviceName}/dependencies/breakdown\" | \"GET /internal/apm/services/{serviceName}/profiling/timeline\" | \"GET /internal/apm/services/{serviceName}/profiling/statistics\" | \"GET /internal/apm/services/{serviceName}/anomaly_charts\" | \"GET /internal/apm/sorted_and_filtered_services\" | \"GET /internal/apm/service-groups\" | \"GET /internal/apm/service-group\" | \"POST /internal/apm/service-group\" | \"DELETE /internal/apm/service-group\" | \"GET /internal/apm/service-group/services\" | \"GET /internal/apm/suggestions\" | \"GET /internal/apm/traces/{traceId}\" | \"GET /internal/apm/traces\" | \"GET /internal/apm/traces/{traceId}/root_transaction\" | \"GET /internal/apm/transactions/{transactionId}\" | \"GET /internal/apm/traces/find\" | \"GET /internal/apm/services/{serviceName}/transactions/groups/main_statistics\" | \"GET /internal/apm/services/{serviceName}/transactions/groups/detailed_statistics\" | \"GET /internal/apm/services/{serviceName}/transactions/charts/latency\" | \"GET /internal/apm/services/{serviceName}/transactions/traces/samples\" | \"GET /internal/apm/services/{serviceName}/transaction/charts/breakdown\" | \"GET /internal/apm/services/{serviceName}/transactions/charts/error_rate\" | \"GET /internal/apm/services/{serviceName}/transactions/charts/coldstart_rate\" | \"GET /internal/apm/services/{serviceName}/transactions/charts/coldstart_rate_by_transaction_name\" | \"GET /internal/apm/alerts/chart_preview/transaction_error_rate\" | \"GET /internal/apm/alerts/chart_preview/transaction_duration\" | \"GET /internal/apm/alerts/chart_preview/transaction_error_count\" | \"GET /api/apm/settings/agent-configuration\" | \"GET /api/apm/settings/agent-configuration/view\" | \"DELETE /api/apm/settings/agent-configuration\" | \"PUT /api/apm/settings/agent-configuration\" | \"POST /api/apm/settings/agent-configuration/search\" | \"GET /api/apm/settings/agent-configuration/environments\" | \"GET /api/apm/settings/agent-configuration/agent_name\" | \"GET /internal/apm/settings/anomaly-detection/jobs\" | \"POST /internal/apm/settings/anomaly-detection/jobs\" | \"GET /internal/apm/settings/anomaly-detection/environments\" | \"POST /internal/apm/settings/anomaly-detection/update_to_v3\" | \"GET /internal/apm/settings/apm-index-settings\" | \"GET /internal/apm/settings/apm-indices\" | \"POST /internal/apm/settings/apm-indices/save\" | \"GET /internal/apm/settings/custom_links/transaction\" | \"GET /internal/apm/settings/custom_links\" | \"POST /internal/apm/settings/custom_links\" | \"PUT /internal/apm/settings/custom_links/{id}\" | \"DELETE /internal/apm/settings/custom_links/{id}\" | \"GET /api/apm/sourcemaps\" | \"POST /api/apm/sourcemaps\" | \"DELETE /api/apm/sourcemaps/{id}\" | \"GET /internal/apm/fleet/has_apm_policies\" | \"GET /internal/apm/fleet/agents\" | \"POST /api/apm/fleet/apm_server_schema\" | \"GET /internal/apm/fleet/apm_server_schema/unsupported\" | \"GET /internal/apm/fleet/migration_check\" | \"POST /internal/apm/fleet/cloud_apm_package_policy\" | \"GET /internal/apm/fleet/java_agent_versions\" | \"GET /internal/apm/dependencies/top_dependencies\" | \"GET /internal/apm/dependencies/upstream_services\" | \"GET /internal/apm/dependencies/metadata\" | \"GET /internal/apm/dependencies/charts/latency\" | \"GET /internal/apm/dependencies/charts/throughput\" | \"GET /internal/apm/dependencies/charts/error_rate\" | \"GET /internal/apm/dependencies/operations\" | \"GET /internal/apm/dependencies/charts/distribution\" | \"GET /internal/apm/dependencies/operations/spans\" | \"GET /internal/apm/correlations/field_candidates/transactions\" | \"POST /internal/apm/correlations/field_stats/transactions\" | \"GET /internal/apm/correlations/field_value_stats/transactions\" | \"POST /internal/apm/correlations/field_value_pairs/transactions\" | \"POST /internal/apm/correlations/significant_correlations/transactions\" | \"POST /internal/apm/correlations/p_values/transactions\" | \"GET /internal/apm/fallback_to_transactions\" | \"GET /internal/apm/has_data\" | \"GET /internal/apm/event_metadata/{processorEvent}/{id}\" | \"GET /internal/apm/agent_keys\" | \"GET /internal/apm/agent_keys/privileges\" | \"POST /internal/apm/api_key/invalidate\" | \"POST /api/apm/agent_keys\" | \"GET /internal/apm/traces/{traceId}/span_links/{spanId}/parents\" | \"GET /internal/apm/traces/{traceId}/span_links/{spanId}/children\" | \"GET /internal/apm/services/{serviceName}/infrastructure_attributes\" | \"GET /internal/apm/debug-telemetry\" | \"GET /internal/apm/time_range_metadata\"" ], "path": "x-pack/plugins/apm/server/routes/apm_routes/get_global_apm_server_route_repository.ts", "deprecated": false, @@ -5258,9 +5264,9 @@ "NonEmptyStringBrand", ">)[]; }, ", "APMRouteCreateOptions", - ">; \"GET /internal/apm/data_view/dynamic\": ", + ">; \"GET /internal/apm/data_view/title\": ", "ServerRoute", - "<\"GET /internal/apm/data_view/dynamic\", undefined, ", + "<\"GET /internal/apm/data_view/title\", undefined, ", { "pluginId": "apm", "scope": "server", @@ -5268,9 +5274,7 @@ "section": "def-server.APMRouteHandlerResources", "text": "APMRouteHandlerResources" }, - ", { dynamicDataView: ", - "DataViewTitleAndFields", - " | undefined; }, ", + ", { apmDataViewTitle: string; }, ", "APMRouteCreateOptions", ">; \"POST /internal/apm/data_view/static\": ", "ServerRoute", @@ -5282,7 +5286,15 @@ "section": "def-server.APMRouteHandlerResources", "text": "APMRouteHandlerResources" }, - ", { created: boolean; }, ", + ", { dataView: ", + { + "pluginId": "dataViews", + "scope": "common", + "docId": "kibDataViewsPluginApi", + "section": "def-common.DataView", + "text": "DataView" + }, + " | undefined; }, ", "APMRouteCreateOptions", ">; }" ], diff --git a/api_docs/apm.mdx b/api_docs/apm.mdx index cb5c8f3f82278..7c5955f02a982 100644 --- a/api_docs/apm.mdx +++ b/api_docs/apm.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/apm title: "apm" image: https://source.unsplash.com/400x175/?github summary: API docs for the apm plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apm'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- @@ -18,7 +18,7 @@ Contact [APM UI](https://github.com/orgs/elastic/teams/apm-ui) for questions reg | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 40 | 0 | 40 | 55 | +| 40 | 0 | 40 | 53 | ## Client diff --git a/api_docs/banners.mdx b/api_docs/banners.mdx index f19576f5e913e..305fd9705a851 100644 --- a/api_docs/banners.mdx +++ b/api_docs/banners.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/banners title: "banners" image: https://source.unsplash.com/400x175/?github summary: API docs for the banners plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'banners'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/bfetch.mdx b/api_docs/bfetch.mdx index 967773ebb9054..8f729a1bd75d1 100644 --- a/api_docs/bfetch.mdx +++ b/api_docs/bfetch.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/bfetch title: "bfetch" image: https://source.unsplash.com/400x175/?github summary: API docs for the bfetch plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'bfetch'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/canvas.mdx b/api_docs/canvas.mdx index c0888a7d25ece..a88f12d1aea65 100644 --- a/api_docs/canvas.mdx +++ b/api_docs/canvas.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/canvas title: "canvas" image: https://source.unsplash.com/400x175/?github summary: API docs for the canvas plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'canvas'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/cases.mdx b/api_docs/cases.mdx index 1bfd2904be3bd..8916379f49378 100644 --- a/api_docs/cases.mdx +++ b/api_docs/cases.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/cases title: "cases" image: https://source.unsplash.com/400x175/?github summary: API docs for the cases plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cases'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/charts.mdx b/api_docs/charts.mdx index 91a54232253e0..cb5a8ef23a6eb 100644 --- a/api_docs/charts.mdx +++ b/api_docs/charts.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/charts title: "charts" image: https://source.unsplash.com/400x175/?github summary: API docs for the charts plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'charts'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/cloud.mdx b/api_docs/cloud.mdx index c764715e4845e..80b75143f5f31 100644 --- a/api_docs/cloud.mdx +++ b/api_docs/cloud.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/cloud title: "cloud" image: https://source.unsplash.com/400x175/?github summary: API docs for the cloud plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloud'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/cloud_security_posture.devdocs.json b/api_docs/cloud_security_posture.devdocs.json index 5f991959da895..cb6c6f086b077 100644 --- a/api_docs/cloud_security_posture.devdocs.json +++ b/api_docs/cloud_security_posture.devdocs.json @@ -2,10 +2,273 @@ "id": "cloudSecurityPosture", "client": { "classes": [], - "functions": [], - "interfaces": [], + "functions": [ + { + "parentPluginId": "cloudSecurityPosture", + "id": "def-public.getSecuritySolutionDashboardLinks", + "type": "Function", + "tags": [], + "label": "getSecuritySolutionDashboardLinks", + "description": [ + "\nGets the cloud security posture links for navigation in the security solution's \"Dashboards\" section." + ], + "signature": [ + "(extensions?: Partial>> | undefined) => TLinkItem" + ], + "path": "x-pack/plugins/cloud_security_posture/public/common/navigation/security_solution_links.ts", + "deprecated": false, + "children": [ + { + "parentPluginId": "cloudSecurityPosture", + "id": "def-public.getSecuritySolutionDashboardLinks.$1", + "type": "Object", + "tags": [], + "label": "extensions", + "description": [ + "extended configuration for the links." + ], + "signature": [ + "Partial>> | undefined" + ], + "path": "x-pack/plugins/cloud_security_posture/public/common/navigation/security_solution_links.ts", + "deprecated": false, + "isRequired": false + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "cloudSecurityPosture", + "id": "def-public.getSecuritySolutionManageLinks", + "type": "Function", + "tags": [], + "label": "getSecuritySolutionManageLinks", + "description": [ + "\nGets the cloud security posture links for navigation in the security solution's \"Manage\" section." + ], + "signature": [ + "(extensions?: Partial>> | undefined) => TLinkItem" + ], + "path": "x-pack/plugins/cloud_security_posture/public/common/navigation/security_solution_links.ts", + "deprecated": false, + "children": [ + { + "parentPluginId": "cloudSecurityPosture", + "id": "def-public.getSecuritySolutionManageLinks.$1", + "type": "Object", + "tags": [], + "label": "extensions", + "description": [ + "extended configuration for the links." + ], + "signature": [ + "Partial>> | undefined" + ], + "path": "x-pack/plugins/cloud_security_posture/public/common/navigation/security_solution_links.ts", + "deprecated": false, + "isRequired": false + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "cloudSecurityPosture", + "id": "def-public.getSecuritySolutionRootLinks", + "type": "Function", + "tags": [], + "label": "getSecuritySolutionRootLinks", + "description": [ + "\nGets the cloud security posture links for top-level navigation in the security solution." + ], + "signature": [ + "(extensions?: Partial>> | undefined) => TLinkItem" + ], + "path": "x-pack/plugins/cloud_security_posture/public/common/navigation/security_solution_links.ts", + "deprecated": false, + "children": [ + { + "parentPluginId": "cloudSecurityPosture", + "id": "def-public.getSecuritySolutionRootLinks.$1", + "type": "Object", + "tags": [], + "label": "extensions", + "description": [ + "extended configuration for the links." + ], + "signature": [ + "Partial>> | undefined" + ], + "path": "x-pack/plugins/cloud_security_posture/public/common/navigation/security_solution_links.ts", + "deprecated": false, + "isRequired": false + } + ], + "returnComment": [], + "initialIsOpen": false + } + ], + "interfaces": [ + { + "parentPluginId": "cloudSecurityPosture", + "id": "def-public.CspSecuritySolutionContext", + "type": "Interface", + "tags": [], + "label": "CspSecuritySolutionContext", + "description": [ + "\nMethods exposed from the security solution to the cloud security posture application." + ], + "path": "x-pack/plugins/cloud_security_posture/public/types.ts", + "deprecated": false, + "children": [ + { + "parentPluginId": "cloudSecurityPosture", + "id": "def-public.CspSecuritySolutionContext.getFiltersGlobalComponent", + "type": "Function", + "tags": [], + "label": "getFiltersGlobalComponent", + "description": [ + "Gets the `FiltersGlobal` component for embedding a filter bar in the security solution application." + ], + "signature": [ + "() => React.ComponentType<{ children: React.ReactNode; }>" + ], + "path": "x-pack/plugins/cloud_security_posture/public/types.ts", + "deprecated": false, + "children": [], + "returnComment": [] + }, + { + "parentPluginId": "cloudSecurityPosture", + "id": "def-public.CspSecuritySolutionContext.getSpyRouteComponent", + "type": "Function", + "tags": [], + "label": "getSpyRouteComponent", + "description": [ + "Gets the `SpyRoute` component for navigation highlighting and breadcrumbs." + ], + "signature": [ + "() => React.ComponentType<{ pageName?: ", + { + "pluginId": "cloudSecurityPosture", + "scope": "public", + "docId": "kibCloudSecurityPosturePluginApi", + "section": "def-public.CloudSecurityPosturePageId", + "text": "CloudSecurityPosturePageId" + }, + " | undefined; }>" + ], + "path": "x-pack/plugins/cloud_security_posture/public/types.ts", + "deprecated": false, + "children": [], + "returnComment": [] + }, + { + "parentPluginId": "cloudSecurityPosture", + "id": "def-public.CspSecuritySolutionContext.getManageBreadcrumbEntry", + "type": "Function", + "tags": [], + "label": "getManageBreadcrumbEntry", + "description": [ + "Gets the `Manage` breadcrumb entry." + ], + "signature": [ + "() => ", + "BreadcrumbEntry" + ], + "path": "x-pack/plugins/cloud_security_posture/public/types.ts", + "deprecated": false, + "children": [], + "returnComment": [] + } + ], + "initialIsOpen": false + } + ], "enums": [], - "misc": [], + "misc": [ + { + "parentPluginId": "cloudSecurityPosture", + "id": "def-public.CLOUD_SECURITY_POSTURE_BASE_PATH", + "type": "string", + "tags": [], + "label": "CLOUD_SECURITY_POSTURE_BASE_PATH", + "description": [ + "The base path for all cloud security posture pages." + ], + "signature": [ + "\"/cloud_security_posture\"" + ], + "path": "x-pack/plugins/cloud_security_posture/public/common/navigation/constants.ts", + "deprecated": false, + "initialIsOpen": false + }, + { + "parentPluginId": "cloudSecurityPosture", + "id": "def-public.CloudSecurityPosturePageId", + "type": "Type", + "tags": [], + "label": "CloudSecurityPosturePageId", + "description": [ + "\nAll the IDs for the cloud security posture pages.\nThis needs to match the cloud security posture page entries in `SecurityPageName` in `x-pack/plugins/security_solution/common/constants.ts`." + ], + "signature": [ + "\"cloud_security_posture-dashboard\" | \"cloud_security_posture-findings\" | \"cloud_security_posture-benchmarks\" | \"cloud_security_posture-rules\"" + ], + "path": "x-pack/plugins/cloud_security_posture/public/common/navigation/types.ts", + "deprecated": false, + "initialIsOpen": false + } + ], "objects": [], "setup": { "parentPluginId": "cloudSecurityPosture", @@ -13,7 +276,9 @@ "type": "Interface", "tags": [], "label": "CspClientPluginSetup", - "description": [], + "description": [ + "\nThe cloud security posture's public plugin setup interface." + ], "path": "x-pack/plugins/cloud_security_posture/public/types.ts", "deprecated": false, "children": [], @@ -26,10 +291,38 @@ "type": "Interface", "tags": [], "label": "CspClientPluginStart", - "description": [], + "description": [ + "\nThe cloud security posture's public plugin start interface." + ], "path": "x-pack/plugins/cloud_security_posture/public/types.ts", "deprecated": false, - "children": [], + "children": [ + { + "parentPluginId": "cloudSecurityPosture", + "id": "def-public.CspClientPluginStart.getCloudSecurityPostureRouter", + "type": "Function", + "tags": [], + "label": "getCloudSecurityPostureRouter", + "description": [ + "Gets the cloud security posture router component for embedding in the security solution." + ], + "signature": [ + "() => React.ComponentType<{ securitySolutionContext: ", + { + "pluginId": "cloudSecurityPosture", + "scope": "public", + "docId": "kibCloudSecurityPosturePluginApi", + "section": "def-public.CspSecuritySolutionContext", + "text": "CspSecuritySolutionContext" + }, + "; }>" + ], + "path": "x-pack/plugins/cloud_security_posture/public/types.ts", + "deprecated": false, + "children": [], + "returnComment": [] + } + ], "lifecycle": "start", "initialIsOpen": true } @@ -80,7 +373,9 @@ "type": "string", "tags": [], "label": "PLUGIN_ID", - "description": [], + "description": [ + "ID of the cloud security posture plugin." + ], "signature": [ "\"csp\"" ], @@ -94,7 +389,9 @@ "type": "string", "tags": [], "label": "PLUGIN_NAME", - "description": [], + "description": [ + "Display name of the cloud security posture application." + ], "signature": [ "\"Cloud Security\"" ], diff --git a/api_docs/cloud_security_posture.mdx b/api_docs/cloud_security_posture.mdx index 8819cdb2dbf98..077355b1574a5 100644 --- a/api_docs/cloud_security_posture.mdx +++ b/api_docs/cloud_security_posture.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/cloudSecurityPosture title: "cloudSecurityPosture" image: https://source.unsplash.com/400x175/?github summary: API docs for the cloudSecurityPosture plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudSecurityPosture'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- @@ -18,7 +18,7 @@ Contact [Cloud Security Posture](https://github.com/orgs/elastic/teams/cloud-pos | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 6 | 0 | 6 | 0 | +| 19 | 0 | 2 | 1 | ## Client @@ -28,6 +28,15 @@ Contact [Cloud Security Posture](https://github.com/orgs/elastic/teams/cloud-pos ### Start +### Functions + + +### Interfaces + + +### Consts, variables and types + + ## Server ### Setup diff --git a/api_docs/console.mdx b/api_docs/console.mdx index 2ac8609de1c2d..7fbe7aa0106bc 100644 --- a/api_docs/console.mdx +++ b/api_docs/console.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/console title: "console" image: https://source.unsplash.com/400x175/?github summary: API docs for the console plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'console'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/controls.mdx b/api_docs/controls.mdx index 2e1ead774b332..15491442d2922 100644 --- a/api_docs/controls.mdx +++ b/api_docs/controls.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/controls title: "controls" image: https://source.unsplash.com/400x175/?github summary: API docs for the controls plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'controls'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/core.devdocs.json b/api_docs/core.devdocs.json index d585e1ee6dece..3bb474a84715f 100644 --- a/api_docs/core.devdocs.json +++ b/api_docs/core.devdocs.json @@ -16152,7 +16152,9 @@ "TransportRequestOptions", " | undefined): Promise<", "SearchResponse", - ">; }; eql: ", + ">; }; cluster: ", + "default", + "; eql: ", "default", "; create: { (this: That, params: ", "CreateRequest", @@ -16384,9 +16386,7 @@ "TransportRequestOptions", " | undefined): Promise<", "ClearScrollResponse", - ">; }; cluster: ", - "default", - "; count: { (this: That, params?: ", + ">; }; count: { (this: That, params?: ", "CountRequest", " | ", "CountRequest", @@ -18894,7 +18894,9 @@ "TransportRequestOptions", " | undefined): Promise<", "SearchResponse", - ">; }; eql: ", + ">; }; cluster: ", + "default", + "; eql: ", "default", "; create: { (this: That, params: ", "CreateRequest", @@ -19126,9 +19128,7 @@ "TransportRequestOptions", " | undefined): Promise<", "ClearScrollResponse", - ">; }; cluster: ", - "default", - "; count: { (this: That, params?: ", + ">; }; count: { (this: That, params?: ", "CountRequest", " | ", "CountRequest", @@ -20097,7 +20097,9 @@ "TransportRequestOptions", " | undefined): Promise<", "SearchResponse", - ">; }; eql: ", + ">; }; cluster: ", + "default", + "; eql: ", "default", "; create: { (this: That, params: ", "CreateRequest", @@ -20329,9 +20331,7 @@ "TransportRequestOptions", " | undefined): Promise<", "ClearScrollResponse", - ">; }; cluster: ", - "default", - "; count: { (this: That, params?: ", + ">; }; count: { (this: That, params?: ", "CountRequest", " | ", "CountRequest", @@ -24395,7 +24395,9 @@ "TransportRequestOptions", " | undefined): Promise<", "SearchResponse", - ">; }; eql: ", + ">; }; cluster: ", + "default", + "; eql: ", "default", "; create: { (this: That, params: ", "CreateRequest", @@ -24627,9 +24629,7 @@ "TransportRequestOptions", " | undefined): Promise<", "ClearScrollResponse", - ">; }; cluster: ", - "default", - "; count: { (this: That, params?: ", + ">; }; count: { (this: That, params?: ", "CountRequest", " | ", "CountRequest", @@ -28681,7 +28681,9 @@ "TransportRequestOptions", " | undefined): Promise<", "SearchResponse", - ">; }; eql: ", + ">; }; cluster: ", + "default", + "; eql: ", "default", "; create: { (this: That, params: ", "CreateRequest", @@ -28913,9 +28915,7 @@ "TransportRequestOptions", " | undefined): Promise<", "ClearScrollResponse", - ">; }; cluster: ", - "default", - "; count: { (this: That, params?: ", + ">; }; count: { (this: That, params?: ", "CountRequest", " | ", "CountRequest", diff --git a/api_docs/core.mdx b/api_docs/core.mdx index d28df876f874b..97ec05bb3b98c 100644 --- a/api_docs/core.mdx +++ b/api_docs/core.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/core title: "core" image: https://source.unsplash.com/400x175/?github summary: API docs for the core plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'core'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/core_application.mdx b/api_docs/core_application.mdx index fd2623489a3fc..faa8242147241 100644 --- a/api_docs/core_application.mdx +++ b/api_docs/core_application.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/core-application title: "core.application" image: https://source.unsplash.com/400x175/?github summary: API docs for the core.application plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'core.application'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/core_chrome.mdx b/api_docs/core_chrome.mdx index 4ab17c53c6f88..4a287852be382 100644 --- a/api_docs/core_chrome.mdx +++ b/api_docs/core_chrome.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/core-chrome title: "core.chrome" image: https://source.unsplash.com/400x175/?github summary: API docs for the core.chrome plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'core.chrome'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/core_saved_objects.mdx b/api_docs/core_saved_objects.mdx index a5447ba4f8890..bb5997e1aabc1 100644 --- a/api_docs/core_saved_objects.mdx +++ b/api_docs/core_saved_objects.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/core-savedObjects title: "core.savedObjects" image: https://source.unsplash.com/400x175/?github summary: API docs for the core.savedObjects plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'core.savedObjects'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/custom_integrations.mdx b/api_docs/custom_integrations.mdx index 84d0776f301fa..0325ba11ebea6 100644 --- a/api_docs/custom_integrations.mdx +++ b/api_docs/custom_integrations.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/customIntegrations title: "customIntegrations" image: https://source.unsplash.com/400x175/?github summary: API docs for the customIntegrations plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'customIntegrations'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/dashboard.mdx b/api_docs/dashboard.mdx index 638f9b8762e51..30d452fec9127 100644 --- a/api_docs/dashboard.mdx +++ b/api_docs/dashboard.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/dashboard title: "dashboard" image: https://source.unsplash.com/400x175/?github summary: API docs for the dashboard plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dashboard'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/dashboard_enhanced.mdx b/api_docs/dashboard_enhanced.mdx index d62cf5f63e4f0..5a900660f8d1a 100644 --- a/api_docs/dashboard_enhanced.mdx +++ b/api_docs/dashboard_enhanced.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/dashboardEnhanced title: "dashboardEnhanced" image: https://source.unsplash.com/400x175/?github summary: API docs for the dashboardEnhanced plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dashboardEnhanced'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/data.devdocs.json b/api_docs/data.devdocs.json index 2da5b6e5e0737..b194298050a08 100644 --- a/api_docs/data.devdocs.json +++ b/api_docs/data.devdocs.json @@ -5807,6 +5807,52 @@ "path": "src/plugins/data/common/search/aggs/types.ts", "deprecated": false }, + { + "parentPluginId": "data", + "id": "def-public.AggFunctionsMapping.aggValueCount", + "type": "Object", + "tags": [], + "label": "aggValueCount", + "description": [], + "signature": [ + { + "pluginId": "expressions", + "scope": "common", + "docId": "kibExpressionsPluginApi", + "section": "def-common.ExpressionFunctionDefinition", + "text": "ExpressionFunctionDefinition" + }, + "<\"aggValueCount\", any, AggArgs, ", + { + "pluginId": "data", + "scope": "common", + "docId": "kibDataSearchPluginApi", + "section": "def-common.AggExpressionType", + "text": "AggExpressionType" + }, + ", ", + { + "pluginId": "expressions", + "scope": "common", + "docId": "kibExpressionsPluginApi", + "section": "def-common.ExecutionContext", + "text": "ExecutionContext" + }, + "<", + { + "pluginId": "inspector", + "scope": "common", + "docId": "kibInspectorPluginApi", + "section": "def-common.Adapters", + "text": "Adapters" + }, + ", ", + "SerializableRecord", + ">>" + ], + "path": "src/plugins/data/common/search/aggs/types.ts", + "deprecated": false + }, { "parentPluginId": "data", "id": "def-public.AggFunctionsMapping.aggCount", @@ -15202,7 +15248,9 @@ "TransportRequestOptions", " | undefined): Promise<", "SearchResponse", - ">; }; eql: ", + ">; }; cluster: ", + "default", + "; eql: ", "default", "; create: { (this: That, params: ", "CreateRequest", @@ -15434,9 +15482,7 @@ "TransportRequestOptions", " | undefined): Promise<", "ClearScrollResponse", - ">; }; cluster: ", - "default", - "; count: { (this: That, params?: ", + ">; }; count: { (this: That, params?: ", "CountRequest", " | ", "CountRequest", diff --git a/api_docs/data.mdx b/api_docs/data.mdx index b9302925c9423..d2f327f704b20 100644 --- a/api_docs/data.mdx +++ b/api_docs/data.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/data title: "data" image: https://source.unsplash.com/400x175/?github summary: API docs for the data plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- @@ -18,7 +18,7 @@ Contact [App Services](https://github.com/orgs/elastic/teams/kibana-app-services | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 3086 | 34 | 2413 | 21 | +| 3094 | 34 | 2421 | 21 | ## Client diff --git a/api_docs/data_query.mdx b/api_docs/data_query.mdx index cfd2b7af1bf3e..cd8f81684c820 100644 --- a/api_docs/data_query.mdx +++ b/api_docs/data_query.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/data-query title: "data.query" image: https://source.unsplash.com/400x175/?github summary: API docs for the data.query plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data.query'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- @@ -18,7 +18,7 @@ Contact [App Services](https://github.com/orgs/elastic/teams/kibana-app-services | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 3086 | 34 | 2413 | 21 | +| 3094 | 34 | 2421 | 21 | ## Client diff --git a/api_docs/data_search.devdocs.json b/api_docs/data_search.devdocs.json index f0ca8ca100b12..70e0543078f6a 100644 --- a/api_docs/data_search.devdocs.json +++ b/api_docs/data_search.devdocs.json @@ -11365,6 +11365,22 @@ "returnComment": [], "initialIsOpen": false }, + { + "parentPluginId": "data", + "id": "def-common.aggValueCount", + "type": "Function", + "tags": [], + "label": "aggValueCount", + "description": [], + "signature": [ + "() => FunctionDefinition" + ], + "path": "src/plugins/data/common/search/aggs/metrics/value_count_fn.ts", + "deprecated": false, + "children": [], + "returnComment": [], + "initialIsOpen": false + }, { "parentPluginId": "data", "id": "def-common.calcAutoIntervalLessThan", @@ -14282,6 +14298,38 @@ "returnComment": [], "initialIsOpen": false }, + { + "parentPluginId": "data", + "id": "def-common.getValueCountMetricAgg", + "type": "Function", + "tags": [], + "label": "getValueCountMetricAgg", + "description": [], + "signature": [ + "() => ", + { + "pluginId": "data", + "scope": "common", + "docId": "kibDataSearchPluginApi", + "section": "def-common.MetricAggType", + "text": "MetricAggType" + }, + "<", + { + "pluginId": "data", + "scope": "common", + "docId": "kibDataSearchPluginApi", + "section": "def-common.IMetricAggConfig", + "text": "IMetricAggConfig" + }, + ">" + ], + "path": "src/plugins/data/common/search/aggs/metrics/value_count.ts", + "deprecated": false, + "children": [], + "returnComment": [], + "initialIsOpen": false + }, { "parentPluginId": "data", "id": "def-common.handleRequest", @@ -16969,6 +17017,52 @@ "path": "src/plugins/data/common/search/aggs/types.ts", "deprecated": false }, + { + "parentPluginId": "data", + "id": "def-common.AggFunctionsMapping.aggValueCount", + "type": "Object", + "tags": [], + "label": "aggValueCount", + "description": [], + "signature": [ + { + "pluginId": "expressions", + "scope": "common", + "docId": "kibExpressionsPluginApi", + "section": "def-common.ExpressionFunctionDefinition", + "text": "ExpressionFunctionDefinition" + }, + "<\"aggValueCount\", any, AggArgs, ", + { + "pluginId": "data", + "scope": "common", + "docId": "kibDataSearchPluginApi", + "section": "def-common.AggExpressionType", + "text": "AggExpressionType" + }, + ", ", + { + "pluginId": "expressions", + "scope": "common", + "docId": "kibExpressionsPluginApi", + "section": "def-common.ExecutionContext", + "text": "ExecutionContext" + }, + "<", + { + "pluginId": "inspector", + "scope": "common", + "docId": "kibInspectorPluginApi", + "section": "def-common.Adapters", + "text": "Adapters" + }, + ", ", + "SerializableRecord", + ">>" + ], + "path": "src/plugins/data/common/search/aggs/types.ts", + "deprecated": false + }, { "parentPluginId": "data", "id": "def-common.AggFunctionsMapping.aggCount", @@ -20898,6 +20992,59 @@ ], "initialIsOpen": false }, + { + "parentPluginId": "data", + "id": "def-common.AggParamsValueCount", + "type": "Interface", + "tags": [], + "label": "AggParamsValueCount", + "description": [], + "signature": [ + { + "pluginId": "data", + "scope": "common", + "docId": "kibDataSearchPluginApi", + "section": "def-common.AggParamsValueCount", + "text": "AggParamsValueCount" + }, + " extends ", + { + "pluginId": "data", + "scope": "common", + "docId": "kibDataSearchPluginApi", + "section": "def-common.BaseAggParams", + "text": "BaseAggParams" + } + ], + "path": "src/plugins/data/common/search/aggs/metrics/value_count.ts", + "deprecated": false, + "children": [ + { + "parentPluginId": "data", + "id": "def-common.AggParamsValueCount.field", + "type": "string", + "tags": [], + "label": "field", + "description": [], + "path": "src/plugins/data/common/search/aggs/metrics/value_count.ts", + "deprecated": false + }, + { + "parentPluginId": "data", + "id": "def-common.AggParamsValueCount.emptyAsNull", + "type": "CompoundType", + "tags": [], + "label": "emptyAsNull", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "src/plugins/data/common/search/aggs/metrics/value_count.ts", + "deprecated": false + } + ], + "initialIsOpen": false + }, { "parentPluginId": "data", "id": "def-common.AggsCommonSetup", @@ -27086,6 +27233,20 @@ "deprecated": false, "initialIsOpen": false }, + { + "parentPluginId": "data", + "id": "def-common.aggValueCountFnName", + "type": "string", + "tags": [], + "label": "aggValueCountFnName", + "description": [], + "signature": [ + "\"aggValueCount\"" + ], + "path": "src/plugins/data/common/search/aggs/metrics/value_count_fn.ts", + "deprecated": false, + "initialIsOpen": false + }, { "parentPluginId": "data", "id": "def-common.autoInterval", diff --git a/api_docs/data_search.mdx b/api_docs/data_search.mdx index c17b9a595d304..38648661fae66 100644 --- a/api_docs/data_search.mdx +++ b/api_docs/data_search.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/data-search title: "data.search" image: https://source.unsplash.com/400x175/?github summary: API docs for the data.search plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data.search'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- @@ -18,7 +18,7 @@ Contact [App Services](https://github.com/orgs/elastic/teams/kibana-app-services | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 3086 | 34 | 2413 | 21 | +| 3094 | 34 | 2421 | 21 | ## Client diff --git a/api_docs/data_view_editor.mdx b/api_docs/data_view_editor.mdx index ed1cb304e6fc1..61558ccc4caec 100644 --- a/api_docs/data_view_editor.mdx +++ b/api_docs/data_view_editor.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/dataViewEditor title: "dataViewEditor" image: https://source.unsplash.com/400x175/?github summary: API docs for the dataViewEditor plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViewEditor'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/data_view_field_editor.devdocs.json b/api_docs/data_view_field_editor.devdocs.json index 7f38835b2639d..6d4d840a9c85e 100644 --- a/api_docs/data_view_field_editor.devdocs.json +++ b/api_docs/data_view_field_editor.devdocs.json @@ -170,6 +170,117 @@ ], "functions": [], "interfaces": [ + { + "parentPluginId": "dataViewFieldEditor", + "id": "def-public.Field", + "type": "Interface", + "tags": [], + "label": "Field", + "description": [ + "\nThe data model for the field editor" + ], + "path": "src/plugins/data_view_field_editor/public/types.ts", + "deprecated": false, + "children": [ + { + "parentPluginId": "dataViewFieldEditor", + "id": "def-public.Field.name", + "type": "string", + "tags": [], + "label": "name", + "description": [ + "\nname / path used for the field" + ], + "path": "src/plugins/data_view_field_editor/public/types.ts", + "deprecated": false + }, + { + "parentPluginId": "dataViewFieldEditor", + "id": "def-public.Field.type", + "type": "CompoundType", + "tags": [], + "label": "type", + "description": [ + "\nES type" + ], + "signature": [ + "\"boolean\" | \"date\" | \"keyword\" | \"ip\" | \"geo_point\" | \"long\" | \"double\" | \"composite\"" + ], + "path": "src/plugins/data_view_field_editor/public/types.ts", + "deprecated": false + }, + { + "parentPluginId": "dataViewFieldEditor", + "id": "def-public.Field.script", + "type": "Object", + "tags": [], + "label": "script", + "description": [ + "\nsource of the runtime field script" + ], + "signature": [ + "{ source: string; } | undefined" + ], + "path": "src/plugins/data_view_field_editor/public/types.ts", + "deprecated": false + }, + { + "parentPluginId": "dataViewFieldEditor", + "id": "def-public.Field.customLabel", + "type": "string", + "tags": [], + "label": "customLabel", + "description": [ + "\ncustom label for display" + ], + "signature": [ + "string | undefined" + ], + "path": "src/plugins/data_view_field_editor/public/types.ts", + "deprecated": false + }, + { + "parentPluginId": "dataViewFieldEditor", + "id": "def-public.Field.popularity", + "type": "number", + "tags": [], + "label": "popularity", + "description": [ + "\ncustom popularity" + ], + "signature": [ + "number | undefined" + ], + "path": "src/plugins/data_view_field_editor/public/types.ts", + "deprecated": false + }, + { + "parentPluginId": "dataViewFieldEditor", + "id": "def-public.Field.format", + "type": "Object", + "tags": [], + "label": "format", + "description": [ + "\nconfiguration of the field format" + ], + "signature": [ + { + "pluginId": "fieldFormats", + "scope": "common", + "docId": "kibFieldFormatsPluginApi", + "section": "def-common.SerializedFieldFormat", + "text": "SerializedFieldFormat" + }, + "<{}, ", + "SerializableRecord", + "> | undefined" + ], + "path": "src/plugins/data_view_field_editor/public/types.ts", + "deprecated": false + } + ], + "initialIsOpen": false + }, { "parentPluginId": "dataViewFieldEditor", "id": "def-public.FormatEditorProps", @@ -381,7 +492,9 @@ "type": "Interface", "tags": [], "label": "OpenFieldEditorOptions", - "description": [], + "description": [ + "\nOptions for opening the field editor" + ], "path": "src/plugins/data_view_field_editor/public/open_editor.tsx", "deprecated": false, "children": [ @@ -391,7 +504,9 @@ "type": "Object", "tags": [], "label": "ctx", - "description": [], + "description": [ + "\ncontext containing the data view the field belongs to" + ], "signature": [ "{ dataView: ", { @@ -412,7 +527,9 @@ "type": "Function", "tags": [], "label": "onSave", - "description": [], + "description": [ + "\naction to take after field is saved" + ], "signature": [ "((field: ", { @@ -456,12 +573,36 @@ "type": "string", "tags": [], "label": "fieldName", - "description": [], + "description": [ + "\nfield to edit, for existing field" + ], "signature": [ "string | undefined" ], "path": "src/plugins/data_view_field_editor/public/open_editor.tsx", "deprecated": false + }, + { + "parentPluginId": "dataViewFieldEditor", + "id": "def-public.OpenFieldEditorOptions.fieldToCreate", + "type": "Object", + "tags": [], + "label": "fieldToCreate", + "description": [ + "\npre-selectable options for new field creation" + ], + "signature": [ + { + "pluginId": "dataViewFieldEditor", + "scope": "public", + "docId": "kibDataViewFieldEditorPluginApi", + "section": "def-public.Field", + "text": "Field" + }, + " | undefined" + ], + "path": "src/plugins/data_view_field_editor/public/open_editor.tsx", + "deprecated": false } ], "initialIsOpen": false @@ -527,7 +668,9 @@ "type": "Interface", "tags": [], "label": "PluginSetup", - "description": [], + "description": [ + "\nPublic setup contract of data view field editor" + ], "path": "src/plugins/data_view_field_editor/public/types.ts", "deprecated": false, "children": [ @@ -562,7 +705,9 @@ "type": "Interface", "tags": [], "label": "PluginStart", - "description": [], + "description": [ + "\nPublic start contract of data view field editor" + ], "path": "src/plugins/data_view_field_editor/public/types.ts", "deprecated": false, "children": [ @@ -572,7 +717,9 @@ "type": "Function", "tags": [], "label": "openEditor", - "description": [], + "description": [ + "\nmethod to open the data view field editor fly-out" + ], "signature": [ "(options: ", { diff --git a/api_docs/data_view_field_editor.mdx b/api_docs/data_view_field_editor.mdx index 73b86d9bbed4b..bc6a7a489e400 100644 --- a/api_docs/data_view_field_editor.mdx +++ b/api_docs/data_view_field_editor.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/dataViewFieldEditor title: "dataViewFieldEditor" image: https://source.unsplash.com/400x175/?github summary: API docs for the dataViewFieldEditor plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViewFieldEditor'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- @@ -18,7 +18,7 @@ Contact [App Services](https://github.com/orgs/elastic/teams/kibana-app-services | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 41 | 0 | 36 | 3 | +| 49 | 0 | 29 | 3 | ## Client diff --git a/api_docs/data_view_management.mdx b/api_docs/data_view_management.mdx index a42fafc5fa07e..91f66526cbe57 100644 --- a/api_docs/data_view_management.mdx +++ b/api_docs/data_view_management.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/dataViewManagement title: "dataViewManagement" image: https://source.unsplash.com/400x175/?github summary: API docs for the dataViewManagement plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViewManagement'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/data_views.devdocs.json b/api_docs/data_views.devdocs.json index cdea7a2a4f3df..cf34d189d2a61 100644 --- a/api_docs/data_views.devdocs.json +++ b/api_docs/data_views.devdocs.json @@ -11160,7 +11160,9 @@ "TransportRequestOptions", " | undefined): Promise<", "SearchResponse", - ">; }; eql: ", + ">; }; cluster: ", + "default", + "; eql: ", "default", "; create: { (this: That, params: ", "CreateRequest", @@ -11392,9 +11394,7 @@ "TransportRequestOptions", " | undefined): Promise<", "ClearScrollResponse", - ">; }; cluster: ", - "default", - "; count: { (this: That, params?: ", + ">; }; count: { (this: That, params?: ", "CountRequest", " | ", "CountRequest", diff --git a/api_docs/data_views.mdx b/api_docs/data_views.mdx index faaaffbfeb5bd..0c3622e2e8bbf 100644 --- a/api_docs/data_views.mdx +++ b/api_docs/data_views.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/dataViews title: "dataViews" image: https://source.unsplash.com/400x175/?github summary: API docs for the dataViews plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViews'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/data_visualizer.mdx b/api_docs/data_visualizer.mdx index 4c398fd506e85..13c671cdf32a0 100644 --- a/api_docs/data_visualizer.mdx +++ b/api_docs/data_visualizer.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/dataVisualizer title: "dataVisualizer" image: https://source.unsplash.com/400x175/?github summary: API docs for the dataVisualizer plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataVisualizer'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/deprecations_by_api.mdx b/api_docs/deprecations_by_api.mdx index fc4f8e7c711fe..b7c34a1340efd 100644 --- a/api_docs/deprecations_by_api.mdx +++ b/api_docs/deprecations_by_api.mdx @@ -3,7 +3,7 @@ id: kibDevDocsDeprecationsByApi slug: /kibana-dev-docs/api-meta/deprecated-api-list-by-api title: Deprecated API usage by API summary: A list of deprecated APIs, which plugins are still referencing them, and when they need to be removed by. -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. --- @@ -53,7 +53,7 @@ warning: This document is auto-generated and is meant to be viewed inside our ex | | canvas | - | | | canvas | - | | | canvas | - | -| | management, spaces, ml, canvas, enterpriseSearch, osquery | - | +| | management, spaces, ml, canvas, enterpriseSearch, osquery, home | - | | | management, enterpriseSearch | - | | | enterpriseSearch | - | | | actions, ml, enterpriseSearch, savedObjectsTagging | - | diff --git a/api_docs/deprecations_by_plugin.mdx b/api_docs/deprecations_by_plugin.mdx index 8700a288b406e..ed5dd2e368bba 100644 --- a/api_docs/deprecations_by_plugin.mdx +++ b/api_docs/deprecations_by_plugin.mdx @@ -3,7 +3,7 @@ id: kibDevDocsDeprecationsByPlugin slug: /kibana-dev-docs/api-meta/deprecated-api-list-by-plugin title: Deprecated API usage by plugin summary: A list of deprecated APIs, which plugins are still referencing them, and when they need to be removed by. -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. --- @@ -82,16 +82,16 @@ so TS and code-reference navigation might not highlight them. | | Deprecated API | Reference location(s) | Remove By | | ---------------|-----------|-----------| -| | [index.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/canvas/canvas_plugin_src/functions/server/demodata/index.ts#:~:text=context), [embeddable.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/canvas/canvas_plugin_src/functions/external/embeddable.ts#:~:text=context), [esdocs.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/canvas/canvas_plugin_src/functions/browser/esdocs.ts#:~:text=context), [index.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/canvas/canvas_plugin_src/functions/server/pointseries/index.ts#:~:text=context), [filters.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/canvas/common/functions/filters.ts#:~:text=context), [escount.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/canvas/canvas_plugin_src/functions/browser/escount.ts#:~:text=context), [neq.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/canvas/canvas_plugin_src/functions/common/neq.ts#:~:text=context) | - | +| | [index.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/canvas/canvas_plugin_src/functions/server/demodata/index.ts#:~:text=context), [embeddable.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/canvas/canvas_plugin_src/functions/external/embeddable.ts#:~:text=context), [esdocs.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/canvas/canvas_plugin_src/functions/browser/esdocs.ts#:~:text=context), [escount.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/canvas/canvas_plugin_src/functions/browser/escount.ts#:~:text=context), [filters.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/canvas/common/functions/filters.ts#:~:text=context), [neq.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/canvas/canvas_plugin_src/functions/common/neq.ts#:~:text=context), [index.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/canvas/canvas_plugin_src/functions/server/pointseries/index.ts#:~:text=context) | - | | | [setup_expressions.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/canvas/public/setup_expressions.ts#:~:text=getFunction) | - | -| | [application.tsx](https://github.com/elastic/kibana/tree/master/x-pack/plugins/canvas/public/application.tsx#:~:text=getFunctions), [functions.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/canvas/server/routes/functions/functions.ts#:~:text=getFunctions), [functions.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/canvas/server/routes/functions/functions.ts#:~:text=getFunctions), [functions.test.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/canvas/server/routes/functions/functions.test.ts#:~:text=getFunctions) | - | +| | [functions.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/canvas/server/routes/functions/functions.ts#:~:text=getFunctions), [functions.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/canvas/server/routes/functions/functions.ts#:~:text=getFunctions), [functions.test.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/canvas/server/routes/functions/functions.test.ts#:~:text=getFunctions) | - | | | [setup_expressions.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/canvas/public/setup_expressions.ts#:~:text=getTypes), [application.tsx](https://github.com/elastic/kibana/tree/master/x-pack/plugins/canvas/public/application.tsx#:~:text=getTypes), [functions.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/canvas/server/routes/functions/functions.ts#:~:text=getTypes) | - | | | [state.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/canvas/types/state.ts#:~:text=Render), [state.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/canvas/types/state.ts#:~:text=Render), [markdown.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/canvas/canvas_plugin_src/functions/browser/markdown.ts#:~:text=Render), [markdown.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/canvas/canvas_plugin_src/functions/browser/markdown.ts#:~:text=Render), [timefilterControl.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/canvas/canvas_plugin_src/functions/common/timefilterControl.ts#:~:text=Render), [timefilterControl.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/canvas/canvas_plugin_src/functions/common/timefilterControl.ts#:~:text=Render), [pie.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/canvas/public/functions/pie.ts#:~:text=Render), [pie.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/canvas/public/functions/pie.ts#:~:text=Render), [index.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/canvas/public/functions/plot/index.ts#:~:text=Render), [index.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/canvas/public/functions/plot/index.ts#:~:text=Render)+ 2 more | - | -| | [index.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/canvas/canvas_plugin_src/functions/server/demodata/index.ts#:~:text=context), [embeddable.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/canvas/canvas_plugin_src/functions/external/embeddable.ts#:~:text=context), [esdocs.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/canvas/canvas_plugin_src/functions/browser/esdocs.ts#:~:text=context), [index.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/canvas/canvas_plugin_src/functions/server/pointseries/index.ts#:~:text=context), [filters.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/canvas/common/functions/filters.ts#:~:text=context), [escount.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/canvas/canvas_plugin_src/functions/browser/escount.ts#:~:text=context), [neq.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/canvas/canvas_plugin_src/functions/common/neq.ts#:~:text=context) | - | +| | [index.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/canvas/canvas_plugin_src/functions/server/demodata/index.ts#:~:text=context), [embeddable.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/canvas/canvas_plugin_src/functions/external/embeddable.ts#:~:text=context), [esdocs.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/canvas/canvas_plugin_src/functions/browser/esdocs.ts#:~:text=context), [escount.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/canvas/canvas_plugin_src/functions/browser/escount.ts#:~:text=context), [filters.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/canvas/common/functions/filters.ts#:~:text=context), [neq.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/canvas/canvas_plugin_src/functions/common/neq.ts#:~:text=context), [index.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/canvas/canvas_plugin_src/functions/server/pointseries/index.ts#:~:text=context) | - | | | [setup_expressions.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/canvas/public/setup_expressions.ts#:~:text=getFunction) | - | -| | [application.tsx](https://github.com/elastic/kibana/tree/master/x-pack/plugins/canvas/public/application.tsx#:~:text=getFunctions), [functions.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/canvas/server/routes/functions/functions.ts#:~:text=getFunctions), [functions.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/canvas/server/routes/functions/functions.ts#:~:text=getFunctions), [functions.test.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/canvas/server/routes/functions/functions.test.ts#:~:text=getFunctions) | - | +| | [functions.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/canvas/server/routes/functions/functions.ts#:~:text=getFunctions), [functions.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/canvas/server/routes/functions/functions.ts#:~:text=getFunctions), [functions.test.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/canvas/server/routes/functions/functions.test.ts#:~:text=getFunctions) | - | | | [setup_expressions.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/canvas/public/setup_expressions.ts#:~:text=getTypes), [application.tsx](https://github.com/elastic/kibana/tree/master/x-pack/plugins/canvas/public/application.tsx#:~:text=getTypes), [functions.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/canvas/server/routes/functions/functions.ts#:~:text=getTypes) | - | -| | [index.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/canvas/canvas_plugin_src/functions/server/demodata/index.ts#:~:text=context), [embeddable.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/canvas/canvas_plugin_src/functions/external/embeddable.ts#:~:text=context), [esdocs.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/canvas/canvas_plugin_src/functions/browser/esdocs.ts#:~:text=context), [index.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/canvas/canvas_plugin_src/functions/server/pointseries/index.ts#:~:text=context), [filters.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/canvas/common/functions/filters.ts#:~:text=context), [escount.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/canvas/canvas_plugin_src/functions/browser/escount.ts#:~:text=context), [neq.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/canvas/canvas_plugin_src/functions/common/neq.ts#:~:text=context) | - | +| | [index.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/canvas/canvas_plugin_src/functions/server/demodata/index.ts#:~:text=context), [embeddable.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/canvas/canvas_plugin_src/functions/external/embeddable.ts#:~:text=context), [esdocs.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/canvas/canvas_plugin_src/functions/browser/esdocs.ts#:~:text=context), [escount.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/canvas/canvas_plugin_src/functions/browser/escount.ts#:~:text=context), [filters.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/canvas/common/functions/filters.ts#:~:text=context), [neq.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/canvas/canvas_plugin_src/functions/common/neq.ts#:~:text=context), [index.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/canvas/canvas_plugin_src/functions/server/pointseries/index.ts#:~:text=context) | - | | | [home.component.tsx](https://github.com/elastic/kibana/tree/master/x-pack/plugins/canvas/public/components/home/home.component.tsx#:~:text=KibanaPageTemplate), [home.component.tsx](https://github.com/elastic/kibana/tree/master/x-pack/plugins/canvas/public/components/home/home.component.tsx#:~:text=KibanaPageTemplate), [home.component.tsx](https://github.com/elastic/kibana/tree/master/x-pack/plugins/canvas/public/components/home/home.component.tsx#:~:text=KibanaPageTemplate) | - | @@ -273,7 +273,8 @@ so TS and code-reference navigation might not highlight them. | | Deprecated API | Reference location(s) | Remove By | | ---------------|-----------|-----------| -| | [application.tsx](https://github.com/elastic/kibana/tree/master/src/plugins/home/public/application/application.tsx#:~:text=RedirectAppLinks), [application.tsx](https://github.com/elastic/kibana/tree/master/src/plugins/home/public/application/application.tsx#:~:text=RedirectAppLinks), [application.tsx](https://github.com/elastic/kibana/tree/master/src/plugins/home/public/application/application.tsx#:~:text=RedirectAppLinks), [add_data.tsx](https://github.com/elastic/kibana/tree/master/src/plugins/home/public/application/components/add_data/add_data.tsx#:~:text=RedirectAppLinks), [add_data.tsx](https://github.com/elastic/kibana/tree/master/src/plugins/home/public/application/components/add_data/add_data.tsx#:~:text=RedirectAppLinks), [add_data.tsx](https://github.com/elastic/kibana/tree/master/src/plugins/home/public/application/components/add_data/add_data.tsx#:~:text=RedirectAppLinks) | - | +| | [home.tsx](https://github.com/elastic/kibana/tree/master/src/plugins/home/public/application/components/home.tsx#:~:text=KibanaPageTemplate), [home.tsx](https://github.com/elastic/kibana/tree/master/src/plugins/home/public/application/components/home.tsx#:~:text=KibanaPageTemplate), [home.tsx](https://github.com/elastic/kibana/tree/master/src/plugins/home/public/application/components/home.tsx#:~:text=KibanaPageTemplate) | - | +| | [application.tsx](https://github.com/elastic/kibana/tree/master/src/plugins/home/public/application/application.tsx#:~:text=RedirectAppLinks), [application.tsx](https://github.com/elastic/kibana/tree/master/src/plugins/home/public/application/application.tsx#:~:text=RedirectAppLinks), [application.tsx](https://github.com/elastic/kibana/tree/master/src/plugins/home/public/application/application.tsx#:~:text=RedirectAppLinks), [add_data.tsx](https://github.com/elastic/kibana/tree/master/src/plugins/home/public/application/components/add_data/add_data.tsx#:~:text=RedirectAppLinks), [add_data.tsx](https://github.com/elastic/kibana/tree/master/src/plugins/home/public/application/components/add_data/add_data.tsx#:~:text=RedirectAppLinks), [add_data.tsx](https://github.com/elastic/kibana/tree/master/src/plugins/home/public/application/components/add_data/add_data.tsx#:~:text=RedirectAppLinks), [manage_data.tsx](https://github.com/elastic/kibana/tree/master/src/plugins/home/public/application/components/manage_data/manage_data.tsx#:~:text=RedirectAppLinks), [manage_data.tsx](https://github.com/elastic/kibana/tree/master/src/plugins/home/public/application/components/manage_data/manage_data.tsx#:~:text=RedirectAppLinks), [manage_data.tsx](https://github.com/elastic/kibana/tree/master/src/plugins/home/public/application/components/manage_data/manage_data.tsx#:~:text=RedirectAppLinks), [manage_data.tsx](https://github.com/elastic/kibana/tree/master/src/plugins/home/public/application/components/manage_data/manage_data.tsx#:~:text=RedirectAppLinks)+ 1 more | - | @@ -506,13 +507,13 @@ so TS and code-reference navigation might not highlight them. | | Deprecated API | Reference location(s) | Remove By | | ---------------|-----------|-----------| -| | [role_utils.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/server/lib/role_utils.ts#:~:text=disabled), [role_utils.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/server/lib/role_utils.ts#:~:text=disabled), [elasticsearch_role.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/server/authorization/roles/elasticsearch_role.ts#:~:text=disabled), [primary_feature_privilege.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/public/management/roles/model/primary_feature_privilege.ts#:~:text=disabled), [elasticsearch_role.test.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/server/authorization/roles/elasticsearch_role.test.ts#:~:text=disabled), [kibana_features.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/public/management/roles/__fixtures__/kibana_features.ts#:~:text=disabled), [put.test.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/server/routes/authorization/roles/put.test.ts#:~:text=disabled), [put_payload.test.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/server/routes/authorization/roles/model/put_payload.test.ts#:~:text=disabled) | 8.8.0 | +| | [elasticsearch_role.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/server/authorization/roles/elasticsearch_role.ts#:~:text=disabled), [role_utils.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/server/lib/role_utils.ts#:~:text=disabled), [role_utils.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/server/lib/role_utils.ts#:~:text=disabled), [primary_feature_privilege.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/public/management/roles/model/primary_feature_privilege.ts#:~:text=disabled), [elasticsearch_role.test.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/server/authorization/roles/elasticsearch_role.test.ts#:~:text=disabled), [kibana_features.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/public/management/roles/__fixtures__/kibana_features.ts#:~:text=disabled), [put.test.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/server/routes/authorization/roles/put.test.ts#:~:text=disabled), [put_payload.test.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/server/routes/authorization/roles/model/put_payload.test.ts#:~:text=disabled) | 8.8.0 | | | [disable_ui_capabilities.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/server/authorization/disable_ui_capabilities.ts#:~:text=requiredRoles) | 8.8.0 This is relied on by the reporting feature, and should be removed once reporting migrates to using the Kibana Privilege model: https://github.com/elastic/kibana/issues/19914 | -| | [role_utils.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/server/lib/role_utils.ts#:~:text=disabled), [role_utils.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/server/lib/role_utils.ts#:~:text=disabled), [elasticsearch_role.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/server/authorization/roles/elasticsearch_role.ts#:~:text=disabled), [primary_feature_privilege.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/public/management/roles/model/primary_feature_privilege.ts#:~:text=disabled), [elasticsearch_role.test.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/server/authorization/roles/elasticsearch_role.test.ts#:~:text=disabled), [kibana_features.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/public/management/roles/__fixtures__/kibana_features.ts#:~:text=disabled), [put.test.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/server/routes/authorization/roles/put.test.ts#:~:text=disabled), [put_payload.test.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/server/routes/authorization/roles/model/put_payload.test.ts#:~:text=disabled) | 8.8.0 | -| | [role_utils.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/server/lib/role_utils.ts#:~:text=disabled), [role_utils.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/server/lib/role_utils.ts#:~:text=disabled), [elasticsearch_role.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/server/authorization/roles/elasticsearch_role.ts#:~:text=disabled), [primary_feature_privilege.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/public/management/roles/model/primary_feature_privilege.ts#:~:text=disabled), [elasticsearch_role.test.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/server/authorization/roles/elasticsearch_role.test.ts#:~:text=disabled), [kibana_features.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/public/management/roles/__fixtures__/kibana_features.ts#:~:text=disabled), [put.test.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/server/routes/authorization/roles/put.test.ts#:~:text=disabled), [put_payload.test.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/server/routes/authorization/roles/model/put_payload.test.ts#:~:text=disabled) | 8.8.0 | +| | [elasticsearch_role.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/server/authorization/roles/elasticsearch_role.ts#:~:text=disabled), [role_utils.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/server/lib/role_utils.ts#:~:text=disabled), [role_utils.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/server/lib/role_utils.ts#:~:text=disabled), [primary_feature_privilege.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/public/management/roles/model/primary_feature_privilege.ts#:~:text=disabled), [elasticsearch_role.test.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/server/authorization/roles/elasticsearch_role.test.ts#:~:text=disabled), [kibana_features.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/public/management/roles/__fixtures__/kibana_features.ts#:~:text=disabled), [put.test.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/server/routes/authorization/roles/put.test.ts#:~:text=disabled), [put_payload.test.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/server/routes/authorization/roles/model/put_payload.test.ts#:~:text=disabled) | 8.8.0 | +| | [elasticsearch_role.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/server/authorization/roles/elasticsearch_role.ts#:~:text=disabled), [role_utils.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/server/lib/role_utils.ts#:~:text=disabled), [role_utils.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/server/lib/role_utils.ts#:~:text=disabled), [primary_feature_privilege.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/public/management/roles/model/primary_feature_privilege.ts#:~:text=disabled), [elasticsearch_role.test.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/server/authorization/roles/elasticsearch_role.test.ts#:~:text=disabled), [kibana_features.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/public/management/roles/__fixtures__/kibana_features.ts#:~:text=disabled), [put.test.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/server/routes/authorization/roles/put.test.ts#:~:text=disabled), [put_payload.test.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/server/routes/authorization/roles/model/put_payload.test.ts#:~:text=disabled) | 8.8.0 | | | [disable_ui_capabilities.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/server/authorization/disable_ui_capabilities.ts#:~:text=requiredRoles) | 8.8.0 This is relied on by the reporting feature, and should be removed once reporting diff --git a/api_docs/deprecations_by_team.mdx b/api_docs/deprecations_by_team.mdx index 90cdb88c76719..a2f6ac121a73f 100644 --- a/api_docs/deprecations_by_team.mdx +++ b/api_docs/deprecations_by_team.mdx @@ -3,7 +3,7 @@ id: kibDevDocsDeprecationsDueByTeam slug: /kibana-dev-docs/api-meta/deprecations-due-by-team title: Deprecated APIs due to be removed, by team summary: Lists the teams that are referencing deprecated APIs with a remove by date. -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. --- @@ -119,13 +119,13 @@ so TS and code-reference navigation might not highlight them. | | --------|-------|-----------|-----------| | spaces | | [on_post_auth_interceptor.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/spaces/server/lib/request_interceptors/on_post_auth_interceptor.ts#:~:text=getKibanaFeatures), [spaces_usage_collector.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/spaces/server/usage_collection/spaces_usage_collector.ts#:~:text=getKibanaFeatures), [on_post_auth_interceptor.test.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/spaces/server/lib/request_interceptors/on_post_auth_interceptor.test.ts#:~:text=getKibanaFeatures), [app_authorization.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/server/authorization/app_authorization.ts#:~:text=getKibanaFeatures), [privileges.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/server/authorization/privileges/privileges.ts#:~:text=getKibanaFeatures), [authorization_service.tsx](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/server/authorization/authorization_service.tsx#:~:text=getKibanaFeatures), [app_authorization.test.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/server/authorization/app_authorization.test.ts#:~:text=getKibanaFeatures), [privileges.test.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/server/authorization/privileges/privileges.test.ts#:~:text=getKibanaFeatures), [privileges.test.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/server/authorization/privileges/privileges.test.ts#:~:text=getKibanaFeatures), [privileges.test.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/server/authorization/privileges/privileges.test.ts#:~:text=getKibanaFeatures)+ 17 more | 8.8.0 | | spaces | | [spaces_usage_collector.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/spaces/server/usage_collection/spaces_usage_collector.ts#:~:text=license%24), [plugin.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/spaces/server/plugin.ts#:~:text=license%24), [plugin.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/spaces/server/plugin.ts#:~:text=license%24), [spaces_usage_collector.test.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/spaces/server/usage_collection/spaces_usage_collector.test.ts#:~:text=license%24), [plugin.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/server/plugin.ts#:~:text=license%24) | 8.8.0 | -| security | | [role_utils.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/server/lib/role_utils.ts#:~:text=disabled), [role_utils.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/server/lib/role_utils.ts#:~:text=disabled), [elasticsearch_role.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/server/authorization/roles/elasticsearch_role.ts#:~:text=disabled), [primary_feature_privilege.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/public/management/roles/model/primary_feature_privilege.ts#:~:text=disabled), [elasticsearch_role.test.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/server/authorization/roles/elasticsearch_role.test.ts#:~:text=disabled), [kibana_features.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/public/management/roles/__fixtures__/kibana_features.ts#:~:text=disabled), [put.test.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/server/routes/authorization/roles/put.test.ts#:~:text=disabled), [put_payload.test.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/server/routes/authorization/roles/model/put_payload.test.ts#:~:text=disabled) | 8.8.0 | +| security | | [elasticsearch_role.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/server/authorization/roles/elasticsearch_role.ts#:~:text=disabled), [role_utils.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/server/lib/role_utils.ts#:~:text=disabled), [role_utils.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/server/lib/role_utils.ts#:~:text=disabled), [primary_feature_privilege.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/public/management/roles/model/primary_feature_privilege.ts#:~:text=disabled), [elasticsearch_role.test.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/server/authorization/roles/elasticsearch_role.test.ts#:~:text=disabled), [kibana_features.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/public/management/roles/__fixtures__/kibana_features.ts#:~:text=disabled), [put.test.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/server/routes/authorization/roles/put.test.ts#:~:text=disabled), [put_payload.test.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/server/routes/authorization/roles/model/put_payload.test.ts#:~:text=disabled) | 8.8.0 | | security | | [disable_ui_capabilities.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/server/authorization/disable_ui_capabilities.ts#:~:text=requiredRoles) | 8.8.0 This is relied on by the reporting feature, and should be removed once reporting migrates to using the Kibana Privilege model: https://github.com/elastic/kibana/issues/19914 | -| security | | [role_utils.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/server/lib/role_utils.ts#:~:text=disabled), [role_utils.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/server/lib/role_utils.ts#:~:text=disabled), [elasticsearch_role.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/server/authorization/roles/elasticsearch_role.ts#:~:text=disabled), [primary_feature_privilege.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/public/management/roles/model/primary_feature_privilege.ts#:~:text=disabled), [elasticsearch_role.test.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/server/authorization/roles/elasticsearch_role.test.ts#:~:text=disabled), [kibana_features.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/public/management/roles/__fixtures__/kibana_features.ts#:~:text=disabled), [put.test.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/server/routes/authorization/roles/put.test.ts#:~:text=disabled), [put_payload.test.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/server/routes/authorization/roles/model/put_payload.test.ts#:~:text=disabled) | 8.8.0 | -| security | | [role_utils.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/server/lib/role_utils.ts#:~:text=disabled), [role_utils.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/server/lib/role_utils.ts#:~:text=disabled), [elasticsearch_role.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/server/authorization/roles/elasticsearch_role.ts#:~:text=disabled), [primary_feature_privilege.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/public/management/roles/model/primary_feature_privilege.ts#:~:text=disabled), [elasticsearch_role.test.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/server/authorization/roles/elasticsearch_role.test.ts#:~:text=disabled), [kibana_features.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/public/management/roles/__fixtures__/kibana_features.ts#:~:text=disabled), [put.test.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/server/routes/authorization/roles/put.test.ts#:~:text=disabled), [put_payload.test.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/server/routes/authorization/roles/model/put_payload.test.ts#:~:text=disabled) | 8.8.0 | +| security | | [elasticsearch_role.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/server/authorization/roles/elasticsearch_role.ts#:~:text=disabled), [role_utils.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/server/lib/role_utils.ts#:~:text=disabled), [role_utils.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/server/lib/role_utils.ts#:~:text=disabled), [primary_feature_privilege.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/public/management/roles/model/primary_feature_privilege.ts#:~:text=disabled), [elasticsearch_role.test.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/server/authorization/roles/elasticsearch_role.test.ts#:~:text=disabled), [kibana_features.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/public/management/roles/__fixtures__/kibana_features.ts#:~:text=disabled), [put.test.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/server/routes/authorization/roles/put.test.ts#:~:text=disabled), [put_payload.test.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/server/routes/authorization/roles/model/put_payload.test.ts#:~:text=disabled) | 8.8.0 | +| security | | [elasticsearch_role.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/server/authorization/roles/elasticsearch_role.ts#:~:text=disabled), [role_utils.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/server/lib/role_utils.ts#:~:text=disabled), [role_utils.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/server/lib/role_utils.ts#:~:text=disabled), [primary_feature_privilege.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/public/management/roles/model/primary_feature_privilege.ts#:~:text=disabled), [elasticsearch_role.test.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/server/authorization/roles/elasticsearch_role.test.ts#:~:text=disabled), [kibana_features.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/public/management/roles/__fixtures__/kibana_features.ts#:~:text=disabled), [put.test.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/server/routes/authorization/roles/put.test.ts#:~:text=disabled), [put_payload.test.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/server/routes/authorization/roles/model/put_payload.test.ts#:~:text=disabled) | 8.8.0 | | security | | [disable_ui_capabilities.ts](https://github.com/elastic/kibana/tree/master/x-pack/plugins/security/server/authorization/disable_ui_capabilities.ts#:~:text=requiredRoles) | 8.8.0 This is relied on by the reporting feature, and should be removed once reporting diff --git a/api_docs/dev_tools.mdx b/api_docs/dev_tools.mdx index 60222078eda57..4d4d3c8a66789 100644 --- a/api_docs/dev_tools.mdx +++ b/api_docs/dev_tools.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/devTools title: "devTools" image: https://source.unsplash.com/400x175/?github summary: API docs for the devTools plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'devTools'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/discover.mdx b/api_docs/discover.mdx index 45d0050b1cc8f..cbd1a280af510 100644 --- a/api_docs/discover.mdx +++ b/api_docs/discover.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/discover title: "discover" image: https://source.unsplash.com/400x175/?github summary: API docs for the discover plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discover'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/discover_enhanced.mdx b/api_docs/discover_enhanced.mdx index db63e68c44460..facd0dd2b2486 100644 --- a/api_docs/discover_enhanced.mdx +++ b/api_docs/discover_enhanced.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/discoverEnhanced title: "discoverEnhanced" image: https://source.unsplash.com/400x175/?github summary: API docs for the discoverEnhanced plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discoverEnhanced'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/elastic_apm_synthtrace.mdx b/api_docs/elastic_apm_synthtrace.mdx index c36caef8f8d99..5ba7415409db2 100644 --- a/api_docs/elastic_apm_synthtrace.mdx +++ b/api_docs/elastic_apm_synthtrace.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/elastic-apm-synthtrace title: "@elastic/apm-synthtrace" image: https://source.unsplash.com/400x175/?github summary: API docs for the @elastic/apm-synthtrace plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@elastic/apm-synthtrace'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/embeddable.mdx b/api_docs/embeddable.mdx index 19901ef7baadc..decc6fe39b002 100644 --- a/api_docs/embeddable.mdx +++ b/api_docs/embeddable.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/embeddable title: "embeddable" image: https://source.unsplash.com/400x175/?github summary: API docs for the embeddable plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'embeddable'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/embeddable_enhanced.mdx b/api_docs/embeddable_enhanced.mdx index d38d9355b4af1..0eb8a45fb7501 100644 --- a/api_docs/embeddable_enhanced.mdx +++ b/api_docs/embeddable_enhanced.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/embeddableEnhanced title: "embeddableEnhanced" image: https://source.unsplash.com/400x175/?github summary: API docs for the embeddableEnhanced plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'embeddableEnhanced'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/encrypted_saved_objects.mdx b/api_docs/encrypted_saved_objects.mdx index 175b53c208516..4850b00506010 100644 --- a/api_docs/encrypted_saved_objects.mdx +++ b/api_docs/encrypted_saved_objects.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/encryptedSavedObjects title: "encryptedSavedObjects" image: https://source.unsplash.com/400x175/?github summary: API docs for the encryptedSavedObjects plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'encryptedSavedObjects'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/enterprise_search.mdx b/api_docs/enterprise_search.mdx index 8602d4912ab67..a3b8f1389f601 100644 --- a/api_docs/enterprise_search.mdx +++ b/api_docs/enterprise_search.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/enterpriseSearch title: "enterpriseSearch" image: https://source.unsplash.com/400x175/?github summary: API docs for the enterpriseSearch plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'enterpriseSearch'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/es_ui_shared.mdx b/api_docs/es_ui_shared.mdx index eedeccb9fa79d..198e13afcb211 100644 --- a/api_docs/es_ui_shared.mdx +++ b/api_docs/es_ui_shared.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/esUiShared title: "esUiShared" image: https://source.unsplash.com/400x175/?github summary: API docs for the esUiShared plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'esUiShared'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/event_annotation.mdx b/api_docs/event_annotation.mdx index 8d2b8901ef022..ba67617f018e3 100644 --- a/api_docs/event_annotation.mdx +++ b/api_docs/event_annotation.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/eventAnnotation title: "eventAnnotation" image: https://source.unsplash.com/400x175/?github summary: API docs for the eventAnnotation plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventAnnotation'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/event_log.mdx b/api_docs/event_log.mdx index b8d7e127c2c4a..062d5f2e698ef 100644 --- a/api_docs/event_log.mdx +++ b/api_docs/event_log.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/eventLog title: "eventLog" image: https://source.unsplash.com/400x175/?github summary: API docs for the eventLog plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventLog'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/expression_error.mdx b/api_docs/expression_error.mdx index b3272bd7915f1..9571784b2d30a 100644 --- a/api_docs/expression_error.mdx +++ b/api_docs/expression_error.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/expressionError title: "expressionError" image: https://source.unsplash.com/400x175/?github summary: API docs for the expressionError plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionError'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/expression_gauge.mdx b/api_docs/expression_gauge.mdx index af5daf6b1cc04..7df785946005c 100644 --- a/api_docs/expression_gauge.mdx +++ b/api_docs/expression_gauge.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/expressionGauge title: "expressionGauge" image: https://source.unsplash.com/400x175/?github summary: API docs for the expressionGauge plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionGauge'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/expression_heatmap.mdx b/api_docs/expression_heatmap.mdx index eb66314db0c97..35ab1eeec5ff2 100644 --- a/api_docs/expression_heatmap.mdx +++ b/api_docs/expression_heatmap.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/expressionHeatmap title: "expressionHeatmap" image: https://source.unsplash.com/400x175/?github summary: API docs for the expressionHeatmap plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionHeatmap'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/expression_image.mdx b/api_docs/expression_image.mdx index 365204524afdf..d0e3a2f9e4710 100644 --- a/api_docs/expression_image.mdx +++ b/api_docs/expression_image.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/expressionImage title: "expressionImage" image: https://source.unsplash.com/400x175/?github summary: API docs for the expressionImage plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionImage'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/expression_legacy_metric_vis.mdx b/api_docs/expression_legacy_metric_vis.mdx index 232d9bcc89609..8dc562688ec7d 100644 --- a/api_docs/expression_legacy_metric_vis.mdx +++ b/api_docs/expression_legacy_metric_vis.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/expressionLegacyMetricVis title: "expressionLegacyMetricVis" image: https://source.unsplash.com/400x175/?github summary: API docs for the expressionLegacyMetricVis plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionLegacyMetricVis'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/expression_metric.mdx b/api_docs/expression_metric.mdx index 69127b95f6437..70e487f7c8816 100644 --- a/api_docs/expression_metric.mdx +++ b/api_docs/expression_metric.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/expressionMetric title: "expressionMetric" image: https://source.unsplash.com/400x175/?github summary: API docs for the expressionMetric plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionMetric'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/expression_metric_vis.mdx b/api_docs/expression_metric_vis.mdx index 0124949974691..12d537a8b96d1 100644 --- a/api_docs/expression_metric_vis.mdx +++ b/api_docs/expression_metric_vis.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/expressionMetricVis title: "expressionMetricVis" image: https://source.unsplash.com/400x175/?github summary: API docs for the expressionMetricVis plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionMetricVis'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/expression_partition_vis.mdx b/api_docs/expression_partition_vis.mdx index abe7e79bd5b97..2e884a38ff280 100644 --- a/api_docs/expression_partition_vis.mdx +++ b/api_docs/expression_partition_vis.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/expressionPartitionVis title: "expressionPartitionVis" image: https://source.unsplash.com/400x175/?github summary: API docs for the expressionPartitionVis plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionPartitionVis'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/expression_repeat_image.mdx b/api_docs/expression_repeat_image.mdx index 5682ab533ae87..85fc81011e933 100644 --- a/api_docs/expression_repeat_image.mdx +++ b/api_docs/expression_repeat_image.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/expressionRepeatImage title: "expressionRepeatImage" image: https://source.unsplash.com/400x175/?github summary: API docs for the expressionRepeatImage plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionRepeatImage'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/expression_reveal_image.mdx b/api_docs/expression_reveal_image.mdx index b6f4af6c4fe09..1efde7185a94f 100644 --- a/api_docs/expression_reveal_image.mdx +++ b/api_docs/expression_reveal_image.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/expressionRevealImage title: "expressionRevealImage" image: https://source.unsplash.com/400x175/?github summary: API docs for the expressionRevealImage plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionRevealImage'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/expression_shape.mdx b/api_docs/expression_shape.mdx index ec420ee0a5c5b..cd22557118dfd 100644 --- a/api_docs/expression_shape.mdx +++ b/api_docs/expression_shape.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/expressionShape title: "expressionShape" image: https://source.unsplash.com/400x175/?github summary: API docs for the expressionShape plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionShape'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/expression_tagcloud.mdx b/api_docs/expression_tagcloud.mdx index 19139335ba9cd..083ed5e42d5a5 100644 --- a/api_docs/expression_tagcloud.mdx +++ b/api_docs/expression_tagcloud.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/expressionTagcloud title: "expressionTagcloud" image: https://source.unsplash.com/400x175/?github summary: API docs for the expressionTagcloud plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionTagcloud'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/expression_x_y.mdx b/api_docs/expression_x_y.mdx index fa0985f05dd16..ebeb5a6a6c320 100644 --- a/api_docs/expression_x_y.mdx +++ b/api_docs/expression_x_y.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/expressionXY title: "expressionXY" image: https://source.unsplash.com/400x175/?github summary: API docs for the expressionXY plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionXY'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/expressions.devdocs.json b/api_docs/expressions.devdocs.json index debb0fcd46543..5a5acc6595d1b 100644 --- a/api_docs/expressions.devdocs.json +++ b/api_docs/expressions.devdocs.json @@ -7953,7 +7953,7 @@ }, { "plugin": "canvas", - "path": "x-pack/plugins/canvas/canvas_plugin_src/functions/server/pointseries/index.ts" + "path": "x-pack/plugins/canvas/canvas_plugin_src/functions/browser/escount.ts" }, { "plugin": "canvas", @@ -7961,11 +7961,11 @@ }, { "plugin": "canvas", - "path": "x-pack/plugins/canvas/canvas_plugin_src/functions/browser/escount.ts" + "path": "x-pack/plugins/canvas/canvas_plugin_src/functions/common/neq.ts" }, { "plugin": "canvas", - "path": "x-pack/plugins/canvas/canvas_plugin_src/functions/common/neq.ts" + "path": "x-pack/plugins/canvas/canvas_plugin_src/functions/server/pointseries/index.ts" }, { "plugin": "visTypeXy", @@ -11874,10 +11874,6 @@ "path": "src/plugins/expressions/common/service/expressions_services.ts", "deprecated": true, "references": [ - { - "plugin": "canvas", - "path": "x-pack/plugins/canvas/public/application.tsx" - }, { "plugin": "canvas", "path": "x-pack/plugins/canvas/server/routes/functions/functions.ts" @@ -18378,7 +18374,7 @@ }, { "plugin": "canvas", - "path": "x-pack/plugins/canvas/canvas_plugin_src/functions/server/pointseries/index.ts" + "path": "x-pack/plugins/canvas/canvas_plugin_src/functions/browser/escount.ts" }, { "plugin": "canvas", @@ -18386,11 +18382,11 @@ }, { "plugin": "canvas", - "path": "x-pack/plugins/canvas/canvas_plugin_src/functions/browser/escount.ts" + "path": "x-pack/plugins/canvas/canvas_plugin_src/functions/common/neq.ts" }, { "plugin": "canvas", - "path": "x-pack/plugins/canvas/canvas_plugin_src/functions/common/neq.ts" + "path": "x-pack/plugins/canvas/canvas_plugin_src/functions/server/pointseries/index.ts" }, { "plugin": "visTypeXy", @@ -30181,7 +30177,7 @@ }, { "plugin": "canvas", - "path": "x-pack/plugins/canvas/canvas_plugin_src/functions/server/pointseries/index.ts" + "path": "x-pack/plugins/canvas/canvas_plugin_src/functions/browser/escount.ts" }, { "plugin": "canvas", @@ -30189,11 +30185,11 @@ }, { "plugin": "canvas", - "path": "x-pack/plugins/canvas/canvas_plugin_src/functions/browser/escount.ts" + "path": "x-pack/plugins/canvas/canvas_plugin_src/functions/common/neq.ts" }, { "plugin": "canvas", - "path": "x-pack/plugins/canvas/canvas_plugin_src/functions/common/neq.ts" + "path": "x-pack/plugins/canvas/canvas_plugin_src/functions/server/pointseries/index.ts" }, { "plugin": "visTypeXy", @@ -31066,10 +31062,6 @@ "path": "src/plugins/expressions/common/service/expressions_services.ts", "deprecated": true, "references": [ - { - "plugin": "canvas", - "path": "x-pack/plugins/canvas/public/application.tsx" - }, { "plugin": "canvas", "path": "x-pack/plugins/canvas/server/routes/functions/functions.ts" diff --git a/api_docs/expressions.mdx b/api_docs/expressions.mdx index 495ff0029117e..e16ab9f61112c 100644 --- a/api_docs/expressions.mdx +++ b/api_docs/expressions.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/expressions title: "expressions" image: https://source.unsplash.com/400x175/?github summary: API docs for the expressions plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressions'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/features.devdocs.json b/api_docs/features.devdocs.json index 3c5e6d30268ea..64be256167cf0 100644 --- a/api_docs/features.devdocs.json +++ b/api_docs/features.devdocs.json @@ -320,7 +320,7 @@ "references": [ { "plugin": "security", - "path": "x-pack/plugins/security/server/lib/role_utils.ts" + "path": "x-pack/plugins/security/server/authorization/roles/elasticsearch_role.ts" }, { "plugin": "security", @@ -328,7 +328,7 @@ }, { "plugin": "security", - "path": "x-pack/plugins/security/server/authorization/roles/elasticsearch_role.ts" + "path": "x-pack/plugins/security/server/lib/role_utils.ts" }, { "plugin": "security", @@ -1554,7 +1554,7 @@ "references": [ { "plugin": "security", - "path": "x-pack/plugins/security/server/lib/role_utils.ts" + "path": "x-pack/plugins/security/server/authorization/roles/elasticsearch_role.ts" }, { "plugin": "security", @@ -1562,7 +1562,7 @@ }, { "plugin": "security", - "path": "x-pack/plugins/security/server/authorization/roles/elasticsearch_role.ts" + "path": "x-pack/plugins/security/server/lib/role_utils.ts" }, { "plugin": "security", @@ -3254,7 +3254,7 @@ "references": [ { "plugin": "security", - "path": "x-pack/plugins/security/server/lib/role_utils.ts" + "path": "x-pack/plugins/security/server/authorization/roles/elasticsearch_role.ts" }, { "plugin": "security", @@ -3262,7 +3262,7 @@ }, { "plugin": "security", - "path": "x-pack/plugins/security/server/authorization/roles/elasticsearch_role.ts" + "path": "x-pack/plugins/security/server/lib/role_utils.ts" }, { "plugin": "security", diff --git a/api_docs/features.mdx b/api_docs/features.mdx index 81da435cc1883..c08f02b79acce 100644 --- a/api_docs/features.mdx +++ b/api_docs/features.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/features title: "features" image: https://source.unsplash.com/400x175/?github summary: API docs for the features plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'features'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/field_formats.mdx b/api_docs/field_formats.mdx index e4716963a319a..39b4434d80a71 100644 --- a/api_docs/field_formats.mdx +++ b/api_docs/field_formats.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/fieldFormats title: "fieldFormats" image: https://source.unsplash.com/400x175/?github summary: API docs for the fieldFormats plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fieldFormats'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/file_upload.mdx b/api_docs/file_upload.mdx index 1e4f1b75f78ad..aaf2ff28bf05e 100644 --- a/api_docs/file_upload.mdx +++ b/api_docs/file_upload.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/fileUpload title: "fileUpload" image: https://source.unsplash.com/400x175/?github summary: API docs for the fileUpload plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fileUpload'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/fleet.devdocs.json b/api_docs/fleet.devdocs.json index b4c9f70575844..710982e7065b1 100644 --- a/api_docs/fleet.devdocs.json +++ b/api_docs/fleet.devdocs.json @@ -11154,7 +11154,7 @@ { "parentPluginId": "fleet", "id": "def-common.CreatePackagePolicyRequest.body", - "type": "Object", + "type": "CompoundType", "tags": [], "label": "body", "description": [], @@ -11165,7 +11165,8 @@ "docId": "kibFleetPluginApi", "section": "def-common.NewPackagePolicy", "text": "NewPackagePolicy" - } + }, + " & { force?: boolean | undefined; }" ], "path": "x-pack/plugins/fleet/common/types/rest_spec/package_policy.ts", "deprecated": false @@ -13831,6 +13832,32 @@ ], "initialIsOpen": false }, + { + "parentPluginId": "fleet", + "id": "def-common.GetAgentTagsResponse", + "type": "Interface", + "tags": [], + "label": "GetAgentTagsResponse", + "description": [], + "path": "x-pack/plugins/fleet/common/types/rest_spec/agent.ts", + "deprecated": false, + "children": [ + { + "parentPluginId": "fleet", + "id": "def-common.GetAgentTagsResponse.items", + "type": "Array", + "tags": [], + "label": "items", + "description": [], + "signature": [ + "string[]" + ], + "path": "x-pack/plugins/fleet/common/types/rest_spec/agent.ts", + "deprecated": false + } + ], + "initialIsOpen": false + }, { "parentPluginId": "fleet", "id": "def-common.GetCategoriesRequest", @@ -20248,7 +20275,7 @@ "section": "def-common.ValueOf", "text": "ValueOf" }, - "<{ readonly Active: \"active\"; readonly Inactive: \"inactive\"; }>; name: string; description?: string | undefined; updated_at: string; namespace: string; updated_by: string; is_managed: boolean; is_default?: boolean | undefined; is_default_fleet_server?: boolean | undefined; has_fleet_server?: boolean | undefined; monitoring_enabled?: (\"metrics\" | \"logs\")[] | undefined; unenroll_timeout?: number | undefined; is_preconfigured?: boolean | undefined; data_output_id?: string | null | undefined; monitoring_output_id?: string | null | undefined; download_source_id?: string | null | undefined; package_policies: string[] | ", + "<{ readonly Active: \"active\"; readonly Inactive: \"inactive\"; }>; name: string; namespace: string; description?: string | undefined; updated_at: string; updated_by: string; is_managed: boolean; is_default?: boolean | undefined; is_default_fleet_server?: boolean | undefined; has_fleet_server?: boolean | undefined; monitoring_enabled?: (\"metrics\" | \"logs\")[] | undefined; unenroll_timeout?: number | undefined; is_preconfigured?: boolean | undefined; data_output_id?: string | null | undefined; monitoring_output_id?: string | null | undefined; download_source_id?: string | null | undefined; package_policies: string[] | ", { "pluginId": "fleet", "scope": "common", @@ -22295,7 +22322,7 @@ "label": "PackagePolicySOAttributes", "description": [], "signature": [ - "{ name: string; package?: ", + "{ name: string; namespace: string; package?: ", { "pluginId": "fleet", "scope": "common", @@ -22303,7 +22330,7 @@ "section": "def-common.PackagePolicyPackage", "text": "PackagePolicyPackage" }, - " | undefined; description?: string | undefined; enabled: boolean; updated_at: string; namespace: string; created_at: string; created_by: string; updated_by: string; vars?: ", + " | undefined; description?: string | undefined; enabled: boolean; updated_at: string; created_at: string; created_by: string; updated_by: string; vars?: ", { "pluginId": "fleet", "scope": "common", @@ -23225,6 +23252,16 @@ "description": [], "path": "x-pack/plugins/fleet/common/constants/routes.ts", "deprecated": false + }, + { + "parentPluginId": "fleet", + "id": "def-common.AGENT_API_ROUTES.LIST_TAGS_PATTERN", + "type": "string", + "tags": [], + "label": "LIST_TAGS_PATTERN", + "description": [], + "path": "x-pack/plugins/fleet/common/constants/routes.ts", + "deprecated": false } ], "initialIsOpen": false @@ -23972,6 +24009,21 @@ } ], "returnComment": [] + }, + { + "parentPluginId": "fleet", + "id": "def-common.agentRouteService.getListTagsPath", + "type": "Function", + "tags": [], + "label": "getListTagsPath", + "description": [], + "signature": [ + "() => string" + ], + "path": "x-pack/plugins/fleet/common/services/routes.ts", + "deprecated": false, + "children": [], + "returnComment": [] } ], "initialIsOpen": false diff --git a/api_docs/fleet.mdx b/api_docs/fleet.mdx index 673ffd7bc97fb..198b522880ac4 100644 --- a/api_docs/fleet.mdx +++ b/api_docs/fleet.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/fleet title: "fleet" image: https://source.unsplash.com/400x175/?github summary: API docs for the fleet plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fleet'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- @@ -18,7 +18,7 @@ Contact [Fleet](https://github.com/orgs/elastic/teams/fleet) for questions regar | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 1537 | 8 | 1405 | 10 | +| 1541 | 8 | 1409 | 10 | ## Client diff --git a/api_docs/global_search.mdx b/api_docs/global_search.mdx index 1397a035d6aa9..138d9292e017c 100644 --- a/api_docs/global_search.mdx +++ b/api_docs/global_search.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/globalSearch title: "globalSearch" image: https://source.unsplash.com/400x175/?github summary: API docs for the globalSearch plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'globalSearch'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/home.mdx b/api_docs/home.mdx index fb3cb37e32840..469f76a82daa7 100644 --- a/api_docs/home.mdx +++ b/api_docs/home.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/home title: "home" image: https://source.unsplash.com/400x175/?github summary: API docs for the home plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'home'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/index_lifecycle_management.mdx b/api_docs/index_lifecycle_management.mdx index 5a2f6de2a153b..d750ba0bfedf6 100644 --- a/api_docs/index_lifecycle_management.mdx +++ b/api_docs/index_lifecycle_management.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/indexLifecycleManagement title: "indexLifecycleManagement" image: https://source.unsplash.com/400x175/?github summary: API docs for the indexLifecycleManagement plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'indexLifecycleManagement'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/index_management.mdx b/api_docs/index_management.mdx index d45b99ea439d5..fa4c82bfc3692 100644 --- a/api_docs/index_management.mdx +++ b/api_docs/index_management.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/indexManagement title: "indexManagement" image: https://source.unsplash.com/400x175/?github summary: API docs for the indexManagement plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'indexManagement'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/infra.mdx b/api_docs/infra.mdx index 3cfb85eb02149..ad8d9532d9448 100644 --- a/api_docs/infra.mdx +++ b/api_docs/infra.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/infra title: "infra" image: https://source.unsplash.com/400x175/?github summary: API docs for the infra plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'infra'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/inspector.mdx b/api_docs/inspector.mdx index f1ab6a34dca51..8d198076655b8 100644 --- a/api_docs/inspector.mdx +++ b/api_docs/inspector.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/inspector title: "inspector" image: https://source.unsplash.com/400x175/?github summary: API docs for the inspector plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'inspector'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/interactive_setup.mdx b/api_docs/interactive_setup.mdx index 1057cd01ec9c7..03596635b7803 100644 --- a/api_docs/interactive_setup.mdx +++ b/api_docs/interactive_setup.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/interactiveSetup title: "interactiveSetup" image: https://source.unsplash.com/400x175/?github summary: API docs for the interactiveSetup plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'interactiveSetup'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_ace.mdx b/api_docs/kbn_ace.mdx index 1f538f24ff5ce..4f6918007222f 100644 --- a/api_docs/kbn_ace.mdx +++ b/api_docs/kbn_ace.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-ace title: "@kbn/ace" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/ace plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ace'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_aiops_components.mdx b/api_docs/kbn_aiops_components.mdx index 2f3e318399ca9..53b75509415c7 100644 --- a/api_docs/kbn_aiops_components.mdx +++ b/api_docs/kbn_aiops_components.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-components title: "@kbn/aiops-components" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/aiops-components plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-components'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_aiops_utils.mdx b/api_docs/kbn_aiops_utils.mdx index a4364b69bf804..93bdadf5e3c98 100644 --- a/api_docs/kbn_aiops_utils.mdx +++ b/api_docs/kbn_aiops_utils.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-utils title: "@kbn/aiops-utils" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/aiops-utils plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-utils'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_alerts.mdx b/api_docs/kbn_alerts.mdx index 8237e1823c1e2..82a0831707ec3 100644 --- a/api_docs/kbn_alerts.mdx +++ b/api_docs/kbn_alerts.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-alerts title: "@kbn/alerts" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/alerts plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_analytics.mdx b/api_docs/kbn_analytics.mdx index bcbcd23d29d5d..8cd6863bcc014 100644 --- a/api_docs/kbn_analytics.mdx +++ b/api_docs/kbn_analytics.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-analytics title: "@kbn/analytics" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/analytics plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_analytics_client.mdx b/api_docs/kbn_analytics_client.mdx index 8c17f5eea1c48..427df038bf768 100644 --- a/api_docs/kbn_analytics_client.mdx +++ b/api_docs/kbn_analytics_client.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-client title: "@kbn/analytics-client" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/analytics-client plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-client'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx index 58f9460e8cc34..174b74afb37d6 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx @@ -4,7 +4,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 summary: API docs for the @kbn/analytics-shippers-elastic-v3-browser plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-elastic-v3-browser'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx index b9c6c63a52837..839d8440fa084 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx @@ -4,7 +4,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 summary: API docs for the @kbn/analytics-shippers-elastic-v3-common plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-elastic-v3-common'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx index 5760168691ff5..a9f334faae6cc 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx @@ -4,7 +4,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 summary: API docs for the @kbn/analytics-shippers-elastic-v3-server plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-elastic-v3-server'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_analytics_shippers_fullstory.mdx b/api_docs/kbn_analytics_shippers_fullstory.mdx index 84dd085574922..be6aa8a761dcc 100644 --- a/api_docs/kbn_analytics_shippers_fullstory.mdx +++ b/api_docs/kbn_analytics_shippers_fullstory.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-fullstory title: "@kbn/analytics-shippers-fullstory" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/analytics-shippers-fullstory plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-fullstory'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_apm_config_loader.mdx b/api_docs/kbn_apm_config_loader.mdx index c2eb0136d6093..b451b5caab525 100644 --- a/api_docs/kbn_apm_config_loader.mdx +++ b/api_docs/kbn_apm_config_loader.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-apm-config-loader title: "@kbn/apm-config-loader" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/apm-config-loader plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-config-loader'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_apm_utils.mdx b/api_docs/kbn_apm_utils.mdx index 460805a5fb39d..410356df20b16 100644 --- a/api_docs/kbn_apm_utils.mdx +++ b/api_docs/kbn_apm_utils.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-apm-utils title: "@kbn/apm-utils" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/apm-utils plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-utils'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_axe_config.mdx b/api_docs/kbn_axe_config.mdx index 13f5bbd65400e..3be0a54d0c062 100644 --- a/api_docs/kbn_axe_config.mdx +++ b/api_docs/kbn_axe_config.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-axe-config title: "@kbn/axe-config" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/axe-config plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/axe-config'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_bazel_packages.mdx b/api_docs/kbn_bazel_packages.mdx index 6444e34bdf4d7..f8fbdf71d00ec 100644 --- a/api_docs/kbn_bazel_packages.mdx +++ b/api_docs/kbn_bazel_packages.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-bazel-packages title: "@kbn/bazel-packages" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/bazel-packages plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/bazel-packages'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_ci_stats_core.mdx b/api_docs/kbn_ci_stats_core.mdx index 81fad440a6c28..9315de94d343b 100644 --- a/api_docs/kbn_ci_stats_core.mdx +++ b/api_docs/kbn_ci_stats_core.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-core title: "@kbn/ci-stats-core" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/ci-stats-core plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ci-stats-core'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_ci_stats_performance_metrics.mdx b/api_docs/kbn_ci_stats_performance_metrics.mdx index 8191aa89ffd1f..2cce41bb2f569 100644 --- a/api_docs/kbn_ci_stats_performance_metrics.mdx +++ b/api_docs/kbn_ci_stats_performance_metrics.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-performance-metrics title: "@kbn/ci-stats-performance-metrics" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/ci-stats-performance-metrics plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ci-stats-performance-metrics'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_ci_stats_reporter.mdx b/api_docs/kbn_ci_stats_reporter.mdx index c64b5c3265c9d..2ceb66379377d 100644 --- a/api_docs/kbn_ci_stats_reporter.mdx +++ b/api_docs/kbn_ci_stats_reporter.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-reporter title: "@kbn/ci-stats-reporter" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/ci-stats-reporter plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ci-stats-reporter'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_cli_dev_mode.mdx b/api_docs/kbn_cli_dev_mode.mdx index 0344d2f8611a1..3a84b45e49a40 100644 --- a/api_docs/kbn_cli_dev_mode.mdx +++ b/api_docs/kbn_cli_dev_mode.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-cli-dev-mode title: "@kbn/cli-dev-mode" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/cli-dev-mode plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cli-dev-mode'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_coloring.mdx b/api_docs/kbn_coloring.mdx index 7aebcd60f94e7..3fafe1b2a4f60 100644 --- a/api_docs/kbn_coloring.mdx +++ b/api_docs/kbn_coloring.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-coloring title: "@kbn/coloring" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/coloring plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/coloring'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_config.mdx b/api_docs/kbn_config.mdx index ea3fdb7278815..04931728e3bcc 100644 --- a/api_docs/kbn_config.mdx +++ b/api_docs/kbn_config.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-config title: "@kbn/config" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/config plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/config'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_config_mocks.mdx b/api_docs/kbn_config_mocks.mdx index 6abf693f2b890..28d11c965e04d 100644 --- a/api_docs/kbn_config_mocks.mdx +++ b/api_docs/kbn_config_mocks.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-config-mocks title: "@kbn/config-mocks" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/config-mocks plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/config-mocks'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_config_schema.mdx b/api_docs/kbn_config_schema.mdx index f74c5c397e633..a2344d9e96931 100644 --- a/api_docs/kbn_config_schema.mdx +++ b/api_docs/kbn_config_schema.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-config-schema title: "@kbn/config-schema" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/config-schema plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/config-schema'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_analytics_browser.mdx b/api_docs/kbn_core_analytics_browser.mdx index 1b0bff6e47699..4525e1515ef38 100644 --- a/api_docs/kbn_core_analytics_browser.mdx +++ b/api_docs/kbn_core_analytics_browser.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser title: "@kbn/core-analytics-browser" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-analytics-browser plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-browser'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_analytics_browser_internal.mdx b/api_docs/kbn_core_analytics_browser_internal.mdx index 802f2afde9052..523927d717040 100644 --- a/api_docs/kbn_core_analytics_browser_internal.mdx +++ b/api_docs/kbn_core_analytics_browser_internal.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser-internal title: "@kbn/core-analytics-browser-internal" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-analytics-browser-internal plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-browser-internal'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_analytics_browser_mocks.mdx b/api_docs/kbn_core_analytics_browser_mocks.mdx index ba9648170c925..a511e020de5e3 100644 --- a/api_docs/kbn_core_analytics_browser_mocks.mdx +++ b/api_docs/kbn_core_analytics_browser_mocks.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser-mocks title: "@kbn/core-analytics-browser-mocks" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-analytics-browser-mocks plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-browser-mocks'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_analytics_server.mdx b/api_docs/kbn_core_analytics_server.mdx index abf6ecd29afed..9f290e7ea5e22 100644 --- a/api_docs/kbn_core_analytics_server.mdx +++ b/api_docs/kbn_core_analytics_server.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server title: "@kbn/core-analytics-server" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-analytics-server plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-server'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_analytics_server_internal.mdx b/api_docs/kbn_core_analytics_server_internal.mdx index 9f3757ecd60fe..351a210df51b5 100644 --- a/api_docs/kbn_core_analytics_server_internal.mdx +++ b/api_docs/kbn_core_analytics_server_internal.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server-internal title: "@kbn/core-analytics-server-internal" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-analytics-server-internal plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-server-internal'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_analytics_server_mocks.mdx b/api_docs/kbn_core_analytics_server_mocks.mdx index 9214d4630d364..081177c99a98f 100644 --- a/api_docs/kbn_core_analytics_server_mocks.mdx +++ b/api_docs/kbn_core_analytics_server_mocks.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server-mocks title: "@kbn/core-analytics-server-mocks" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-analytics-server-mocks plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-server-mocks'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_base_browser_mocks.mdx b/api_docs/kbn_core_base_browser_mocks.mdx index 995f3f40a3c43..ed0b71bac6f13 100644 --- a/api_docs/kbn_core_base_browser_mocks.mdx +++ b/api_docs/kbn_core_base_browser_mocks.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-browser-mocks title: "@kbn/core-base-browser-mocks" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-base-browser-mocks plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-base-browser-mocks'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_base_common.mdx b/api_docs/kbn_core_base_common.mdx index 6043b49384639..bf48dca91867e 100644 --- a/api_docs/kbn_core_base_common.mdx +++ b/api_docs/kbn_core_base_common.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-common title: "@kbn/core-base-common" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-base-common plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-base-common'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_base_server_internal.mdx b/api_docs/kbn_core_base_server_internal.mdx index 1770d4fb9bffb..8c26ec9f48f2c 100644 --- a/api_docs/kbn_core_base_server_internal.mdx +++ b/api_docs/kbn_core_base_server_internal.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-server-internal title: "@kbn/core-base-server-internal" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-base-server-internal plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-base-server-internal'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_base_server_mocks.mdx b/api_docs/kbn_core_base_server_mocks.mdx index 91ca0d26a1d91..9bc5edb9166ec 100644 --- a/api_docs/kbn_core_base_server_mocks.mdx +++ b/api_docs/kbn_core_base_server_mocks.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-server-mocks title: "@kbn/core-base-server-mocks" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-base-server-mocks plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-base-server-mocks'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_config_server_internal.mdx b/api_docs/kbn_core_config_server_internal.mdx index a9ae9a29cea73..b3bef97d2a0b2 100644 --- a/api_docs/kbn_core_config_server_internal.mdx +++ b/api_docs/kbn_core_config_server_internal.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-config-server-internal title: "@kbn/core-config-server-internal" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-config-server-internal plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-config-server-internal'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_deprecations_browser.mdx b/api_docs/kbn_core_deprecations_browser.mdx index 2588bd484a5e7..a47eb8f892514 100644 --- a/api_docs/kbn_core_deprecations_browser.mdx +++ b/api_docs/kbn_core_deprecations_browser.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser title: "@kbn/core-deprecations-browser" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-deprecations-browser plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-browser'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_deprecations_browser_internal.mdx b/api_docs/kbn_core_deprecations_browser_internal.mdx index 0ccb7015ddc6d..6b70841c7c44f 100644 --- a/api_docs/kbn_core_deprecations_browser_internal.mdx +++ b/api_docs/kbn_core_deprecations_browser_internal.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser-internal title: "@kbn/core-deprecations-browser-internal" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-deprecations-browser-internal plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-browser-internal'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_deprecations_browser_mocks.mdx b/api_docs/kbn_core_deprecations_browser_mocks.mdx index 9d003ec4cc742..12bcfdf0d9b0d 100644 --- a/api_docs/kbn_core_deprecations_browser_mocks.mdx +++ b/api_docs/kbn_core_deprecations_browser_mocks.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser-mocks title: "@kbn/core-deprecations-browser-mocks" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-deprecations-browser-mocks plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-browser-mocks'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_deprecations_common.mdx b/api_docs/kbn_core_deprecations_common.mdx index be6e6e89eccc6..e6b4ba595ed11 100644 --- a/api_docs/kbn_core_deprecations_common.mdx +++ b/api_docs/kbn_core_deprecations_common.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-common title: "@kbn/core-deprecations-common" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-deprecations-common plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-common'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_doc_links_browser.mdx b/api_docs/kbn_core_doc_links_browser.mdx index 3c13531c11286..0b432ea64e157 100644 --- a/api_docs/kbn_core_doc_links_browser.mdx +++ b/api_docs/kbn_core_doc_links_browser.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-browser title: "@kbn/core-doc-links-browser" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-doc-links-browser plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-doc-links-browser'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_doc_links_browser_mocks.mdx b/api_docs/kbn_core_doc_links_browser_mocks.mdx index a48729d788b48..58fc41442e071 100644 --- a/api_docs/kbn_core_doc_links_browser_mocks.mdx +++ b/api_docs/kbn_core_doc_links_browser_mocks.mdx @@ -4,7 +4,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 summary: API docs for the @kbn/core-doc-links-browser-mocks plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-doc-links-browser-mocks'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_doc_links_server.mdx b/api_docs/kbn_core_doc_links_server.mdx index 7ec4297504729..c9473e051533a 100644 --- a/api_docs/kbn_core_doc_links_server.mdx +++ b/api_docs/kbn_core_doc_links_server.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-server title: "@kbn/core-doc-links-server" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-doc-links-server plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-doc-links-server'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_doc_links_server_mocks.mdx b/api_docs/kbn_core_doc_links_server_mocks.mdx index b3d7b83af1675..4bc5144dee9c5 100644 --- a/api_docs/kbn_core_doc_links_server_mocks.mdx +++ b/api_docs/kbn_core_doc_links_server_mocks.mdx @@ -4,7 +4,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 summary: API docs for the @kbn/core-doc-links-server-mocks plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-doc-links-server-mocks'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_elasticsearch_client_server_internal.mdx b/api_docs/kbn_core_elasticsearch_client_server_internal.mdx index ac9f3dd92cb5b..436a19133c04d 100644 --- a/api_docs/kbn_core_elasticsearch_client_server_internal.mdx +++ b/api_docs/kbn_core_elasticsearch_client_server_internal.mdx @@ -4,7 +4,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 summary: API docs for the @kbn/core-elasticsearch-client-server-internal plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-client-server-internal'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_elasticsearch_client_server_mocks.devdocs.json b/api_docs/kbn_core_elasticsearch_client_server_mocks.devdocs.json index 5c8e817862e05..6c37dcaa78b83 100644 --- a/api_docs/kbn_core_elasticsearch_client_server_mocks.devdocs.json +++ b/api_docs/kbn_core_elasticsearch_client_server_mocks.devdocs.json @@ -251,7 +251,17 @@ "SearchRequest", " | undefined, options?: ", "TransportRequestOptions", - " | undefined]>; eql: ", + " | undefined]>; cluster: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "server", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-server.DeeplyMockedApi", + "text": "DeeplyMockedApi" + }, + "<", + "default", + ">; eql: ", { "pluginId": "@kbn/core-elasticsearch-client-server-mocks", "scope": "server", @@ -491,17 +501,7 @@ "ClearScrollRequest", " | undefined, options?: ", "TransportRequestOptions", - " | undefined]>; cluster: ", - { - "pluginId": "@kbn/core-elasticsearch-client-server-mocks", - "scope": "server", - "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", - "section": "def-server.DeeplyMockedApi", - "text": "DeeplyMockedApi" - }, - "<", - "default", - ">; count: ", + " | undefined]>; count: ", { "pluginId": "@kbn/core-elasticsearch-client-server-mocks", "scope": "server", @@ -1359,7 +1359,17 @@ "SearchRequest", " | undefined, options?: ", "TransportRequestOptions", - " | undefined]>; eql: ", + " | undefined]>; cluster: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "server", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-server.DeeplyMockedApi", + "text": "DeeplyMockedApi" + }, + "<", + "default", + ">; eql: ", { "pluginId": "@kbn/core-elasticsearch-client-server-mocks", "scope": "server", @@ -1599,17 +1609,7 @@ "ClearScrollRequest", " | undefined, options?: ", "TransportRequestOptions", - " | undefined]>; cluster: ", - { - "pluginId": "@kbn/core-elasticsearch-client-server-mocks", - "scope": "server", - "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", - "section": "def-server.DeeplyMockedApi", - "text": "DeeplyMockedApi" - }, - "<", - "default", - ">; count: ", + " | undefined]>; count: ", { "pluginId": "@kbn/core-elasticsearch-client-server-mocks", "scope": "server", @@ -2423,7 +2423,17 @@ "SearchRequest", " | undefined, options?: ", "TransportRequestOptions", - " | undefined]>; eql: ", + " | undefined]>; cluster: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "server", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-server.DeeplyMockedApi", + "text": "DeeplyMockedApi" + }, + "<", + "default", + ">; eql: ", { "pluginId": "@kbn/core-elasticsearch-client-server-mocks", "scope": "server", @@ -2663,17 +2673,7 @@ "ClearScrollRequest", " | undefined, options?: ", "TransportRequestOptions", - " | undefined]>; cluster: ", - { - "pluginId": "@kbn/core-elasticsearch-client-server-mocks", - "scope": "server", - "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", - "section": "def-server.DeeplyMockedApi", - "text": "DeeplyMockedApi" - }, - "<", - "default", - ">; count: ", + " | undefined]>; count: ", { "pluginId": "@kbn/core-elasticsearch-client-server-mocks", "scope": "server", @@ -3552,7 +3552,17 @@ "SearchRequest", " | undefined, options?: ", "TransportRequestOptions", - " | undefined]>; eql: ", + " | undefined]>; cluster: ", + { + "pluginId": "@kbn/core-elasticsearch-client-server-mocks", + "scope": "server", + "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", + "section": "def-server.DeeplyMockedApi", + "text": "DeeplyMockedApi" + }, + "<", + "default", + ">; eql: ", { "pluginId": "@kbn/core-elasticsearch-client-server-mocks", "scope": "server", @@ -3792,17 +3802,7 @@ "ClearScrollRequest", " | undefined, options?: ", "TransportRequestOptions", - " | undefined]>; cluster: ", - { - "pluginId": "@kbn/core-elasticsearch-client-server-mocks", - "scope": "server", - "docId": "kibKbnCoreElasticsearchClientServerMocksPluginApi", - "section": "def-server.DeeplyMockedApi", - "text": "DeeplyMockedApi" - }, - "<", - "default", - ">; count: ", + " | undefined]>; count: ", { "pluginId": "@kbn/core-elasticsearch-client-server-mocks", "scope": "server", diff --git a/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx b/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx index ce313726ce4ec..3f8bdb1ccc5e7 100644 --- a/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx +++ b/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx @@ -4,7 +4,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 summary: API docs for the @kbn/core-elasticsearch-client-server-mocks plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-client-server-mocks'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_elasticsearch_server.devdocs.json b/api_docs/kbn_core_elasticsearch_server.devdocs.json index 34fcca1ce932d..c15c677a756a6 100644 --- a/api_docs/kbn_core_elasticsearch_server.devdocs.json +++ b/api_docs/kbn_core_elasticsearch_server.devdocs.json @@ -864,7 +864,9 @@ "TransportRequestOptions", " | undefined): Promise<", "SearchResponse", - ">; }; eql: ", + ">; }; cluster: ", + "default", + "; eql: ", "default", "; create: { (this: That, params: ", "CreateRequest", @@ -1096,9 +1098,7 @@ "TransportRequestOptions", " | undefined): Promise<", "ClearScrollResponse", - ">; }; cluster: ", - "default", - "; count: { (this: That, params?: ", + ">; }; count: { (this: That, params?: ", "CountRequest", " | ", "CountRequest", @@ -2455,7 +2455,9 @@ "TransportRequestOptions", " | undefined): Promise<", "SearchResponse", - ">; }; eql: ", + ">; }; cluster: ", + "default", + "; eql: ", "default", "; create: { (this: That, params: ", "CreateRequest", @@ -2687,9 +2689,7 @@ "TransportRequestOptions", " | undefined): Promise<", "ClearScrollResponse", - ">; }; cluster: ", - "default", - "; count: { (this: That, params?: ", + ">; }; count: { (this: That, params?: ", "CountRequest", " | ", "CountRequest", @@ -3658,7 +3658,9 @@ "TransportRequestOptions", " | undefined): Promise<", "SearchResponse", - ">; }; eql: ", + ">; }; cluster: ", + "default", + "; eql: ", "default", "; create: { (this: That, params: ", "CreateRequest", @@ -3890,9 +3892,7 @@ "TransportRequestOptions", " | undefined): Promise<", "ClearScrollResponse", - ">; }; cluster: ", - "default", - "; count: { (this: That, params?: ", + ">; }; count: { (this: That, params?: ", "CountRequest", " | ", "CountRequest", @@ -5095,7 +5095,9 @@ "TransportRequestOptions", " | undefined): Promise<", "SearchResponse", - ">; }; eql: ", + ">; }; cluster: ", + "default", + "; eql: ", "default", "; create: { (this: That, params: ", "CreateRequest", @@ -5327,9 +5329,7 @@ "TransportRequestOptions", " | undefined): Promise<", "ClearScrollResponse", - ">; }; cluster: ", - "default", - "; count: { (this: That, params?: ", + ">; }; count: { (this: That, params?: ", "CountRequest", " | ", "CountRequest", diff --git a/api_docs/kbn_core_elasticsearch_server.mdx b/api_docs/kbn_core_elasticsearch_server.mdx index 4f54deec4a46f..38c2f52355da8 100644 --- a/api_docs/kbn_core_elasticsearch_server.mdx +++ b/api_docs/kbn_core_elasticsearch_server.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server title: "@kbn/core-elasticsearch-server" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-elasticsearch-server plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-server'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_elasticsearch_server_internal.devdocs.json b/api_docs/kbn_core_elasticsearch_server_internal.devdocs.json index 90140f7c867b8..5575c998117a1 100644 --- a/api_docs/kbn_core_elasticsearch_server_internal.devdocs.json +++ b/api_docs/kbn_core_elasticsearch_server_internal.devdocs.json @@ -78,7 +78,9 @@ "TransportRequestOptions", " | undefined): Promise<", "SearchResponse", - ">; }; eql: ", + ">; }; cluster: ", + "default", + "; eql: ", "default", "; create: { (this: That, params: ", "CreateRequest", @@ -310,9 +312,7 @@ "TransportRequestOptions", " | undefined): Promise<", "ClearScrollResponse", - ">; }; cluster: ", - "default", - "; count: { (this: That, params?: ", + ">; }; count: { (this: That, params?: ", "CountRequest", " | ", "CountRequest", @@ -1637,7 +1637,9 @@ "TransportRequestOptions", " | undefined): Promise<", "SearchResponse", - ">; }; eql: ", + ">; }; cluster: ", + "default", + "; eql: ", "default", "; create: { (this: That, params: ", "CreateRequest", @@ -1869,9 +1871,7 @@ "TransportRequestOptions", " | undefined): Promise<", "ClearScrollResponse", - ">; }; cluster: ", - "default", - "; count: { (this: That, params?: ", + ">; }; count: { (this: That, params?: ", "CountRequest", " | ", "CountRequest", diff --git a/api_docs/kbn_core_elasticsearch_server_internal.mdx b/api_docs/kbn_core_elasticsearch_server_internal.mdx index a245dd8c3e868..8a67fafb0847a 100644 --- a/api_docs/kbn_core_elasticsearch_server_internal.mdx +++ b/api_docs/kbn_core_elasticsearch_server_internal.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server-internal title: "@kbn/core-elasticsearch-server-internal" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-elasticsearch-server-internal plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-server-internal'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_elasticsearch_server_mocks.mdx b/api_docs/kbn_core_elasticsearch_server_mocks.mdx index ea9ee00142b8a..d9330e1d085b9 100644 --- a/api_docs/kbn_core_elasticsearch_server_mocks.mdx +++ b/api_docs/kbn_core_elasticsearch_server_mocks.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server-mocks title: "@kbn/core-elasticsearch-server-mocks" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-elasticsearch-server-mocks plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-server-mocks'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_environment_server_internal.mdx b/api_docs/kbn_core_environment_server_internal.mdx index 4944f90328807..c58cc1053a9e9 100644 --- a/api_docs/kbn_core_environment_server_internal.mdx +++ b/api_docs/kbn_core_environment_server_internal.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-environment-server-internal title: "@kbn/core-environment-server-internal" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-environment-server-internal plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-environment-server-internal'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_environment_server_mocks.mdx b/api_docs/kbn_core_environment_server_mocks.mdx index 816511b4bcc36..ba32b3a98898d 100644 --- a/api_docs/kbn_core_environment_server_mocks.mdx +++ b/api_docs/kbn_core_environment_server_mocks.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-environment-server-mocks title: "@kbn/core-environment-server-mocks" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-environment-server-mocks plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-environment-server-mocks'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_execution_context_browser.mdx b/api_docs/kbn_core_execution_context_browser.mdx index 4f50244edc99d..4b716b687e5d6 100644 --- a/api_docs/kbn_core_execution_context_browser.mdx +++ b/api_docs/kbn_core_execution_context_browser.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser title: "@kbn/core-execution-context-browser" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-execution-context-browser plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-browser'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_execution_context_browser_internal.mdx b/api_docs/kbn_core_execution_context_browser_internal.mdx index a36860b255061..f98309a462f02 100644 --- a/api_docs/kbn_core_execution_context_browser_internal.mdx +++ b/api_docs/kbn_core_execution_context_browser_internal.mdx @@ -4,7 +4,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 summary: API docs for the @kbn/core-execution-context-browser-internal plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-browser-internal'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_execution_context_browser_mocks.mdx b/api_docs/kbn_core_execution_context_browser_mocks.mdx index aacf458110749..57bbe5df972d0 100644 --- a/api_docs/kbn_core_execution_context_browser_mocks.mdx +++ b/api_docs/kbn_core_execution_context_browser_mocks.mdx @@ -4,7 +4,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 summary: API docs for the @kbn/core-execution-context-browser-mocks plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-browser-mocks'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_execution_context_common.mdx b/api_docs/kbn_core_execution_context_common.mdx index 397e43f7e2299..6e01ae5e7e51c 100644 --- a/api_docs/kbn_core_execution_context_common.mdx +++ b/api_docs/kbn_core_execution_context_common.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-common title: "@kbn/core-execution-context-common" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-execution-context-common plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-common'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_execution_context_server.mdx b/api_docs/kbn_core_execution_context_server.mdx index bd9e9f1605d66..95f6819b84693 100644 --- a/api_docs/kbn_core_execution_context_server.mdx +++ b/api_docs/kbn_core_execution_context_server.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server title: "@kbn/core-execution-context-server" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-execution-context-server plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-server'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_execution_context_server_internal.mdx b/api_docs/kbn_core_execution_context_server_internal.mdx index 8464b8aa5b158..97bb66d9bc69d 100644 --- a/api_docs/kbn_core_execution_context_server_internal.mdx +++ b/api_docs/kbn_core_execution_context_server_internal.mdx @@ -4,7 +4,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 summary: API docs for the @kbn/core-execution-context-server-internal plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-server-internal'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_execution_context_server_mocks.mdx b/api_docs/kbn_core_execution_context_server_mocks.mdx index 593fb884cd1cf..c2cc546cb0054 100644 --- a/api_docs/kbn_core_execution_context_server_mocks.mdx +++ b/api_docs/kbn_core_execution_context_server_mocks.mdx @@ -4,7 +4,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 summary: API docs for the @kbn/core-execution-context-server-mocks plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-server-mocks'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_fatal_errors_browser.mdx b/api_docs/kbn_core_fatal_errors_browser.mdx index a75b4c96775df..468fc9c786f5a 100644 --- a/api_docs/kbn_core_fatal_errors_browser.mdx +++ b/api_docs/kbn_core_fatal_errors_browser.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-fatal-errors-browser title: "@kbn/core-fatal-errors-browser" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-fatal-errors-browser plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-fatal-errors-browser'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_fatal_errors_browser_mocks.mdx b/api_docs/kbn_core_fatal_errors_browser_mocks.mdx index bc3abd9f2efaa..34ecaaf215d48 100644 --- a/api_docs/kbn_core_fatal_errors_browser_mocks.mdx +++ b/api_docs/kbn_core_fatal_errors_browser_mocks.mdx @@ -4,7 +4,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 summary: API docs for the @kbn/core-fatal-errors-browser-mocks plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-fatal-errors-browser-mocks'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_http_browser.mdx b/api_docs/kbn_core_http_browser.mdx index ccc8e7c05b72d..f09b679fd8875 100644 --- a/api_docs/kbn_core_http_browser.mdx +++ b/api_docs/kbn_core_http_browser.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser title: "@kbn/core-http-browser" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-http-browser plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-browser'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_http_browser_internal.mdx b/api_docs/kbn_core_http_browser_internal.mdx index f4e6ff72c7448..14c498bf34609 100644 --- a/api_docs/kbn_core_http_browser_internal.mdx +++ b/api_docs/kbn_core_http_browser_internal.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser-internal title: "@kbn/core-http-browser-internal" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-http-browser-internal plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-browser-internal'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_http_browser_mocks.mdx b/api_docs/kbn_core_http_browser_mocks.mdx index 10415ce0daf10..e258b08d0246a 100644 --- a/api_docs/kbn_core_http_browser_mocks.mdx +++ b/api_docs/kbn_core_http_browser_mocks.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser-mocks title: "@kbn/core-http-browser-mocks" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-http-browser-mocks plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-browser-mocks'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_http_common.mdx b/api_docs/kbn_core_http_common.mdx index 65acbf6c0b3c3..8686433f0f5eb 100644 --- a/api_docs/kbn_core_http_common.mdx +++ b/api_docs/kbn_core_http_common.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-common title: "@kbn/core-http-common" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-http-common plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-common'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_http_context_server_mocks.mdx b/api_docs/kbn_core_http_context_server_mocks.mdx index ad51debd76a56..1ca4e94e9e68f 100644 --- a/api_docs/kbn_core_http_context_server_mocks.mdx +++ b/api_docs/kbn_core_http_context_server_mocks.mdx @@ -4,7 +4,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 summary: API docs for the @kbn/core-http-context-server-mocks plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-context-server-mocks'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_http_router_server_internal.mdx b/api_docs/kbn_core_http_router_server_internal.mdx index 60236d487f84a..aed723b666999 100644 --- a/api_docs/kbn_core_http_router_server_internal.mdx +++ b/api_docs/kbn_core_http_router_server_internal.mdx @@ -4,7 +4,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 summary: API docs for the @kbn/core-http-router-server-internal plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-router-server-internal'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_http_router_server_mocks.mdx b/api_docs/kbn_core_http_router_server_mocks.mdx index cf10d83665e90..410841cb60b0e 100644 --- a/api_docs/kbn_core_http_router_server_mocks.mdx +++ b/api_docs/kbn_core_http_router_server_mocks.mdx @@ -4,7 +4,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 summary: API docs for the @kbn/core-http-router-server-mocks plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-router-server-mocks'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_http_server.mdx b/api_docs/kbn_core_http_server.mdx index 356aef7943208..c379244d786c1 100644 --- a/api_docs/kbn_core_http_server.mdx +++ b/api_docs/kbn_core_http_server.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server title: "@kbn/core-http-server" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-http-server plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-server'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_http_server_internal.mdx b/api_docs/kbn_core_http_server_internal.mdx index 0add63b4b81ed..95b48e48c4159 100644 --- a/api_docs/kbn_core_http_server_internal.mdx +++ b/api_docs/kbn_core_http_server_internal.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-internal title: "@kbn/core-http-server-internal" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-http-server-internal plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-server-internal'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_http_server_mocks.mdx b/api_docs/kbn_core_http_server_mocks.mdx index b978ae048a09b..c14b440bd5756 100644 --- a/api_docs/kbn_core_http_server_mocks.mdx +++ b/api_docs/kbn_core_http_server_mocks.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-mocks title: "@kbn/core-http-server-mocks" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-http-server-mocks plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-server-mocks'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_i18n_browser.mdx b/api_docs/kbn_core_i18n_browser.mdx index 44b7bd58b4fbe..fac0f7abc9f2e 100644 --- a/api_docs/kbn_core_i18n_browser.mdx +++ b/api_docs/kbn_core_i18n_browser.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-browser title: "@kbn/core-i18n-browser" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-i18n-browser plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-browser'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_i18n_browser_mocks.mdx b/api_docs/kbn_core_i18n_browser_mocks.mdx index 7a4b1a2682887..d8c92a67a846a 100644 --- a/api_docs/kbn_core_i18n_browser_mocks.mdx +++ b/api_docs/kbn_core_i18n_browser_mocks.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-browser-mocks title: "@kbn/core-i18n-browser-mocks" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-i18n-browser-mocks plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-browser-mocks'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_injected_metadata_browser.mdx b/api_docs/kbn_core_injected_metadata_browser.mdx index df6e704caad33..d0d1c3bf2b36e 100644 --- a/api_docs/kbn_core_injected_metadata_browser.mdx +++ b/api_docs/kbn_core_injected_metadata_browser.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-injected-metadata-browser title: "@kbn/core-injected-metadata-browser" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-injected-metadata-browser plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-injected-metadata-browser'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_injected_metadata_browser_mocks.mdx b/api_docs/kbn_core_injected_metadata_browser_mocks.mdx index a442b21efbc88..1dae921f02232 100644 --- a/api_docs/kbn_core_injected_metadata_browser_mocks.mdx +++ b/api_docs/kbn_core_injected_metadata_browser_mocks.mdx @@ -4,7 +4,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 summary: API docs for the @kbn/core-injected-metadata-browser-mocks plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-injected-metadata-browser-mocks'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_integrations_browser_internal.mdx b/api_docs/kbn_core_integrations_browser_internal.mdx index a18af4967bb96..0bf09bb15b09f 100644 --- a/api_docs/kbn_core_integrations_browser_internal.mdx +++ b/api_docs/kbn_core_integrations_browser_internal.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-integrations-browser-internal title: "@kbn/core-integrations-browser-internal" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-integrations-browser-internal plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-integrations-browser-internal'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_integrations_browser_mocks.mdx b/api_docs/kbn_core_integrations_browser_mocks.mdx index ec0b1925575a6..803a0bc51525e 100644 --- a/api_docs/kbn_core_integrations_browser_mocks.mdx +++ b/api_docs/kbn_core_integrations_browser_mocks.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-integrations-browser-mocks title: "@kbn/core-integrations-browser-mocks" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-integrations-browser-mocks plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-integrations-browser-mocks'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_logging_server.mdx b/api_docs/kbn_core_logging_server.mdx index 35fc812231a86..d5e90ad7448cb 100644 --- a/api_docs/kbn_core_logging_server.mdx +++ b/api_docs/kbn_core_logging_server.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server title: "@kbn/core-logging-server" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-logging-server plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-server'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_logging_server_internal.mdx b/api_docs/kbn_core_logging_server_internal.mdx index 0fb30630f1e4c..bc3703794a115 100644 --- a/api_docs/kbn_core_logging_server_internal.mdx +++ b/api_docs/kbn_core_logging_server_internal.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server-internal title: "@kbn/core-logging-server-internal" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-logging-server-internal plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-server-internal'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_logging_server_mocks.mdx b/api_docs/kbn_core_logging_server_mocks.mdx index bf6eb4ccdc65b..e70c8136502ef 100644 --- a/api_docs/kbn_core_logging_server_mocks.mdx +++ b/api_docs/kbn_core_logging_server_mocks.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server-mocks title: "@kbn/core-logging-server-mocks" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-logging-server-mocks plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-server-mocks'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_node_server.mdx b/api_docs/kbn_core_node_server.mdx index 4f450dcad814a..771481a9866a8 100644 --- a/api_docs/kbn_core_node_server.mdx +++ b/api_docs/kbn_core_node_server.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server title: "@kbn/core-node-server" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-node-server plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-node-server'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_node_server_internal.mdx b/api_docs/kbn_core_node_server_internal.mdx index d0ca7e19a2b23..6e3209cdf3691 100644 --- a/api_docs/kbn_core_node_server_internal.mdx +++ b/api_docs/kbn_core_node_server_internal.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server-internal title: "@kbn/core-node-server-internal" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-node-server-internal plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-node-server-internal'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_node_server_mocks.mdx b/api_docs/kbn_core_node_server_mocks.mdx index 78bba5b5be9c8..e941782524d93 100644 --- a/api_docs/kbn_core_node_server_mocks.mdx +++ b/api_docs/kbn_core_node_server_mocks.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server-mocks title: "@kbn/core-node-server-mocks" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-node-server-mocks plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-node-server-mocks'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_preboot_server.mdx b/api_docs/kbn_core_preboot_server.mdx index 43ac9a0b254ba..4f7f5321339a2 100644 --- a/api_docs/kbn_core_preboot_server.mdx +++ b/api_docs/kbn_core_preboot_server.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-preboot-server title: "@kbn/core-preboot-server" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-preboot-server plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-preboot-server'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_preboot_server_mocks.mdx b/api_docs/kbn_core_preboot_server_mocks.mdx index 286e3baa38e99..e66f371cdd47e 100644 --- a/api_docs/kbn_core_preboot_server_mocks.mdx +++ b/api_docs/kbn_core_preboot_server_mocks.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-preboot-server-mocks title: "@kbn/core-preboot-server-mocks" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-preboot-server-mocks plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-preboot-server-mocks'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- 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 5f53a7d96ad16..bfc04759fd1af 100644 --- a/api_docs/kbn_core_test_helpers_http_setup_browser.mdx +++ b/api_docs/kbn_core_test_helpers_http_setup_browser.mdx @@ -4,7 +4,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 summary: API docs for the @kbn/core-test-helpers-http-setup-browser plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-http-setup-browser'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_theme_browser.mdx b/api_docs/kbn_core_theme_browser.mdx index dc289ede9ef84..4079008bc27fe 100644 --- a/api_docs/kbn_core_theme_browser.mdx +++ b/api_docs/kbn_core_theme_browser.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser title: "@kbn/core-theme-browser" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-theme-browser plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-theme-browser'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_theme_browser_internal.mdx b/api_docs/kbn_core_theme_browser_internal.mdx index 0543918c258f1..65fdd07253d6c 100644 --- a/api_docs/kbn_core_theme_browser_internal.mdx +++ b/api_docs/kbn_core_theme_browser_internal.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser-internal title: "@kbn/core-theme-browser-internal" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-theme-browser-internal plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-theme-browser-internal'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_theme_browser_mocks.mdx b/api_docs/kbn_core_theme_browser_mocks.mdx index 5f542c0148e47..87bba69eee64c 100644 --- a/api_docs/kbn_core_theme_browser_mocks.mdx +++ b/api_docs/kbn_core_theme_browser_mocks.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser-mocks title: "@kbn/core-theme-browser-mocks" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-theme-browser-mocks plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-theme-browser-mocks'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_ui_settings_browser.mdx b/api_docs/kbn_core_ui_settings_browser.mdx index 48b7968f2151e..abbf5fcc84603 100644 --- a/api_docs/kbn_core_ui_settings_browser.mdx +++ b/api_docs/kbn_core_ui_settings_browser.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser title: "@kbn/core-ui-settings-browser" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-ui-settings-browser plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-browser'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_ui_settings_browser_internal.mdx b/api_docs/kbn_core_ui_settings_browser_internal.mdx index 48a062f1b5a5f..447c772e42006 100644 --- a/api_docs/kbn_core_ui_settings_browser_internal.mdx +++ b/api_docs/kbn_core_ui_settings_browser_internal.mdx @@ -4,7 +4,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 summary: API docs for the @kbn/core-ui-settings-browser-internal plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-browser-internal'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_ui_settings_browser_mocks.mdx b/api_docs/kbn_core_ui_settings_browser_mocks.mdx index 7da614bc77c67..35d3dfb6d9491 100644 --- a/api_docs/kbn_core_ui_settings_browser_mocks.mdx +++ b/api_docs/kbn_core_ui_settings_browser_mocks.mdx @@ -4,7 +4,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 summary: API docs for the @kbn/core-ui-settings-browser-mocks plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-browser-mocks'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_core_ui_settings_common.mdx b/api_docs/kbn_core_ui_settings_common.mdx index 40e5efa51cbc6..726cfe303bb15 100644 --- a/api_docs/kbn_core_ui_settings_common.mdx +++ b/api_docs/kbn_core_ui_settings_common.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-common title: "@kbn/core-ui-settings-common" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/core-ui-settings-common plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-common'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_crypto.mdx b/api_docs/kbn_crypto.mdx index a44ee989a88c4..5790208158059 100644 --- a/api_docs/kbn_crypto.mdx +++ b/api_docs/kbn_crypto.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-crypto title: "@kbn/crypto" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/crypto plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/crypto'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_crypto_browser.mdx b/api_docs/kbn_crypto_browser.mdx index 9bd514039791d..ea37452a297d8 100644 --- a/api_docs/kbn_crypto_browser.mdx +++ b/api_docs/kbn_crypto_browser.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-crypto-browser title: "@kbn/crypto-browser" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/crypto-browser plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/crypto-browser'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_datemath.mdx b/api_docs/kbn_datemath.mdx index cf247471d7fd9..a63ad54dc1990 100644 --- a/api_docs/kbn_datemath.mdx +++ b/api_docs/kbn_datemath.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-datemath title: "@kbn/datemath" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/datemath plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/datemath'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_dev_cli_errors.mdx b/api_docs/kbn_dev_cli_errors.mdx index 017b9604ae446..441415f638b09 100644 --- a/api_docs/kbn_dev_cli_errors.mdx +++ b/api_docs/kbn_dev_cli_errors.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-dev-cli-errors title: "@kbn/dev-cli-errors" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/dev-cli-errors plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-cli-errors'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_dev_cli_runner.mdx b/api_docs/kbn_dev_cli_runner.mdx index 33659d48e96fd..6eb94c110fc6c 100644 --- a/api_docs/kbn_dev_cli_runner.mdx +++ b/api_docs/kbn_dev_cli_runner.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-dev-cli-runner title: "@kbn/dev-cli-runner" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/dev-cli-runner plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-cli-runner'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_dev_proc_runner.mdx b/api_docs/kbn_dev_proc_runner.mdx index 319e5586d35d5..6da72300a846f 100644 --- a/api_docs/kbn_dev_proc_runner.mdx +++ b/api_docs/kbn_dev_proc_runner.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-dev-proc-runner title: "@kbn/dev-proc-runner" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/dev-proc-runner plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-proc-runner'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_dev_utils.mdx b/api_docs/kbn_dev_utils.mdx index 0d72af44aaf89..a2291b31698d8 100644 --- a/api_docs/kbn_dev_utils.mdx +++ b/api_docs/kbn_dev_utils.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-dev-utils title: "@kbn/dev-utils" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/dev-utils plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-utils'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_doc_links.mdx b/api_docs/kbn_doc_links.mdx index 6e40d06996033..aa388e93b05ab 100644 --- a/api_docs/kbn_doc_links.mdx +++ b/api_docs/kbn_doc_links.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-doc-links title: "@kbn/doc-links" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/doc-links plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/doc-links'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_docs_utils.mdx b/api_docs/kbn_docs_utils.mdx index 28fd79184e220..c3ea7e5bb066f 100644 --- a/api_docs/kbn_docs_utils.mdx +++ b/api_docs/kbn_docs_utils.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-docs-utils title: "@kbn/docs-utils" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/docs-utils plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/docs-utils'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_es_archiver.mdx b/api_docs/kbn_es_archiver.mdx index 8938d1ed2e16d..37a042bd92260 100644 --- a/api_docs/kbn_es_archiver.mdx +++ b/api_docs/kbn_es_archiver.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-es-archiver title: "@kbn/es-archiver" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/es-archiver plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-archiver'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_es_errors.mdx b/api_docs/kbn_es_errors.mdx index 0c1f3228a831f..70341c11f5b06 100644 --- a/api_docs/kbn_es_errors.mdx +++ b/api_docs/kbn_es_errors.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-es-errors title: "@kbn/es-errors" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/es-errors plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-errors'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_es_query.mdx b/api_docs/kbn_es_query.mdx index 7184c9741bcce..f026f2aaffe96 100644 --- a/api_docs/kbn_es_query.mdx +++ b/api_docs/kbn_es_query.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-es-query title: "@kbn/es-query" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/es-query plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-query'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_eslint_plugin_imports.mdx b/api_docs/kbn_eslint_plugin_imports.mdx index 8754bafc3bc3f..3a0976af09b77 100644 --- a/api_docs/kbn_eslint_plugin_imports.mdx +++ b/api_docs/kbn_eslint_plugin_imports.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-eslint-plugin-imports title: "@kbn/eslint-plugin-imports" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/eslint-plugin-imports plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/eslint-plugin-imports'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_field_types.mdx b/api_docs/kbn_field_types.mdx index db6964da3df6d..cfef42f78d2ca 100644 --- a/api_docs/kbn_field_types.mdx +++ b/api_docs/kbn_field_types.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-field-types title: "@kbn/field-types" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/field-types plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/field-types'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_find_used_node_modules.mdx b/api_docs/kbn_find_used_node_modules.mdx index 352b796c58971..215c427b5191f 100644 --- a/api_docs/kbn_find_used_node_modules.mdx +++ b/api_docs/kbn_find_used_node_modules.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-find-used-node-modules title: "@kbn/find-used-node-modules" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/find-used-node-modules plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/find-used-node-modules'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_generate.mdx b/api_docs/kbn_generate.mdx index 63d0e276c9e0b..e8b12b3e9b4af 100644 --- a/api_docs/kbn_generate.mdx +++ b/api_docs/kbn_generate.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-generate title: "@kbn/generate" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/generate plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_handlebars.mdx b/api_docs/kbn_handlebars.mdx index 16575004f0ae8..e219c44e50f5e 100644 --- a/api_docs/kbn_handlebars.mdx +++ b/api_docs/kbn_handlebars.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-handlebars title: "@kbn/handlebars" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/handlebars plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/handlebars'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_hapi_mocks.mdx b/api_docs/kbn_hapi_mocks.mdx index dab741464b2fe..1c34fb6d61d27 100644 --- a/api_docs/kbn_hapi_mocks.mdx +++ b/api_docs/kbn_hapi_mocks.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-hapi-mocks title: "@kbn/hapi-mocks" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/hapi-mocks plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/hapi-mocks'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_home_sample_data_cards.mdx b/api_docs/kbn_home_sample_data_cards.mdx index 819636e3003d9..4d565fba08035 100644 --- a/api_docs/kbn_home_sample_data_cards.mdx +++ b/api_docs/kbn_home_sample_data_cards.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-home-sample-data-cards title: "@kbn/home-sample-data-cards" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/home-sample-data-cards plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/home-sample-data-cards'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_i18n.mdx b/api_docs/kbn_i18n.mdx index d7c6246e716bf..653d86246a440 100644 --- a/api_docs/kbn_i18n.mdx +++ b/api_docs/kbn_i18n.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-i18n title: "@kbn/i18n" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/i18n plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/i18n'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_import_resolver.mdx b/api_docs/kbn_import_resolver.mdx index 297f02c37ccfc..0d852067de75a 100644 --- a/api_docs/kbn_import_resolver.mdx +++ b/api_docs/kbn_import_resolver.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-import-resolver title: "@kbn/import-resolver" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/import-resolver plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/import-resolver'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_interpreter.mdx b/api_docs/kbn_interpreter.mdx index d49c720284ba2..66eb6c3c402a0 100644 --- a/api_docs/kbn_interpreter.mdx +++ b/api_docs/kbn_interpreter.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-interpreter title: "@kbn/interpreter" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/interpreter plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/interpreter'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_io_ts_utils.mdx b/api_docs/kbn_io_ts_utils.mdx index 6b74d2f52aa0b..bf3b4104e2529 100644 --- a/api_docs/kbn_io_ts_utils.mdx +++ b/api_docs/kbn_io_ts_utils.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-io-ts-utils title: "@kbn/io-ts-utils" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/io-ts-utils plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/io-ts-utils'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_jest_serializers.mdx b/api_docs/kbn_jest_serializers.mdx index 30243df5946b0..6d24376bd2802 100644 --- a/api_docs/kbn_jest_serializers.mdx +++ b/api_docs/kbn_jest_serializers.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-jest-serializers title: "@kbn/jest-serializers" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/jest-serializers plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/jest-serializers'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_kibana_json_schema.mdx b/api_docs/kbn_kibana_json_schema.mdx index 9ec81b2617532..66cfa32bf9d52 100644 --- a/api_docs/kbn_kibana_json_schema.mdx +++ b/api_docs/kbn_kibana_json_schema.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-kibana-json-schema title: "@kbn/kibana-json-schema" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/kibana-json-schema plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/kibana-json-schema'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_logging.mdx b/api_docs/kbn_logging.mdx index 576002e22bda2..387ccb0954458 100644 --- a/api_docs/kbn_logging.mdx +++ b/api_docs/kbn_logging.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-logging title: "@kbn/logging" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/logging plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/logging'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_logging_mocks.mdx b/api_docs/kbn_logging_mocks.mdx index 22b0aee3554b9..651baf085e5a5 100644 --- a/api_docs/kbn_logging_mocks.mdx +++ b/api_docs/kbn_logging_mocks.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-logging-mocks title: "@kbn/logging-mocks" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/logging-mocks plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/logging-mocks'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_mapbox_gl.mdx b/api_docs/kbn_mapbox_gl.mdx index 2595a8c9b0441..4b7d0d093df24 100644 --- a/api_docs/kbn_mapbox_gl.mdx +++ b/api_docs/kbn_mapbox_gl.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-mapbox-gl title: "@kbn/mapbox-gl" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/mapbox-gl plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/mapbox-gl'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_ml_agg_utils.mdx b/api_docs/kbn_ml_agg_utils.mdx index 5c589ffc87d53..6ccf92497cad3 100644 --- a/api_docs/kbn_ml_agg_utils.mdx +++ b/api_docs/kbn_ml_agg_utils.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-ml-agg-utils title: "@kbn/ml-agg-utils" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/ml-agg-utils plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-agg-utils'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_ml_is_populated_object.mdx b/api_docs/kbn_ml_is_populated_object.mdx index c0becc0d82edf..1daa5c7e0fa7d 100644 --- a/api_docs/kbn_ml_is_populated_object.mdx +++ b/api_docs/kbn_ml_is_populated_object.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-ml-is-populated-object title: "@kbn/ml-is-populated-object" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/ml-is-populated-object plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-is-populated-object'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_ml_string_hash.mdx b/api_docs/kbn_ml_string_hash.mdx index 8252825eb29ff..e0aa28a449e9f 100644 --- a/api_docs/kbn_ml_string_hash.mdx +++ b/api_docs/kbn_ml_string_hash.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-ml-string-hash title: "@kbn/ml-string-hash" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/ml-string-hash plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-string-hash'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_monaco.mdx b/api_docs/kbn_monaco.mdx index 0da82fc17f868..225c163f07976 100644 --- a/api_docs/kbn_monaco.mdx +++ b/api_docs/kbn_monaco.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-monaco title: "@kbn/monaco" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/monaco plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/monaco'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_optimizer.mdx b/api_docs/kbn_optimizer.mdx index 5297efc966986..6ff2b8ab05a1f 100644 --- a/api_docs/kbn_optimizer.mdx +++ b/api_docs/kbn_optimizer.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-optimizer title: "@kbn/optimizer" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/optimizer plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/optimizer'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_optimizer_webpack_helpers.mdx b/api_docs/kbn_optimizer_webpack_helpers.mdx index 233b9b1883c07..7fc2334b9c158 100644 --- a/api_docs/kbn_optimizer_webpack_helpers.mdx +++ b/api_docs/kbn_optimizer_webpack_helpers.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-optimizer-webpack-helpers title: "@kbn/optimizer-webpack-helpers" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/optimizer-webpack-helpers plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/optimizer-webpack-helpers'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_performance_testing_dataset_extractor.mdx b/api_docs/kbn_performance_testing_dataset_extractor.mdx index 5a9588db59b5d..4a09a1853c4f5 100644 --- a/api_docs/kbn_performance_testing_dataset_extractor.mdx +++ b/api_docs/kbn_performance_testing_dataset_extractor.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-performance-testing-dataset-extractor title: "@kbn/performance-testing-dataset-extractor" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/performance-testing-dataset-extractor plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/performance-testing-dataset-extractor'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_plugin_generator.mdx b/api_docs/kbn_plugin_generator.mdx index 932b042f139d7..a4b8f708dc36f 100644 --- a/api_docs/kbn_plugin_generator.mdx +++ b/api_docs/kbn_plugin_generator.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-generator title: "@kbn/plugin-generator" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/plugin-generator plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-generator'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_plugin_helpers.mdx b/api_docs/kbn_plugin_helpers.mdx index ea87b55d7218e..2c86335dfaa5b 100644 --- a/api_docs/kbn_plugin_helpers.mdx +++ b/api_docs/kbn_plugin_helpers.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-helpers title: "@kbn/plugin-helpers" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/plugin-helpers plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-helpers'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_react_field.mdx b/api_docs/kbn_react_field.mdx index 3425b53186a54..051f0dc8cb55d 100644 --- a/api_docs/kbn_react_field.mdx +++ b/api_docs/kbn_react_field.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-react-field title: "@kbn/react-field" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/react-field plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-field'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_rule_data_utils.devdocs.json b/api_docs/kbn_rule_data_utils.devdocs.json index cb7a49077cc22..613fa11df6755 100644 --- a/api_docs/kbn_rule_data_utils.devdocs.json +++ b/api_docs/kbn_rule_data_utils.devdocs.json @@ -1009,7 +1009,7 @@ "label": "TechnicalRuleDataFieldName", "description": [], "signature": [ - "\"tags\" | \"kibana\" | \"@timestamp\" | \"event.action\" | \"kibana.alert.rule.parameters\" | \"kibana.alert.rule.rule_type_id\" | \"kibana.alert.rule.consumer\" | \"kibana.alert.rule.producer\" | \"kibana.space_ids\" | \"kibana.alert.uuid\" | \"kibana.alert.instance.id\" | \"kibana.alert.start\" | \"kibana.alert.end\" | \"kibana.alert.duration.us\" | \"kibana.alert.severity\" | \"kibana.alert.status\" | \"kibana.version\" | \"ecs.version\" | \"kibana.alert.risk_score\" | \"kibana.alert.workflow_status\" | \"kibana.alert.workflow_user\" | \"kibana.alert.workflow_reason\" | \"kibana.alert.system_status\" | \"kibana.alert.action_group\" | \"kibana.alert.reason\" | \"kibana.alert.rule.author\" | \"kibana.alert.rule.category\" | \"kibana.alert.rule.uuid\" | \"kibana.alert.rule.created_at\" | \"kibana.alert.rule.created_by\" | \"kibana.alert.rule.description\" | \"kibana.alert.rule.enabled\" | \"kibana.alert.rule.execution.uuid\" | \"kibana.alert.rule.from\" | \"kibana.alert.rule.interval\" | \"kibana.alert.rule.license\" | \"kibana.alert.rule.name\" | \"kibana.alert.rule.note\" | \"kibana.alert.rule.references\" | \"kibana.alert.rule.rule_id\" | \"kibana.alert.rule.rule_name_override\" | \"kibana.alert.rule.tags\" | \"kibana.alert.rule.to\" | \"kibana.alert.rule.type\" | \"kibana.alert.rule.updated_at\" | \"kibana.alert.rule.updated_by\" | \"kibana.alert.rule.version\" | \"event.kind\" | \"event.module\" | \"kibana.alert.evaluation.threshold\" | \"kibana.alert.evaluation.value\" | \"kibana.alert\" | \"kibana.alert.building_block_type\" | \"kibana.alert.rule\" | \"kibana.alert.rule.exceptions_list\" | \"kibana.alert.rule.namespace\"" + "\"tags\" | \"kibana\" | \"@timestamp\" | \"event.action\" | \"kibana.alert.rule.parameters\" | \"kibana.alert.rule.rule_type_id\" | \"kibana.alert.rule.consumer\" | \"kibana.alert.rule.producer\" | \"kibana.space_ids\" | \"kibana.alert.uuid\" | \"kibana.alert.instance.id\" | \"kibana.alert.start\" | \"kibana.alert.end\" | \"kibana.alert.duration.us\" | \"kibana.alert.severity\" | \"kibana.alert.status\" | \"kibana.version\" | \"ecs.version\" | \"kibana.alert.risk_score\" | \"kibana.alert.workflow_status\" | \"kibana.alert.workflow_user\" | \"kibana.alert.workflow_reason\" | \"kibana.alert.system_status\" | \"kibana.alert.action_group\" | \"kibana.alert.reason\" | \"kibana.alert.rule.author\" | \"kibana.alert.rule.category\" | \"kibana.alert.rule.uuid\" | \"kibana.alert.rule.created_at\" | \"kibana.alert.rule.created_by\" | \"kibana.alert.rule.description\" | \"kibana.alert.rule.enabled\" | \"kibana.alert.rule.execution.uuid\" | \"kibana.alert.rule.from\" | \"kibana.alert.rule.interval\" | \"kibana.alert.rule.license\" | \"kibana.alert.rule.name\" | \"kibana.alert.rule.note\" | \"kibana.alert.rule.references\" | \"kibana.alert.rule.rule_id\" | \"kibana.alert.rule.rule_name_override\" | \"kibana.alert.rule.tags\" | \"kibana.alert.rule.to\" | \"kibana.alert.rule.type\" | \"kibana.alert.rule.updated_at\" | \"kibana.alert.rule.updated_by\" | \"kibana.alert.rule.version\" | \"event.kind\" | \"event.module\" | \"kibana.alert.evaluation.threshold\" | \"kibana.alert.evaluation.value\" | \"kibana.alert.building_block_type\" | \"kibana.alert.rule.exceptions_list\" | \"kibana.alert.rule.namespace\" | \"kibana.alert\" | \"kibana.alert.rule\"" ], "path": "packages/kbn-rule-data-utils/src/technical_field_names.ts", "deprecated": false, diff --git a/api_docs/kbn_rule_data_utils.mdx b/api_docs/kbn_rule_data_utils.mdx index ecfd0baeafc49..d91c08a14958e 100644 --- a/api_docs/kbn_rule_data_utils.mdx +++ b/api_docs/kbn_rule_data_utils.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-rule-data-utils title: "@kbn/rule-data-utils" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/rule-data-utils plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rule-data-utils'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_scalability_simulation_generator.mdx b/api_docs/kbn_scalability_simulation_generator.mdx index 7c81f25980a85..cc6881d2c192b 100644 --- a/api_docs/kbn_scalability_simulation_generator.mdx +++ b/api_docs/kbn_scalability_simulation_generator.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-scalability-simulation-generator title: "@kbn/scalability-simulation-generator" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/scalability-simulation-generator plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/scalability-simulation-generator'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_securitysolution_autocomplete.mdx b/api_docs/kbn_securitysolution_autocomplete.mdx index 7ca8d7e4409ad..e8e8ccd1301b3 100644 --- a/api_docs/kbn_securitysolution_autocomplete.mdx +++ b/api_docs/kbn_securitysolution_autocomplete.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-autocomplete title: "@kbn/securitysolution-autocomplete" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/securitysolution-autocomplete plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-autocomplete'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_securitysolution_es_utils.devdocs.json b/api_docs/kbn_securitysolution_es_utils.devdocs.json index 69ef8607a3716..9a04e2bad87aa 100644 --- a/api_docs/kbn_securitysolution_es_utils.devdocs.json +++ b/api_docs/kbn_securitysolution_es_utils.devdocs.json @@ -422,7 +422,9 @@ "TransportRequestOptions", " | undefined): Promise<", "SearchResponse", - ">; }; eql: ", + ">; }; cluster: ", + "default", + "; eql: ", "default", "; create: { (this: That, params: ", "CreateRequest", @@ -650,9 +652,7 @@ "TransportRequestOptions", " | undefined): Promise<", "ClearScrollResponse", - ">; }; cluster: ", - "default", - "; count: { (this: That, params?: ", + ">; }; count: { (this: That, params?: ", "CountRequest", " | ", "CountRequest", @@ -1664,7 +1664,9 @@ "TransportRequestOptions", " | undefined): Promise<", "SearchResponse", - ">; }; eql: ", + ">; }; cluster: ", + "default", + "; eql: ", "default", "; create: { (this: That, params: ", "CreateRequest", @@ -1892,9 +1894,7 @@ "TransportRequestOptions", " | undefined): Promise<", "ClearScrollResponse", - ">; }; cluster: ", - "default", - "; count: { (this: That, params?: ", + ">; }; count: { (this: That, params?: ", "CountRequest", " | ", "CountRequest", diff --git a/api_docs/kbn_securitysolution_es_utils.mdx b/api_docs/kbn_securitysolution_es_utils.mdx index 0dfe99a6afd46..065f69c227eae 100644 --- a/api_docs/kbn_securitysolution_es_utils.mdx +++ b/api_docs/kbn_securitysolution_es_utils.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-es-utils title: "@kbn/securitysolution-es-utils" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/securitysolution-es-utils plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-es-utils'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_securitysolution_hook_utils.mdx b/api_docs/kbn_securitysolution_hook_utils.mdx index c7db4caa23acc..51f8061227ab2 100644 --- a/api_docs/kbn_securitysolution_hook_utils.mdx +++ b/api_docs/kbn_securitysolution_hook_utils.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-hook-utils title: "@kbn/securitysolution-hook-utils" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/securitysolution-hook-utils plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-hook-utils'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_securitysolution_io_ts_alerting_types.devdocs.json b/api_docs/kbn_securitysolution_io_ts_alerting_types.devdocs.json index 91614a6831f7c..3254f3ff0380c 100644 --- a/api_docs/kbn_securitysolution_io_ts_alerting_types.devdocs.json +++ b/api_docs/kbn_securitysolution_io_ts_alerting_types.devdocs.json @@ -846,7 +846,7 @@ "label": "Type", "description": [], "signature": [ - "\"eql\" | \"query\" | \"threshold\" | \"machine_learning\" | \"saved_query\" | \"threat_match\"" + "\"eql\" | \"query\" | \"threshold\" | \"machine_learning\" | \"saved_query\" | \"threat_match\" | \"new_terms\"" ], "path": "packages/kbn-securitysolution-io-ts-alerting-types/src/type/index.ts", "deprecated": false, @@ -860,7 +860,7 @@ "label": "TypeOrUndefined", "description": [], "signature": [ - "\"eql\" | \"query\" | \"threshold\" | \"machine_learning\" | \"saved_query\" | \"threat_match\" | undefined" + "\"eql\" | \"query\" | \"threshold\" | \"machine_learning\" | \"saved_query\" | \"threat_match\" | \"new_terms\" | undefined" ], "path": "packages/kbn-securitysolution-io-ts-alerting-types/src/type/index.ts", "deprecated": false, @@ -2833,7 +2833,7 @@ "description": [], "signature": [ "KeyofC", - "<{ eql: null; machine_learning: null; query: null; saved_query: null; threshold: null; threat_match: null; }>" + "<{ eql: null; machine_learning: null; query: null; saved_query: null; threshold: null; threat_match: null; new_terms: null; }>" ], "path": "packages/kbn-securitysolution-io-ts-alerting-types/src/type/index.ts", "deprecated": false, @@ -2850,7 +2850,7 @@ "UnionC", "<[", "KeyofC", - "<{ eql: null; machine_learning: null; query: null; saved_query: null; threshold: null; threat_match: null; }>, ", + "<{ eql: null; machine_learning: null; query: null; saved_query: null; threshold: null; threat_match: null; new_terms: null; }>, ", "UndefinedC", "]>" ], diff --git a/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx b/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx index 7de804c412eaf..6ea3a8b36235a 100644 --- a/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx @@ -4,7 +4,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 summary: API docs for the @kbn/securitysolution-io-ts-alerting-types plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-io-ts-alerting-types'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_securitysolution_io_ts_list_types.mdx b/api_docs/kbn_securitysolution_io_ts_list_types.mdx index 0cab345c37d28..d7485fdede25d 100644 --- a/api_docs/kbn_securitysolution_io_ts_list_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_list_types.mdx @@ -4,7 +4,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 summary: API docs for the @kbn/securitysolution-io-ts-list-types plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-io-ts-list-types'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_securitysolution_io_ts_types.devdocs.json b/api_docs/kbn_securitysolution_io_ts_types.devdocs.json index 88eded8297819..0832cc7688b06 100644 --- a/api_docs/kbn_securitysolution_io_ts_types.devdocs.json +++ b/api_docs/kbn_securitysolution_io_ts_types.devdocs.json @@ -115,6 +115,95 @@ ], "initialIsOpen": false }, + { + "parentPluginId": "@kbn/securitysolution-io-ts-types", + "id": "def-common.LimitedSizeArray", + "type": "Function", + "tags": [], + "label": "LimitedSizeArray", + "description": [], + "signature": [ + "({ codec, minSize, maxSize, name, }: { codec: C; minSize?: number | undefined; maxSize?: number | undefined; name?: string | undefined; }) => ", + "Type", + "<", + "TypeOf", + "[], ", + "TypeOf", + "[], unknown>" + ], + "path": "packages/kbn-securitysolution-io-ts-types/src/limited_size_array/index.ts", + "deprecated": false, + "children": [ + { + "parentPluginId": "@kbn/securitysolution-io-ts-types", + "id": "def-common.LimitedSizeArray.$1", + "type": "Object", + "tags": [], + "label": "{\n codec,\n minSize,\n maxSize,\n name = `LimitedSizeArray<${codec.name}>`,\n}", + "description": [], + "path": "packages/kbn-securitysolution-io-ts-types/src/limited_size_array/index.ts", + "deprecated": false, + "children": [ + { + "parentPluginId": "@kbn/securitysolution-io-ts-types", + "id": "def-common.LimitedSizeArray.$1.codec", + "type": "Uncategorized", + "tags": [], + "label": "codec", + "description": [], + "signature": [ + "C" + ], + "path": "packages/kbn-securitysolution-io-ts-types/src/limited_size_array/index.ts", + "deprecated": false + }, + { + "parentPluginId": "@kbn/securitysolution-io-ts-types", + "id": "def-common.LimitedSizeArray.$1.minSize", + "type": "number", + "tags": [], + "label": "minSize", + "description": [], + "signature": [ + "number | undefined" + ], + "path": "packages/kbn-securitysolution-io-ts-types/src/limited_size_array/index.ts", + "deprecated": false + }, + { + "parentPluginId": "@kbn/securitysolution-io-ts-types", + "id": "def-common.LimitedSizeArray.$1.maxSize", + "type": "number", + "tags": [], + "label": "maxSize", + "description": [], + "signature": [ + "number | undefined" + ], + "path": "packages/kbn-securitysolution-io-ts-types/src/limited_size_array/index.ts", + "deprecated": false + }, + { + "parentPluginId": "@kbn/securitysolution-io-ts-types", + "id": "def-common.LimitedSizeArray.$1.name", + "type": "string", + "tags": [], + "label": "name", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "packages/kbn-securitysolution-io-ts-types/src/limited_size_array/index.ts", + "deprecated": false + } + ] + } + ], + "returnComment": [], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/securitysolution-io-ts-types", "id": "def-common.NonEmptyArray", diff --git a/api_docs/kbn_securitysolution_io_ts_types.mdx b/api_docs/kbn_securitysolution_io_ts_types.mdx index b2dc14154d537..aa470af6bd3be 100644 --- a/api_docs/kbn_securitysolution_io_ts_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_types.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-types title: "@kbn/securitysolution-io-ts-types" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/securitysolution-io-ts-types plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-io-ts-types'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- @@ -18,7 +18,7 @@ Contact [Owner missing] for questions regarding this plugin. | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 48 | 0 | 26 | 0 | +| 54 | 0 | 32 | 0 | ## Common diff --git a/api_docs/kbn_securitysolution_io_ts_utils.mdx b/api_docs/kbn_securitysolution_io_ts_utils.mdx index e70d76b16b7f2..93f74333cd11e 100644 --- a/api_docs/kbn_securitysolution_io_ts_utils.mdx +++ b/api_docs/kbn_securitysolution_io_ts_utils.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-utils title: "@kbn/securitysolution-io-ts-utils" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/securitysolution-io-ts-utils plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-io-ts-utils'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_securitysolution_list_api.mdx b/api_docs/kbn_securitysolution_list_api.mdx index f68b381acb1b5..d2cb6b2348fc9 100644 --- a/api_docs/kbn_securitysolution_list_api.mdx +++ b/api_docs/kbn_securitysolution_list_api.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-api title: "@kbn/securitysolution-list-api" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/securitysolution-list-api plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-list-api'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_securitysolution_list_constants.mdx b/api_docs/kbn_securitysolution_list_constants.mdx index 17dc6ff4d5bc9..c164641ad2374 100644 --- a/api_docs/kbn_securitysolution_list_constants.mdx +++ b/api_docs/kbn_securitysolution_list_constants.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-constants title: "@kbn/securitysolution-list-constants" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/securitysolution-list-constants plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-list-constants'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_securitysolution_list_hooks.mdx b/api_docs/kbn_securitysolution_list_hooks.mdx index e8a4b4a3bc140..16f6e99c1fc92 100644 --- a/api_docs/kbn_securitysolution_list_hooks.mdx +++ b/api_docs/kbn_securitysolution_list_hooks.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-hooks title: "@kbn/securitysolution-list-hooks" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/securitysolution-list-hooks plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-list-hooks'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_securitysolution_list_utils.mdx b/api_docs/kbn_securitysolution_list_utils.mdx index 32049ff4a6765..7dd727ebc3b72 100644 --- a/api_docs/kbn_securitysolution_list_utils.mdx +++ b/api_docs/kbn_securitysolution_list_utils.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-utils title: "@kbn/securitysolution-list-utils" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/securitysolution-list-utils plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-list-utils'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_securitysolution_rules.devdocs.json b/api_docs/kbn_securitysolution_rules.devdocs.json index 655b25e326c28..f7c30d88d58f1 100644 --- a/api_docs/kbn_securitysolution_rules.devdocs.json +++ b/api_docs/kbn_securitysolution_rules.devdocs.json @@ -72,7 +72,7 @@ "label": "isRuleType", "description": [], "signature": [ - "(ruleType: unknown) => ruleType is \"eql\" | \"query\" | \"threshold\" | \"machine_learning\" | \"saved_query\" | \"threat_match\"" + "(ruleType: unknown) => ruleType is \"eql\" | \"query\" | \"threshold\" | \"machine_learning\" | \"saved_query\" | \"threat_match\" | \"new_terms\"" ], "path": "packages/kbn-securitysolution-rules/src/utils.ts", "deprecated": false, @@ -195,6 +195,20 @@ "deprecated": false, "initialIsOpen": false }, + { + "parentPluginId": "@kbn/securitysolution-rules", + "id": "def-common.NEW_TERMS_RULE_TYPE_ID", + "type": "string", + "tags": [], + "label": "NEW_TERMS_RULE_TYPE_ID", + "description": [], + "signature": [ + "\"siem.newTermsRule\"" + ], + "path": "packages/kbn-securitysolution-rules/src/rule_type_constants.ts", + "deprecated": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/securitysolution-rules", "id": "def-common.QUERY_RULE_TYPE_ID", @@ -217,7 +231,7 @@ "label": "RuleType", "description": [], "signature": [ - "\"eql\" | \"query\" | \"threshold\" | \"machine_learning\" | \"saved_query\" | \"threat_match\"" + "\"eql\" | \"query\" | \"threshold\" | \"machine_learning\" | \"saved_query\" | \"threat_match\" | \"new_terms\"" ], "path": "packages/kbn-securitysolution-rules/src/rule_type_mappings.ts", "deprecated": false, @@ -231,7 +245,7 @@ "label": "RuleTypeId", "description": [], "signature": [ - "\"siem.eqlRule\" | \"siem.indicatorRule\" | \"siem.mlRule\" | \"siem.queryRule\" | \"siem.savedQueryRule\" | \"siem.thresholdRule\"" + "\"siem.eqlRule\" | \"siem.indicatorRule\" | \"siem.mlRule\" | \"siem.queryRule\" | \"siem.savedQueryRule\" | \"siem.thresholdRule\" | \"siem.newTermsRule\"" ], "path": "packages/kbn-securitysolution-rules/src/rule_type_mappings.ts", "deprecated": false, @@ -372,6 +386,19 @@ ], "path": "packages/kbn-securitysolution-rules/src/rule_type_mappings.ts", "deprecated": false + }, + { + "parentPluginId": "@kbn/securitysolution-rules", + "id": "def-common.ruleTypeMappings.new_terms", + "type": "string", + "tags": [], + "label": "new_terms", + "description": [], + "signature": [ + "\"siem.newTermsRule\"" + ], + "path": "packages/kbn-securitysolution-rules/src/rule_type_mappings.ts", + "deprecated": false } ], "initialIsOpen": false diff --git a/api_docs/kbn_securitysolution_rules.mdx b/api_docs/kbn_securitysolution_rules.mdx index 93571fe88ac6b..41b247d6c1adf 100644 --- a/api_docs/kbn_securitysolution_rules.mdx +++ b/api_docs/kbn_securitysolution_rules.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-rules title: "@kbn/securitysolution-rules" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/securitysolution-rules plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-rules'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- @@ -18,7 +18,7 @@ Contact [Owner missing] for questions regarding this plugin. | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 24 | 0 | 21 | 0 | +| 26 | 0 | 23 | 0 | ## Common diff --git a/api_docs/kbn_securitysolution_t_grid.mdx b/api_docs/kbn_securitysolution_t_grid.mdx index 484d5a7edb1a6..c74c48629ded7 100644 --- a/api_docs/kbn_securitysolution_t_grid.mdx +++ b/api_docs/kbn_securitysolution_t_grid.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-t-grid title: "@kbn/securitysolution-t-grid" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/securitysolution-t-grid plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-t-grid'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_securitysolution_utils.mdx b/api_docs/kbn_securitysolution_utils.mdx index d0bd223287c16..0b958c0fe05dd 100644 --- a/api_docs/kbn_securitysolution_utils.mdx +++ b/api_docs/kbn_securitysolution_utils.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-utils title: "@kbn/securitysolution-utils" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/securitysolution-utils plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-utils'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_server_http_tools.mdx b/api_docs/kbn_server_http_tools.mdx index 5f205fd84bcf2..648f53e64da5c 100644 --- a/api_docs/kbn_server_http_tools.mdx +++ b/api_docs/kbn_server_http_tools.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-server-http-tools title: "@kbn/server-http-tools" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/server-http-tools plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-http-tools'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_server_route_repository.mdx b/api_docs/kbn_server_route_repository.mdx index c7463d5124ca5..5256dfcf7be64 100644 --- a/api_docs/kbn_server_route_repository.mdx +++ b/api_docs/kbn_server_route_repository.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-server-route-repository title: "@kbn/server-route-repository" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/server-route-repository plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_shared_ux_button_toolbar.mdx b/api_docs/kbn_shared_ux_button_toolbar.mdx index ced61b6f38f3e..7354ab061730e 100644 --- a/api_docs/kbn_shared_ux_button_toolbar.mdx +++ b/api_docs/kbn_shared_ux_button_toolbar.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-toolbar title: "@kbn/shared-ux-button-toolbar" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/shared-ux-button-toolbar plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-button-toolbar'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_shared_ux_card_no_data.mdx b/api_docs/kbn_shared_ux_card_no_data.mdx index 59bb08c3c821c..c14fa909fbf1c 100644 --- a/api_docs/kbn_shared_ux_card_no_data.mdx +++ b/api_docs/kbn_shared_ux_card_no_data.mdx @@ -4,7 +4,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 summary: API docs for the @kbn/shared-ux-card-no-data plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-card-no-data'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_shared_ux_components.mdx b/api_docs/kbn_shared_ux_components.mdx index d075a8dec67bd..20c4e2fbd6625 100644 --- a/api_docs/kbn_shared_ux_components.mdx +++ b/api_docs/kbn_shared_ux_components.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-components title: "@kbn/shared-ux-components" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/shared-ux-components plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-components'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- 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 912328432fa07..1aa54e6331c81 100644 --- a/api_docs/kbn_shared_ux_page_analytics_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_analytics_no_data.mdx @@ -4,7 +4,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 summary: API docs for the @kbn/shared-ux-page-analytics-no-data plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-analytics-no-data'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- 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 6fd8a00d23d42..ef5350e540679 100644 --- a/api_docs/kbn_shared_ux_page_kibana_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_no_data.mdx @@ -4,7 +4,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 summary: API docs for the @kbn/shared-ux-page-kibana-no-data plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-kibana-no-data'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_shared_ux_page_solution_nav.mdx b/api_docs/kbn_shared_ux_page_solution_nav.mdx index 3921f1b5b20f2..d94970f4d7b61 100644 --- a/api_docs/kbn_shared_ux_page_solution_nav.mdx +++ b/api_docs/kbn_shared_ux_page_solution_nav.mdx @@ -4,7 +4,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 summary: API docs for the @kbn/shared-ux-page-solution-nav plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-solution-nav'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- 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 5be5bc806857b..ab5818b4c215b 100644 --- a/api_docs/kbn_shared_ux_prompt_no_data_views.mdx +++ b/api_docs/kbn_shared_ux_prompt_no_data_views.mdx @@ -4,7 +4,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 summary: API docs for the @kbn/shared-ux-prompt-no-data-views plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-prompt-no-data-views'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_shared_ux_services.mdx b/api_docs/kbn_shared_ux_services.mdx index f424253222c18..fb59cbfc47978 100644 --- a/api_docs/kbn_shared_ux_services.mdx +++ b/api_docs/kbn_shared_ux_services.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-services title: "@kbn/shared-ux-services" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/shared-ux-services plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-services'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_shared_ux_storybook.mdx b/api_docs/kbn_shared_ux_storybook.mdx index 0b8a44c7ed3c9..d560a995409cb 100644 --- a/api_docs/kbn_shared_ux_storybook.mdx +++ b/api_docs/kbn_shared_ux_storybook.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-storybook title: "@kbn/shared-ux-storybook" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/shared-ux-storybook plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-storybook'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_shared_ux_utility.mdx b/api_docs/kbn_shared_ux_utility.mdx index 94b7400e26ce9..449d0f6d12f34 100644 --- a/api_docs/kbn_shared_ux_utility.mdx +++ b/api_docs/kbn_shared_ux_utility.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-utility title: "@kbn/shared-ux-utility" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/shared-ux-utility plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-utility'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_some_dev_log.mdx b/api_docs/kbn_some_dev_log.mdx index 4d30563f0472e..912d8694af12d 100644 --- a/api_docs/kbn_some_dev_log.mdx +++ b/api_docs/kbn_some_dev_log.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-some-dev-log title: "@kbn/some-dev-log" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/some-dev-log plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/some-dev-log'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_sort_package_json.mdx b/api_docs/kbn_sort_package_json.mdx index a03553ab2226f..bc78001f9fe27 100644 --- a/api_docs/kbn_sort_package_json.mdx +++ b/api_docs/kbn_sort_package_json.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-sort-package-json title: "@kbn/sort-package-json" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/sort-package-json plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/sort-package-json'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_std.mdx b/api_docs/kbn_std.mdx index 14e372a11b46c..890f5d40b5cfb 100644 --- a/api_docs/kbn_std.mdx +++ b/api_docs/kbn_std.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-std title: "@kbn/std" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/std plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/std'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_stdio_dev_helpers.mdx b/api_docs/kbn_stdio_dev_helpers.mdx index c5a91c587880a..58afeec1e90ae 100644 --- a/api_docs/kbn_stdio_dev_helpers.mdx +++ b/api_docs/kbn_stdio_dev_helpers.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-stdio-dev-helpers title: "@kbn/stdio-dev-helpers" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/stdio-dev-helpers plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/stdio-dev-helpers'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_storybook.mdx b/api_docs/kbn_storybook.mdx index ecd444d79ef9f..75b41dc9af22f 100644 --- a/api_docs/kbn_storybook.mdx +++ b/api_docs/kbn_storybook.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-storybook title: "@kbn/storybook" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/storybook plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/storybook'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_telemetry_tools.mdx b/api_docs/kbn_telemetry_tools.mdx index 279da0e20e252..59f8526ef2dd3 100644 --- a/api_docs/kbn_telemetry_tools.mdx +++ b/api_docs/kbn_telemetry_tools.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-telemetry-tools title: "@kbn/telemetry-tools" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/telemetry-tools plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/telemetry-tools'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_test.mdx b/api_docs/kbn_test.mdx index 5931e2a461f9a..9c1f05707b951 100644 --- a/api_docs/kbn_test.mdx +++ b/api_docs/kbn_test.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-test title: "@kbn/test" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/test plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_test_jest_helpers.mdx b/api_docs/kbn_test_jest_helpers.mdx index 39b38ded78fb8..2e5a4a1619e14 100644 --- a/api_docs/kbn_test_jest_helpers.mdx +++ b/api_docs/kbn_test_jest_helpers.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-test-jest-helpers title: "@kbn/test-jest-helpers" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/test-jest-helpers plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test-jest-helpers'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_tooling_log.mdx b/api_docs/kbn_tooling_log.mdx index 022b568ba89fa..d6229cb4815bd 100644 --- a/api_docs/kbn_tooling_log.mdx +++ b/api_docs/kbn_tooling_log.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-tooling-log title: "@kbn/tooling-log" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/tooling-log plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/tooling-log'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_type_summarizer.mdx b/api_docs/kbn_type_summarizer.mdx index 5f4103d3353f9..3cbc3cf3af9ae 100644 --- a/api_docs/kbn_type_summarizer.mdx +++ b/api_docs/kbn_type_summarizer.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-type-summarizer title: "@kbn/type-summarizer" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/type-summarizer plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/type-summarizer'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_type_summarizer_core.mdx b/api_docs/kbn_type_summarizer_core.mdx index a5c2dc2735f19..df67565d332c5 100644 --- a/api_docs/kbn_type_summarizer_core.mdx +++ b/api_docs/kbn_type_summarizer_core.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-type-summarizer-core title: "@kbn/type-summarizer-core" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/type-summarizer-core plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/type-summarizer-core'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_typed_react_router_config.mdx b/api_docs/kbn_typed_react_router_config.mdx index cfcba3f2617ea..f85562ff1c229 100644 --- a/api_docs/kbn_typed_react_router_config.mdx +++ b/api_docs/kbn_typed_react_router_config.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-typed-react-router-config title: "@kbn/typed-react-router-config" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/typed-react-router-config plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/typed-react-router-config'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_ui_theme.mdx b/api_docs/kbn_ui_theme.mdx index 27fa5bee06190..16db3eb30ae34 100644 --- a/api_docs/kbn_ui_theme.mdx +++ b/api_docs/kbn_ui_theme.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-ui-theme title: "@kbn/ui-theme" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/ui-theme plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ui-theme'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_utility_types.mdx b/api_docs/kbn_utility_types.mdx index 8d1a50f622a85..972c937e45d1b 100644 --- a/api_docs/kbn_utility_types.mdx +++ b/api_docs/kbn_utility_types.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-utility-types title: "@kbn/utility-types" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/utility-types plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/utility-types'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_utility_types_jest.mdx b/api_docs/kbn_utility_types_jest.mdx index 8c04ac129fdbb..fd921df9bd744 100644 --- a/api_docs/kbn_utility_types_jest.mdx +++ b/api_docs/kbn_utility_types_jest.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-utility-types-jest title: "@kbn/utility-types-jest" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/utility-types-jest plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/utility-types-jest'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_utils.mdx b/api_docs/kbn_utils.mdx index 71490fcf884d1..851184bf3f4d2 100644 --- a/api_docs/kbn_utils.mdx +++ b/api_docs/kbn_utils.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-utils title: "@kbn/utils" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/utils plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/utils'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kbn_yarn_lock_validator.mdx b/api_docs/kbn_yarn_lock_validator.mdx index 95655debe2d93..69d617e80f88c 100644 --- a/api_docs/kbn_yarn_lock_validator.mdx +++ b/api_docs/kbn_yarn_lock_validator.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kbn-yarn-lock-validator title: "@kbn/yarn-lock-validator" image: https://source.unsplash.com/400x175/?github summary: API docs for the @kbn/yarn-lock-validator plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/yarn-lock-validator'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kibana_overview.mdx b/api_docs/kibana_overview.mdx index 21eb07803b791..e1804c29c810f 100644 --- a/api_docs/kibana_overview.mdx +++ b/api_docs/kibana_overview.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kibanaOverview title: "kibanaOverview" image: https://source.unsplash.com/400x175/?github summary: API docs for the kibanaOverview plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaOverview'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kibana_react.devdocs.json b/api_docs/kibana_react.devdocs.json index 3d697378ee293..2b8ec3ae15917 100644 --- a/api_docs/kibana_react.devdocs.json +++ b/api_docs/kibana_react.devdocs.json @@ -1155,6 +1155,18 @@ { "plugin": "osquery", "path": "x-pack/plugins/osquery/public/components/empty_state.tsx" + }, + { + "plugin": "home", + "path": "src/plugins/home/public/application/components/home.tsx" + }, + { + "plugin": "home", + "path": "src/plugins/home/public/application/components/home.tsx" + }, + { + "plugin": "home", + "path": "src/plugins/home/public/application/components/home.tsx" } ], "children": [ @@ -2067,6 +2079,26 @@ { "plugin": "home", "path": "src/plugins/home/public/application/components/add_data/add_data.tsx" + }, + { + "plugin": "home", + "path": "src/plugins/home/public/application/components/manage_data/manage_data.tsx" + }, + { + "plugin": "home", + "path": "src/plugins/home/public/application/components/manage_data/manage_data.tsx" + }, + { + "plugin": "home", + "path": "src/plugins/home/public/application/components/manage_data/manage_data.tsx" + }, + { + "plugin": "home", + "path": "src/plugins/home/public/application/components/manage_data/manage_data.tsx" + }, + { + "plugin": "home", + "path": "src/plugins/home/public/application/components/manage_data/manage_data.tsx" } ], "children": [ diff --git a/api_docs/kibana_react.mdx b/api_docs/kibana_react.mdx index dbc0a2280b085..93911c6d475ef 100644 --- a/api_docs/kibana_react.mdx +++ b/api_docs/kibana_react.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kibanaReact title: "kibanaReact" image: https://source.unsplash.com/400x175/?github summary: API docs for the kibanaReact plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaReact'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kibana_utils.mdx b/api_docs/kibana_utils.mdx index 6db935f383b05..bba70dd6387f1 100644 --- a/api_docs/kibana_utils.mdx +++ b/api_docs/kibana_utils.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kibanaUtils title: "kibanaUtils" image: https://source.unsplash.com/400x175/?github summary: API docs for the kibanaUtils plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaUtils'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/kubernetes_security.mdx b/api_docs/kubernetes_security.mdx index c4e9f87be81e2..7e2a2bcce98e3 100644 --- a/api_docs/kubernetes_security.mdx +++ b/api_docs/kubernetes_security.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/kubernetesSecurity title: "kubernetesSecurity" image: https://source.unsplash.com/400x175/?github summary: API docs for the kubernetesSecurity plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kubernetesSecurity'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/lens.mdx b/api_docs/lens.mdx index 82c63213914de..d8d848751bc51 100644 --- a/api_docs/lens.mdx +++ b/api_docs/lens.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/lens title: "lens" image: https://source.unsplash.com/400x175/?github summary: API docs for the lens plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lens'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/license_api_guard.mdx b/api_docs/license_api_guard.mdx index dfc74c4453659..bb2243b550c19 100644 --- a/api_docs/license_api_guard.mdx +++ b/api_docs/license_api_guard.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/licenseApiGuard title: "licenseApiGuard" image: https://source.unsplash.com/400x175/?github summary: API docs for the licenseApiGuard plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'licenseApiGuard'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/license_management.mdx b/api_docs/license_management.mdx index 7f03b02317db6..506fe03b5b45c 100644 --- a/api_docs/license_management.mdx +++ b/api_docs/license_management.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/licenseManagement title: "licenseManagement" image: https://source.unsplash.com/400x175/?github summary: API docs for the licenseManagement plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'licenseManagement'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/licensing.mdx b/api_docs/licensing.mdx index 0ef77ee5e15b9..7f7b279727574 100644 --- a/api_docs/licensing.mdx +++ b/api_docs/licensing.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/licensing title: "licensing" image: https://source.unsplash.com/400x175/?github summary: API docs for the licensing plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'licensing'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/lists.devdocs.json b/api_docs/lists.devdocs.json index 499891e69adff..b996412bec0b1 100644 --- a/api_docs/lists.devdocs.json +++ b/api_docs/lists.devdocs.json @@ -3997,7 +3997,9 @@ "TransportRequestOptions", " | undefined): Promise<", "SearchResponse", - ">; }; eql: ", + ">; }; cluster: ", + "default", + "; eql: ", "default", "; create: { (this: That, params: ", "CreateRequest", @@ -4229,9 +4231,7 @@ "TransportRequestOptions", " | undefined): Promise<", "ClearScrollResponse", - ">; }; cluster: ", - "default", - "; count: { (this: That, params?: ", + ">; }; count: { (this: That, params?: ", "CountRequest", " | ", "CountRequest", diff --git a/api_docs/lists.mdx b/api_docs/lists.mdx index 09d9e7d561925..d20878cc0c890 100644 --- a/api_docs/lists.mdx +++ b/api_docs/lists.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/lists title: "lists" image: https://source.unsplash.com/400x175/?github summary: API docs for the lists plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lists'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/management.mdx b/api_docs/management.mdx index 7888d4ee4dfb8..7b51cd12823a1 100644 --- a/api_docs/management.mdx +++ b/api_docs/management.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/management title: "management" image: https://source.unsplash.com/400x175/?github summary: API docs for the management plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'management'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/maps.devdocs.json b/api_docs/maps.devdocs.json index 4732fd45134ad..050fc20374fa3 100644 --- a/api_docs/maps.devdocs.json +++ b/api_docs/maps.devdocs.json @@ -3458,7 +3458,11 @@ "signature": [ "{ currentLayerType: string; numberOfJoins: number; onChange: (...args: ", "OnSourceChangeArgs", - "[]) => Promise; }" + "[]) => Promise; onStyleDescriptorChange: (styleDescriptor: ", + "StyleDescriptor", + ") => void; style: ", + "IStyle", + "; }" ], "path": "x-pack/plugins/maps/public/classes/sources/source.ts", "deprecated": false, diff --git a/api_docs/maps.mdx b/api_docs/maps.mdx index c95018c79778b..01b109c680ad6 100644 --- a/api_docs/maps.mdx +++ b/api_docs/maps.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/maps title: "maps" image: https://source.unsplash.com/400x175/?github summary: API docs for the maps plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'maps'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- @@ -18,7 +18,7 @@ Contact [GIS](https://github.com/orgs/elastic/teams/kibana-gis) for questions re | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 250 | 0 | 249 | 24 | +| 250 | 0 | 249 | 25 | ## Client diff --git a/api_docs/maps_ems.mdx b/api_docs/maps_ems.mdx index 53d0c7877bf85..3205a03142b17 100644 --- a/api_docs/maps_ems.mdx +++ b/api_docs/maps_ems.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/mapsEms title: "mapsEms" image: https://source.unsplash.com/400x175/?github summary: API docs for the mapsEms plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'mapsEms'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/ml.mdx b/api_docs/ml.mdx index db60536fd0ff3..33e8248a7c78b 100644 --- a/api_docs/ml.mdx +++ b/api_docs/ml.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/ml title: "ml" image: https://source.unsplash.com/400x175/?github summary: API docs for the ml plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ml'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/monitoring.mdx b/api_docs/monitoring.mdx index 27bcb23624c38..0d22de8925869 100644 --- a/api_docs/monitoring.mdx +++ b/api_docs/monitoring.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/monitoring title: "monitoring" image: https://source.unsplash.com/400x175/?github summary: API docs for the monitoring plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'monitoring'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/monitoring_collection.mdx b/api_docs/monitoring_collection.mdx index ce91bad4a8357..69c1d0a0e8f3f 100644 --- a/api_docs/monitoring_collection.mdx +++ b/api_docs/monitoring_collection.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/monitoringCollection title: "monitoringCollection" image: https://source.unsplash.com/400x175/?github summary: API docs for the monitoringCollection plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'monitoringCollection'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/navigation.mdx b/api_docs/navigation.mdx index 615f685f55735..fd380ca88a7e1 100644 --- a/api_docs/navigation.mdx +++ b/api_docs/navigation.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/navigation title: "navigation" image: https://source.unsplash.com/400x175/?github summary: API docs for the navigation plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'navigation'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/newsfeed.mdx b/api_docs/newsfeed.mdx index ac9c25bafbd3c..af7b5e812db40 100644 --- a/api_docs/newsfeed.mdx +++ b/api_docs/newsfeed.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/newsfeed title: "newsfeed" image: https://source.unsplash.com/400x175/?github summary: API docs for the newsfeed plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'newsfeed'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/observability.devdocs.json b/api_docs/observability.devdocs.json index 84b5b8b401f4f..5e64c2d86ab6b 100644 --- a/api_docs/observability.devdocs.json +++ b/api_docs/observability.devdocs.json @@ -5416,7 +5416,9 @@ "TransportRequestOptions", " | undefined): Promise<", "SearchResponse", - ">; }; eql: ", + ">; }; cluster: ", + "default", + "; eql: ", "default", "; create: { (this: That, params: ", "CreateRequest", @@ -5648,9 +5650,7 @@ "TransportRequestOptions", " | undefined): Promise<", "ClearScrollResponse", - ">; }; cluster: ", - "default", - "; count: { (this: That, params?: ", + ">; }; count: { (this: That, params?: ", "CountRequest", " | ", "CountRequest", diff --git a/api_docs/observability.mdx b/api_docs/observability.mdx index 2b0b022c59b7e..09f340dde85c8 100644 --- a/api_docs/observability.mdx +++ b/api_docs/observability.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/observability title: "observability" image: https://source.unsplash.com/400x175/?github summary: API docs for the observability plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observability'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/osquery.mdx b/api_docs/osquery.mdx index 4c15df3238d8c..5dd65abe02ac4 100644 --- a/api_docs/osquery.mdx +++ b/api_docs/osquery.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/osquery title: "osquery" image: https://source.unsplash.com/400x175/?github summary: API docs for the osquery plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'osquery'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/plugin_directory.mdx b/api_docs/plugin_directory.mdx index 5c317f64abad5..2a080a8847b52 100644 --- a/api_docs/plugin_directory.mdx +++ b/api_docs/plugin_directory.mdx @@ -3,7 +3,7 @@ id: kibDevDocsPluginDirectory slug: /kibana-dev-docs/api-meta/plugin-api-directory title: Directory summary: Directory of public APIs available through plugins or packages. -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- @@ -18,7 +18,7 @@ warning: This document is auto-generated and is meant to be viewed inside our ex | API Count | Any Count | Missing comments | Missing exports | |--------------|----------|-----------------|--------| -| 27911 | 176 | 19808 | 880 | +| 27980 | 176 | 19807 | 882 | ## Plugin Directory @@ -27,15 +27,15 @@ warning: This document is auto-generated and is meant to be viewed inside our ex | | [Response Ops](https://github.com/orgs/elastic/teams/response-ops) | - | 241 | 0 | 236 | 19 | | | [Kibana Core](https://github.com/orgs/elastic/teams/kibana-core) | - | 23 | 0 | 19 | 1 | | | [Machine Learning UI](https://github.com/orgs/elastic/teams/ml-ui) | AIOps plugin maintained by ML team. | 9 | 0 | 0 | 1 | -| | [Response Ops](https://github.com/orgs/elastic/teams/response-ops) | - | 367 | 0 | 358 | 20 | -| | [APM UI](https://github.com/orgs/elastic/teams/apm-ui) | The user interface for Elastic APM | 40 | 0 | 40 | 55 | +| | [Response Ops](https://github.com/orgs/elastic/teams/response-ops) | - | 368 | 0 | 359 | 21 | +| | [APM UI](https://github.com/orgs/elastic/teams/apm-ui) | The user interface for Elastic APM | 40 | 0 | 40 | 53 | | | [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. | 78 | 1 | 69 | 2 | | | [Kibana Presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Adds Canvas application to Kibana | 9 | 0 | 8 | 3 | | | [ResponseOps](https://github.com/orgs/elastic/teams/response-ops) | The Case management system in Kibana | 81 | 0 | 65 | 28 | | | [Vis Editors](https://github.com/orgs/elastic/teams/kibana-vis-editors) | - | 272 | 2 | 253 | 9 | | | [Kibana Core](https://github.com/orgs/elastic/teams/kibana-core) | - | 29 | 0 | 24 | 0 | -| | [Cloud Security Posture](https://github.com/orgs/elastic/teams/cloud-posture-security) | The cloud security posture plugin | 6 | 0 | 6 | 0 | +| | [Cloud Security Posture](https://github.com/orgs/elastic/teams/cloud-posture-security) | The cloud security posture plugin | 19 | 0 | 2 | 1 | | | [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 | 206 | 0 | 198 | 7 | | | [Kibana Core](https://github.com/orgs/elastic/teams/kibana-core) | - | 2470 | 5 | 664 | 17 | @@ -43,9 +43,9 @@ warning: This document is auto-generated and is meant to be viewed inside our ex | | [Fleet](https://github.com/orgs/elastic/teams/fleet) | Add custom data integrations so they can be displayed in the Fleet integrations app | 102 | 0 | 83 | 1 | | | [Kibana Presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Adds the Dashboard app to Kibana | 143 | 0 | 141 | 12 | | | [App Services](https://github.com/orgs/elastic/teams/kibana-app-services) | - | 52 | 0 | 51 | 0 | -| | [App Services](https://github.com/orgs/elastic/teams/kibana-app-services) | Data services are useful for searching and querying data from Elasticsearch. Helpful utilities include: a re-usable react query bar, KQL autocomplete, async search, Data Views (Index Patterns) and field formatters. | 3086 | 34 | 2413 | 21 | +| | [App Services](https://github.com/orgs/elastic/teams/kibana-app-services) | Data services are useful for searching and querying data from Elasticsearch. Helpful utilities include: a re-usable react query bar, KQL autocomplete, async search, Data Views (Index Patterns) and field formatters. | 3094 | 34 | 2421 | 21 | | | [App Services](https://github.com/orgs/elastic/teams/kibana-app-services) | This plugin provides the ability to create data views via a modal flyout inside Kibana apps | 15 | 0 | 7 | 0 | -| | [App Services](https://github.com/orgs/elastic/teams/kibana-app-services) | Reusable data view field editor across Kibana | 41 | 0 | 36 | 3 | +| | [App Services](https://github.com/orgs/elastic/teams/kibana-app-services) | Reusable data view field editor across Kibana | 49 | 0 | 29 | 3 | | | [App Services](https://github.com/orgs/elastic/teams/kibana-app-services) | Data view management app | 2 | 0 | 2 | 0 | | | [App Services](https://github.com/orgs/elastic/teams/kibana-app-services) | Data services are useful for searching and querying data from Elasticsearch. Helpful utilities include: a re-usable react query bar, KQL autocomplete, async search, Data Views (Index Patterns) and field formatters. | 945 | 0 | 203 | 0 | | | [Machine Learning UI](https://github.com/orgs/elastic/teams/ml-ui) | The Data Visualizer tools help you understand your data, by analyzing the metrics and fields in a log file or an existing Elasticsearch index. | 28 | 3 | 24 | 1 | @@ -76,7 +76,7 @@ warning: This document is auto-generated and is meant to be viewed inside our ex | | [Kibana Core](https://github.com/orgs/elastic/teams/kibana-core) | - | 222 | 0 | 95 | 2 | | | [App Services](https://github.com/orgs/elastic/teams/kibana-app-services) | Index pattern fields and ambiguous values formatters | 288 | 5 | 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 | -| | [Fleet](https://github.com/orgs/elastic/teams/fleet) | - | 1537 | 8 | 1405 | 10 | +| | [Fleet](https://github.com/orgs/elastic/teams/fleet) | - | 1541 | 8 | 1409 | 10 | | | [Kibana Core](https://github.com/orgs/elastic/teams/kibana-core) | - | 68 | 0 | 14 | 5 | | globalSearchBar | [Kibana Core](https://github.com/orgs/elastic/teams/kibana-core) | - | 0 | 0 | 0 | 0 | | globalSearchProviders | [Kibana Core](https://github.com/orgs/elastic/teams/kibana-core) | - | 0 | 0 | 0 | 0 | @@ -102,7 +102,7 @@ warning: This document is auto-generated and is meant to be viewed inside our ex | | [Security detections response](https://github.com/orgs/elastic/teams/security-detections-response) | - | 198 | 0 | 90 | 49 | | logstash | [Logstash](https://github.com/orgs/elastic/teams/logstash) | - | 0 | 0 | 0 | 0 | | | [Vis Editors](https://github.com/orgs/elastic/teams/kibana-vis-editors) | - | 41 | 0 | 41 | 6 | -| | [GIS](https://github.com/orgs/elastic/teams/kibana-gis) | - | 250 | 0 | 249 | 24 | +| | [GIS](https://github.com/orgs/elastic/teams/kibana-gis) | - | 250 | 0 | 249 | 25 | | | [GIS](https://github.com/orgs/elastic/teams/kibana-gis) | - | 67 | 0 | 67 | 0 | | | [Machine Learning UI](https://github.com/orgs/elastic/teams/ml-ui) | This plugin provides access to the machine learning features provided by Elastic. | 244 | 9 | 71 | 30 | | | [Stack Monitoring](https://github.com/orgs/elastic/teams/stack-monitoring-ui) | - | 11 | 0 | 9 | 1 | @@ -116,7 +116,7 @@ warning: This document is auto-generated and is meant to be viewed inside our ex | | [Stack Management](https://github.com/orgs/elastic/teams/kibana-stack-management) | - | 4 | 0 | 4 | 0 | | | [Kibana Reporting Services](https://github.com/orgs/elastic/teams/kibana-reporting-services) | Reporting Services enables applications to feature reports that the user can automate with Watcher and download later. | 36 | 0 | 16 | 0 | | | [Stack Management](https://github.com/orgs/elastic/teams/kibana-stack-management) | - | 21 | 0 | 21 | 0 | -| | [RAC](https://github.com/orgs/elastic/teams/rac) | - | 205 | 0 | 177 | 10 | +| | [RAC](https://github.com/orgs/elastic/teams/rac) | - | 208 | 0 | 180 | 10 | | | [App Services](https://github.com/orgs/elastic/teams/kibana-app-services) | - | 24 | 0 | 19 | 2 | | | [Kibana Core](https://github.com/orgs/elastic/teams/kibana-core) | - | 192 | 2 | 151 | 5 | | | [Kibana Core](https://github.com/orgs/elastic/teams/kibana-core) | - | 125 | 0 | 112 | 0 | @@ -125,7 +125,7 @@ warning: This document is auto-generated and is meant to be viewed inside our ex | | [App Services](https://github.com/orgs/elastic/teams/kibana-app-services) | - | 32 | 0 | 13 | 0 | | | [Kibana Reporting Services](https://github.com/orgs/elastic/teams/kibana-reporting-services) | Kibana Screenshotting Plugin | 27 | 0 | 8 | 4 | | searchprofiler | [Stack Management](https://github.com/orgs/elastic/teams/kibana-stack-management) | - | 0 | 0 | 0 | 0 | -| | [Platform Security](https://github.com/orgs/elastic/teams/kibana-security) | This plugin provides authentication and authorization features, and exposes functionality to understand the capabilities of the currently authenticated user. | 197 | 0 | 100 | 0 | +| | [Platform Security](https://github.com/orgs/elastic/teams/kibana-security) | This plugin provides authentication and authorization features, and exposes functionality to understand the capabilities of the currently authenticated user. | 225 | 0 | 90 | 0 | | | [Security solution](https://github.com/orgs/elastic/teams/security-solution) | - | 52 | 0 | 51 | 22 | | | [Security Team](https://github.com/orgs/elastic/teams/security-team) | - | 3 | 0 | 3 | 1 | | | [App Services](https://github.com/orgs/elastic/teams/kibana-app-services) | Adds URL Service and sharing capabilities to Kibana | 114 | 0 | 55 | 10 | @@ -142,7 +142,7 @@ warning: This document is auto-generated and is meant to be viewed inside our ex | | [Security solution](https://github.com/orgs/elastic/teams/security-solution) | - | 447 | 1 | 342 | 32 | | | [Machine Learning UI](https://github.com/orgs/elastic/teams/ml-ui) | This plugin provides access to the transforms features provided by Elastic. Transforms enable you to convert existing Elasticsearch indices into summarized indices, which provide opportunities for new insights and analytics. | 4 | 0 | 4 | 1 | | translations | [Kibana Localization](https://github.com/orgs/elastic/teams/kibana-localization) | - | 0 | 0 | 0 | 0 | -| | [Response Ops](https://github.com/orgs/elastic/teams/response-ops) | - | 424 | 0 | 403 | 41 | +| | [Response Ops](https://github.com/orgs/elastic/teams/response-ops) | - | 420 | 0 | 399 | 42 | | | [App Services](https://github.com/orgs/elastic/teams/kibana-app-services) | Adds UI Actions service to Kibana | 130 | 0 | 91 | 11 | | | [App Services](https://github.com/orgs/elastic/teams/kibana-app-services) | Extends UI Actions plugin with more functionality | 205 | 0 | 142 | 9 | | | [Unified Search](https://github.com/orgs/elastic/teams/kibana-app-services) | Contains all the key functionality of Kibana's unified search experience.Contains all the key functionality of Kibana's unified search experience. | 84 | 2 | 80 | 13 | @@ -306,13 +306,13 @@ warning: This document is auto-generated and is meant to be viewed inside our ex | | [Owner missing] | Security Solution utilities for React hooks | 15 | 0 | 7 | 0 | | | [Owner missing] | io ts utilities and types to be shared with plugins from the security solution project | 148 | 0 | 129 | 0 | | | [Owner missing] | io ts utilities and types to be shared with plugins from the security solution project | 458 | 1 | 446 | 0 | -| | [Owner missing] | io ts utilities and types to be shared with plugins from the security solution project | 48 | 0 | 26 | 0 | +| | [Owner missing] | io ts utilities and types to be shared with plugins from the security solution project | 54 | 0 | 32 | 0 | | | [Owner missing] | io ts utilities and types to be shared with plugins from the security solution project | 28 | 0 | 21 | 0 | | | [Owner missing] | security solution list REST API | 59 | 0 | 58 | 0 | | | [Owner missing] | security solution list constants to use across plugins such lists, security_solution, cases, etc... | 26 | 0 | 12 | 0 | | | [Owner missing] | Security solution list ReactJS hooks | 56 | 0 | 44 | 0 | | | [Owner missing] | security solution list utilities | 235 | 0 | 187 | 0 | -| | [Owner missing] | security solution rule utilities to use across plugins | 24 | 0 | 21 | 0 | +| | [Owner missing] | security solution rule utilities to use across plugins | 26 | 0 | 23 | 0 | | | [Owner missing] | security solution t-grid packages will allow sharing components between timelines and security_solution plugin until we transfer all functionality to timelines plugin | 120 | 0 | 116 | 0 | | | [Owner missing] | security solution utilities to use across plugins such lists, security_solution, cases, etc... | 31 | 0 | 29 | 0 | | | [Owner missing] | - | 53 | 0 | 50 | 1 | diff --git a/api_docs/presentation_util.mdx b/api_docs/presentation_util.mdx index b4b49b91a3da6..097409834d83e 100644 --- a/api_docs/presentation_util.mdx +++ b/api_docs/presentation_util.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/presentationUtil title: "presentationUtil" image: https://source.unsplash.com/400x175/?github summary: API docs for the presentationUtil plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'presentationUtil'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/remote_clusters.mdx b/api_docs/remote_clusters.mdx index ed83709b35570..28e2e6c19e2d1 100644 --- a/api_docs/remote_clusters.mdx +++ b/api_docs/remote_clusters.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/remoteClusters title: "remoteClusters" image: https://source.unsplash.com/400x175/?github summary: API docs for the remoteClusters plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'remoteClusters'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/reporting.mdx b/api_docs/reporting.mdx index c96754733b84a..d34463567e3ca 100644 --- a/api_docs/reporting.mdx +++ b/api_docs/reporting.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/reporting title: "reporting" image: https://source.unsplash.com/400x175/?github summary: API docs for the reporting plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'reporting'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/rollup.mdx b/api_docs/rollup.mdx index 0dc3febe2c59f..6235cf3fbcda3 100644 --- a/api_docs/rollup.mdx +++ b/api_docs/rollup.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/rollup title: "rollup" image: https://source.unsplash.com/400x175/?github summary: API docs for the rollup plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'rollup'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/rule_registry.devdocs.json b/api_docs/rule_registry.devdocs.json index 59d7ede718741..0ee80d8c5d8b9 100644 --- a/api_docs/rule_registry.devdocs.json +++ b/api_docs/rule_registry.devdocs.json @@ -1143,7 +1143,7 @@ "label": "resourceType", "description": [], "signature": [ - "\"index\" | \"namespace\"" + "\"namespace\" | \"index\"" ], "path": "x-pack/plugins/rule_registry/server/rule_data_plugin_service/errors.ts", "deprecated": false, @@ -2723,6 +2723,16 @@ ], "path": "x-pack/plugins/rule_registry/server/utils/persistence_types.ts", "deprecated": false + }, + { + "parentPluginId": "ruleRegistry", + "id": "def-server.PersistenceAlertServiceResult.alertsWereTruncated", + "type": "boolean", + "tags": [], + "label": "alertsWereTruncated", + "description": [], + "path": "x-pack/plugins/rule_registry/server/utils/persistence_types.ts", + "deprecated": false } ], "initialIsOpen": false @@ -2745,7 +2755,7 @@ "label": "alertWithPersistence", "description": [], "signature": [ - "(alerts: { _id: string; _source: T; }[], refresh: boolean | \"wait_for\") => Promise<", + "(alerts: { _id: string; _source: T; }[], refresh: boolean | \"wait_for\", maxAlerts?: number | undefined) => Promise<", { "pluginId": "ruleRegistry", "scope": "server", @@ -2784,6 +2794,19 @@ ], "path": "x-pack/plugins/rule_registry/server/utils/persistence_types.ts", "deprecated": false + }, + { + "parentPluginId": "ruleRegistry", + "id": "def-server.PersistenceServices.alertWithPersistence.$3", + "type": "number", + "tags": [], + "label": "maxAlerts", + "description": [], + "signature": [ + "number | undefined" + ], + "path": "x-pack/plugins/rule_registry/server/utils/persistence_types.ts", + "deprecated": false } ] } @@ -3248,7 +3271,7 @@ "label": "PersistenceAlertService", "description": [], "signature": [ - "(alerts: { _id: string; _source: T; }[], refresh: boolean | \"wait_for\") => Promise<", + "(alerts: { _id: string; _source: T; }[], refresh: boolean | \"wait_for\", maxAlerts?: number | undefined) => Promise<", { "pluginId": "ruleRegistry", "scope": "server", @@ -3287,6 +3310,19 @@ ], "path": "x-pack/plugins/rule_registry/server/utils/persistence_types.ts", "deprecated": false + }, + { + "parentPluginId": "ruleRegistry", + "id": "def-server.PersistenceAlertService.$3", + "type": "number", + "tags": [], + "label": "maxAlerts", + "description": [], + "signature": [ + "number | undefined" + ], + "path": "x-pack/plugins/rule_registry/server/utils/persistence_types.ts", + "deprecated": false } ], "initialIsOpen": false diff --git a/api_docs/rule_registry.mdx b/api_docs/rule_registry.mdx index 35ce73d45bb03..86081fa33aaca 100644 --- a/api_docs/rule_registry.mdx +++ b/api_docs/rule_registry.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/ruleRegistry title: "ruleRegistry" image: https://source.unsplash.com/400x175/?github summary: API docs for the ruleRegistry plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ruleRegistry'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- @@ -18,7 +18,7 @@ Contact [RAC](https://github.com/orgs/elastic/teams/rac) for questions regarding | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 205 | 0 | 177 | 10 | +| 208 | 0 | 180 | 10 | ## Server diff --git a/api_docs/runtime_fields.mdx b/api_docs/runtime_fields.mdx index 75fea26ef7b10..691dd8bfb0355 100644 --- a/api_docs/runtime_fields.mdx +++ b/api_docs/runtime_fields.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/runtimeFields title: "runtimeFields" image: https://source.unsplash.com/400x175/?github summary: API docs for the runtimeFields plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'runtimeFields'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/saved_objects.mdx b/api_docs/saved_objects.mdx index 7878e82d46d2f..e5b7eaa7a0bc5 100644 --- a/api_docs/saved_objects.mdx +++ b/api_docs/saved_objects.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/savedObjects title: "savedObjects" image: https://source.unsplash.com/400x175/?github summary: API docs for the savedObjects plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjects'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/saved_objects_management.mdx b/api_docs/saved_objects_management.mdx index 9142384a0be56..399ae8e016837 100644 --- a/api_docs/saved_objects_management.mdx +++ b/api_docs/saved_objects_management.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/savedObjectsManagement title: "savedObjectsManagement" image: https://source.unsplash.com/400x175/?github summary: API docs for the savedObjectsManagement plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsManagement'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/saved_objects_tagging.mdx b/api_docs/saved_objects_tagging.mdx index 5fbbbc0c29b12..3814574b9cbaa 100644 --- a/api_docs/saved_objects_tagging.mdx +++ b/api_docs/saved_objects_tagging.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/savedObjectsTagging title: "savedObjectsTagging" image: https://source.unsplash.com/400x175/?github summary: API docs for the savedObjectsTagging plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsTagging'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/saved_objects_tagging_oss.mdx b/api_docs/saved_objects_tagging_oss.mdx index e985c1e4e60ba..bec2172fa830a 100644 --- a/api_docs/saved_objects_tagging_oss.mdx +++ b/api_docs/saved_objects_tagging_oss.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/savedObjectsTaggingOss title: "savedObjectsTaggingOss" image: https://source.unsplash.com/400x175/?github summary: API docs for the savedObjectsTaggingOss plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsTaggingOss'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/screenshot_mode.mdx b/api_docs/screenshot_mode.mdx index 610c0b2cf4816..3d42974c08a83 100644 --- a/api_docs/screenshot_mode.mdx +++ b/api_docs/screenshot_mode.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/screenshotMode title: "screenshotMode" image: https://source.unsplash.com/400x175/?github summary: API docs for the screenshotMode plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'screenshotMode'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/screenshotting.mdx b/api_docs/screenshotting.mdx index 93c8e4f9553bc..c5d5a62f6afaf 100644 --- a/api_docs/screenshotting.mdx +++ b/api_docs/screenshotting.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/screenshotting title: "screenshotting" image: https://source.unsplash.com/400x175/?github summary: API docs for the screenshotting plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'screenshotting'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/security.devdocs.json b/api_docs/security.devdocs.json index d254687ce1d47..8812e523128d3 100644 --- a/api_docs/security.devdocs.json +++ b/api_docs/security.devdocs.json @@ -1363,7 +1363,9 @@ "type": "Interface", "tags": [], "label": "CheckPrivilegesPayload", - "description": [], + "description": [ + "\nPrivileges that can be checked for the Kibana users." + ], "path": "x-pack/plugins/security/server/authorization/types.ts", "deprecated": false, "children": [ @@ -1373,7 +1375,9 @@ "type": "CompoundType", "tags": [], "label": "kibana", - "description": [], + "description": [ + "\nA list of the Kibana specific privileges (usually generated with `security.authz.actions.*.get(...)`)." + ], "signature": [ "string | string[] | undefined" ], @@ -1386,7 +1390,9 @@ "type": "Object", "tags": [], "label": "elasticsearch", - "description": [], + "description": [ + "\nA set of the Elasticsearch cluster and index privileges." + ], "signature": [ "{ cluster: string[]; index: Record; } | undefined" ], @@ -1610,6 +1616,315 @@ } ], "initialIsOpen": false + }, + { + "parentPluginId": "security", + "id": "def-server.UserProfileBulkGetParams", + "type": "Interface", + "tags": [], + "label": "UserProfileBulkGetParams", + "description": [ + "\nParameters for the bulk get API." + ], + "path": "x-pack/plugins/security/server/user_profile/user_profile_service.ts", + "deprecated": false, + "children": [ + { + "parentPluginId": "security", + "id": "def-server.UserProfileBulkGetParams.uids", + "type": "Object", + "tags": [], + "label": "uids", + "description": [ + "\nList of user profile identifiers." + ], + "signature": [ + "Set" + ], + "path": "x-pack/plugins/security/server/user_profile/user_profile_service.ts", + "deprecated": false + }, + { + "parentPluginId": "security", + "id": "def-server.UserProfileBulkGetParams.dataPath", + "type": "string", + "tags": [], + "label": "dataPath", + "description": [ + "\nBy default, suggest API returns user information, but does not return any user data. The optional \"dataPath\"\nparameter can be used to return personal data for this user (within `kibana` namespace only)." + ], + "signature": [ + "string | undefined" + ], + "path": "x-pack/plugins/security/server/user_profile/user_profile_service.ts", + "deprecated": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "security", + "id": "def-server.UserProfileRequiredPrivileges", + "type": "Interface", + "tags": [], + "label": "UserProfileRequiredPrivileges", + "description": [ + "\nThe set of privileges that users associated with the suggested user profile should have for a specified space id." + ], + "path": "x-pack/plugins/security/server/user_profile/user_profile_service.ts", + "deprecated": false, + "children": [ + { + "parentPluginId": "security", + "id": "def-server.UserProfileRequiredPrivileges.spaceId", + "type": "string", + "tags": [], + "label": "spaceId", + "description": [ + "\nThe id of the Kibana Space." + ], + "path": "x-pack/plugins/security/server/user_profile/user_profile_service.ts", + "deprecated": false + }, + { + "parentPluginId": "security", + "id": "def-server.UserProfileRequiredPrivileges.privileges", + "type": "Object", + "tags": [], + "label": "privileges", + "description": [ + "\nThe set of the Kibana specific application privileges." + ], + "signature": [ + "{ kibana: string[]; }" + ], + "path": "x-pack/plugins/security/server/user_profile/user_profile_service.ts", + "deprecated": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "security", + "id": "def-server.UserProfileServiceStart", + "type": "Interface", + "tags": [], + "label": "UserProfileServiceStart", + "description": [ + "\nA set of methods to work with Kibana user profiles." + ], + "path": "x-pack/plugins/security/server/user_profile/user_profile_service.ts", + "deprecated": false, + "children": [ + { + "parentPluginId": "security", + "id": "def-server.UserProfileServiceStart.bulkGet", + "type": "Function", + "tags": [], + "label": "bulkGet", + "description": [ + "\nRetrieves multiple user profiles by their identifiers." + ], + "signature": [ + "(params: ", + { + "pluginId": "security", + "scope": "server", + "docId": "kibSecurityPluginApi", + "section": "def-server.UserProfileBulkGetParams", + "text": "UserProfileBulkGetParams" + }, + ") => Promise<", + { + "pluginId": "security", + "scope": "common", + "docId": "kibSecurityPluginApi", + "section": "def-common.UserProfile", + "text": "UserProfile" + }, + "[]>" + ], + "path": "x-pack/plugins/security/server/user_profile/user_profile_service.ts", + "deprecated": false, + "children": [ + { + "parentPluginId": "security", + "id": "def-server.UserProfileServiceStart.bulkGet.$1", + "type": "Object", + "tags": [], + "label": "params", + "description": [ + "Bulk get operation parameters." + ], + "signature": [ + { + "pluginId": "security", + "scope": "server", + "docId": "kibSecurityPluginApi", + "section": "def-server.UserProfileBulkGetParams", + "text": "UserProfileBulkGetParams" + } + ], + "path": "x-pack/plugins/security/server/user_profile/user_profile_service.ts", + "deprecated": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "security", + "id": "def-server.UserProfileServiceStart.suggest", + "type": "Function", + "tags": [], + "label": "suggest", + "description": [ + "\nRetrieves a single user profile by identifier." + ], + "signature": [ + "(params: ", + { + "pluginId": "security", + "scope": "server", + "docId": "kibSecurityPluginApi", + "section": "def-server.UserProfileSuggestParams", + "text": "UserProfileSuggestParams" + }, + ") => Promise<", + { + "pluginId": "security", + "scope": "common", + "docId": "kibSecurityPluginApi", + "section": "def-common.UserProfile", + "text": "UserProfile" + }, + "[]>" + ], + "path": "x-pack/plugins/security/server/user_profile/user_profile_service.ts", + "deprecated": false, + "children": [ + { + "parentPluginId": "security", + "id": "def-server.UserProfileServiceStart.suggest.$1", + "type": "Object", + "tags": [], + "label": "params", + "description": [ + "Suggest operation parameters." + ], + "signature": [ + { + "pluginId": "security", + "scope": "server", + "docId": "kibSecurityPluginApi", + "section": "def-server.UserProfileSuggestParams", + "text": "UserProfileSuggestParams" + } + ], + "path": "x-pack/plugins/security/server/user_profile/user_profile_service.ts", + "deprecated": false, + "isRequired": true + } + ], + "returnComment": [] + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "security", + "id": "def-server.UserProfileSuggestParams", + "type": "Interface", + "tags": [], + "label": "UserProfileSuggestParams", + "description": [ + "\nParameters for the suggest API." + ], + "path": "x-pack/plugins/security/server/user_profile/user_profile_service.ts", + "deprecated": false, + "children": [ + { + "parentPluginId": "security", + "id": "def-server.UserProfileSuggestParams.name", + "type": "string", + "tags": [], + "label": "name", + "description": [ + "\nQuery string used to match name-related fields in user profiles. The following fields are treated as\nname-related: username, full_name and email." + ], + "path": "x-pack/plugins/security/server/user_profile/user_profile_service.ts", + "deprecated": false + }, + { + "parentPluginId": "security", + "id": "def-server.UserProfileSuggestParams.size", + "type": "number", + "tags": [], + "label": "size", + "description": [ + "\nDesired number of suggestion to return. The default value is 10." + ], + "signature": [ + "number | undefined" + ], + "path": "x-pack/plugins/security/server/user_profile/user_profile_service.ts", + "deprecated": false + }, + { + "parentPluginId": "security", + "id": "def-server.UserProfileSuggestParams.dataPath", + "type": "string", + "tags": [], + "label": "dataPath", + "description": [ + "\nBy default, suggest API returns user information, but does not return any user data. The optional \"dataPath\"\nparameter can be used to return personal data for this user (within `kibana` namespace only)." + ], + "signature": [ + "string | undefined" + ], + "path": "x-pack/plugins/security/server/user_profile/user_profile_service.ts", + "deprecated": false + }, + { + "parentPluginId": "security", + "id": "def-server.UserProfileSuggestParams.requiredPrivileges", + "type": "Object", + "tags": [], + "label": "requiredPrivileges", + "description": [ + "\nThe set of the privileges that users associated with the suggested user profile should have in the specified space.\nIf not specified, privileges check isn't performed and all matched profiles are returned irrespective to the\nprivileges of the associated users." + ], + "signature": [ + { + "pluginId": "security", + "scope": "server", + "docId": "kibSecurityPluginApi", + "section": "def-server.UserProfileRequiredPrivileges", + "text": "UserProfileRequiredPrivileges" + }, + " | undefined" + ], + "path": "x-pack/plugins/security/server/user_profile/user_profile_service.ts", + "deprecated": false + } + ], + "initialIsOpen": false } ], "enums": [], @@ -1968,6 +2283,27 @@ ], "path": "x-pack/plugins/security/server/plugin.ts", "deprecated": false + }, + { + "parentPluginId": "security", + "id": "def-server.SecurityPluginStart.userProfiles", + "type": "Object", + "tags": [], + "label": "userProfiles", + "description": [ + "\nUser profiles services to retrieve user profiles." + ], + "signature": [ + { + "pluginId": "security", + "scope": "server", + "docId": "kibSecurityPluginApi", + "section": "def-server.UserProfileServiceStart", + "text": "UserProfileServiceStart" + } + ], + "path": "x-pack/plugins/security/server/plugin.ts", + "deprecated": false } ], "lifecycle": "start", @@ -2193,69 +2529,6 @@ ], "initialIsOpen": false }, - { - "parentPluginId": "security", - "id": "def-common.AuthenticatedUserProfile", - "type": "Interface", - "tags": [], - "label": "AuthenticatedUserProfile", - "description": [ - "\nUser profile enriched with session information." - ], - "signature": [ - { - "pluginId": "security", - "scope": "common", - "docId": "kibSecurityPluginApi", - "section": "def-common.AuthenticatedUserProfile", - "text": "AuthenticatedUserProfile" - }, - " extends ", - { - "pluginId": "security", - "scope": "common", - "docId": "kibSecurityPluginApi", - "section": "def-common.UserProfile", - "text": "UserProfile" - }, - "" - ], - "path": "x-pack/plugins/security/common/model/user_profile.ts", - "deprecated": false, - "children": [ - { - "parentPluginId": "security", - "id": "def-common.AuthenticatedUserProfile.user", - "type": "CompoundType", - "tags": [], - "label": "user", - "description": [ - "\nInformation about the currently authenticated user that owns the profile." - ], - "signature": [ - { - "pluginId": "security", - "scope": "common", - "docId": "kibSecurityPluginApi", - "section": "def-common.UserInfo", - "text": "UserInfo" - }, - " & Pick<", - { - "pluginId": "security", - "scope": "common", - "docId": "kibSecurityPluginApi", - "section": "def-common.AuthenticatedUser", - "text": "AuthenticatedUser" - }, - ", \"authentication_provider\">" - ], - "path": "x-pack/plugins/security/common/model/user_profile.ts", - "deprecated": false - } - ], - "initialIsOpen": false - }, { "parentPluginId": "security", "id": "def-common.AuthenticationProvider", @@ -2274,7 +2547,9 @@ "type": "string", "tags": [], "label": "type", - "description": [], + "description": [ + "\nType of the Kibana authentication provider." + ], "path": "x-pack/plugins/security/common/model/authentication_provider.ts", "deprecated": false }, @@ -2284,7 +2559,9 @@ "type": "string", "tags": [], "label": "name", - "description": [], + "description": [ + "\nName of the Kibana authentication provider (arbitrary string)." + ], "path": "x-pack/plugins/security/common/model/authentication_provider.ts", "deprecated": false } @@ -2303,15 +2580,86 @@ "children": [ { "parentPluginId": "security", - "id": "def-common.FeaturesPrivileges.Unnamed", - "type": "IndexSignature", + "id": "def-common.FeaturesPrivileges.Unnamed", + "type": "IndexSignature", + "tags": [], + "label": "[featureId: string]: string[]", + "description": [], + "signature": [ + "[featureId: string]: string[]" + ], + "path": "x-pack/plugins/security/common/model/features_privileges.ts", + "deprecated": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "security", + "id": "def-common.GetUserProfileResponse", + "type": "Interface", + "tags": [], + "label": "GetUserProfileResponse", + "description": [ + "\nUser profile enriched with session information." + ], + "signature": [ + { + "pluginId": "security", + "scope": "common", + "docId": "kibSecurityPluginApi", + "section": "def-common.GetUserProfileResponse", + "text": "GetUserProfileResponse" + }, + " extends ", + { + "pluginId": "security", + "scope": "common", + "docId": "kibSecurityPluginApi", + "section": "def-common.UserProfileWithSecurity", + "text": "UserProfileWithSecurity" + }, + "" + ], + "path": "x-pack/plugins/security/common/model/user_profile.ts", + "deprecated": false, + "children": [ + { + "parentPluginId": "security", + "id": "def-common.GetUserProfileResponse.user", + "type": "CompoundType", "tags": [], - "label": "[featureId: string]: string[]", - "description": [], + "label": "user", + "description": [ + "\nInformation about the currently authenticated user that owns the profile." + ], "signature": [ - "[featureId: string]: string[]" + { + "pluginId": "security", + "scope": "common", + "docId": "kibSecurityPluginApi", + "section": "def-common.UserProfileUserInfoWithSecurity", + "text": "UserProfileUserInfoWithSecurity" + }, + " & Pick<", + { + "pluginId": "security", + "scope": "common", + "docId": "kibSecurityPluginApi", + "section": "def-common.AuthenticatedUser", + "text": "AuthenticatedUser" + }, + ", \"authentication_provider\">" ], - "path": "x-pack/plugins/security/common/model/features_privileges.ts", + "path": "x-pack/plugins/security/common/model/user_profile.ts", "deprecated": false } ], @@ -3003,7 +3351,9 @@ "type": "Interface", "tags": [], "label": "User", - "description": [], + "description": [ + "\nA set of fields describing Kibana user." + ], "path": "x-pack/plugins/security/common/model/user.ts", "deprecated": false, "children": [ @@ -3084,10 +3434,95 @@ }, { "parentPluginId": "security", - "id": "def-common.UserAvatarData", + "id": "def-common.UserProfile", + "type": "Interface", + "tags": [], + "label": "UserProfile", + "description": [ + "\nDescribes basic properties stored in user profile." + ], + "signature": [ + { + "pluginId": "security", + "scope": "common", + "docId": "kibSecurityPluginApi", + "section": "def-common.UserProfile", + "text": "UserProfile" + }, + "" + ], + "path": "x-pack/plugins/security/common/model/user_profile.ts", + "deprecated": false, + "children": [ + { + "parentPluginId": "security", + "id": "def-common.UserProfile.uid", + "type": "string", + "tags": [], + "label": "uid", + "description": [ + "\nUnique ID for of the user profile." + ], + "path": "x-pack/plugins/security/common/model/user_profile.ts", + "deprecated": false + }, + { + "parentPluginId": "security", + "id": "def-common.UserProfile.enabled", + "type": "boolean", + "tags": [], + "label": "enabled", + "description": [ + "\nIndicates whether user profile is enabled or not." + ], + "path": "x-pack/plugins/security/common/model/user_profile.ts", + "deprecated": false + }, + { + "parentPluginId": "security", + "id": "def-common.UserProfile.user", + "type": "Object", + "tags": [], + "label": "user", + "description": [ + "\nInformation about the user that owns profile." + ], + "signature": [ + { + "pluginId": "security", + "scope": "common", + "docId": "kibSecurityPluginApi", + "section": "def-common.UserProfileUserInfo", + "text": "UserProfileUserInfo" + } + ], + "path": "x-pack/plugins/security/common/model/user_profile.ts", + "deprecated": false + }, + { + "parentPluginId": "security", + "id": "def-common.UserProfile.data", + "type": "Object", + "tags": [], + "label": "data", + "description": [ + "\nUser specific data associated with the profile." + ], + "signature": [ + "{ [P in keyof D]?: D[P] | undefined; }" + ], + "path": "x-pack/plugins/security/common/model/user_profile.ts", + "deprecated": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "security", + "id": "def-common.UserProfileAvatarData", "type": "Interface", "tags": [], - "label": "UserAvatarData", + "label": "UserProfileAvatarData", "description": [ "\nAvatar stored in user profile." ], @@ -3096,11 +3531,13 @@ "children": [ { "parentPluginId": "security", - "id": "def-common.UserAvatarData.initials", + "id": "def-common.UserProfileAvatarData.initials", "type": "string", "tags": [], "label": "initials", - "description": [], + "description": [ + "\nOptional initials (two letters) of the user to use as avatar if avatar picture isn't specified." + ], "signature": [ "string | undefined" ], @@ -3109,11 +3546,13 @@ }, { "parentPluginId": "security", - "id": "def-common.UserAvatarData.color", + "id": "def-common.UserProfileAvatarData.color", "type": "string", "tags": [], "label": "color", - "description": [], + "description": [ + "\nBackground color of the avatar when initials are used." + ], "signature": [ "string | undefined" ], @@ -3122,11 +3561,13 @@ }, { "parentPluginId": "security", - "id": "def-common.UserAvatarData.imageUrl", + "id": "def-common.UserProfileAvatarData.imageUrl", "type": "string", "tags": [], "label": "imageUrl", - "description": [], + "description": [ + "\nBase64 data URL for the user avatar image." + ], "signature": [ "string | undefined" ], @@ -3138,40 +3579,70 @@ }, { "parentPluginId": "security", - "id": "def-common.UserInfo", + "id": "def-common.UserProfileUserInfo", "type": "Interface", "tags": [], - "label": "UserInfo", + "label": "UserProfileUserInfo", "description": [ - "\nUser information returned in user profile." - ], - "signature": [ - { - "pluginId": "security", - "scope": "common", - "docId": "kibSecurityPluginApi", - "section": "def-common.UserInfo", - "text": "UserInfo" - }, - " extends ", - { - "pluginId": "security", - "scope": "common", - "docId": "kibSecurityPluginApi", - "section": "def-common.User", - "text": "User" - } + "\nBasic user information returned in user profile." ], "path": "x-pack/plugins/security/common/model/user_profile.ts", "deprecated": false, "children": [ { "parentPluginId": "security", - "id": "def-common.UserInfo.active", - "type": "boolean", + "id": "def-common.UserProfileUserInfo.username", + "type": "string", "tags": [], - "label": "active", - "description": [], + "label": "username", + "description": [ + "\nUsername of the user." + ], + "path": "x-pack/plugins/security/common/model/user_profile.ts", + "deprecated": false + }, + { + "parentPluginId": "security", + "id": "def-common.UserProfileUserInfo.email", + "type": "string", + "tags": [], + "label": "email", + "description": [ + "\nOptional email of the user." + ], + "signature": [ + "string | undefined" + ], + "path": "x-pack/plugins/security/common/model/user_profile.ts", + "deprecated": false + }, + { + "parentPluginId": "security", + "id": "def-common.UserProfileUserInfo.full_name", + "type": "string", + "tags": [], + "label": "full_name", + "description": [ + "\nOptional full name of the user." + ], + "signature": [ + "string | undefined" + ], + "path": "x-pack/plugins/security/common/model/user_profile.ts", + "deprecated": false + }, + { + "parentPluginId": "security", + "id": "def-common.UserProfileUserInfo.display_name", + "type": "string", + "tags": [], + "label": "display_name", + "description": [ + "\nOptional display name of the user." + ], + "signature": [ + "string | undefined" + ], "path": "x-pack/plugins/security/common/model/user_profile.ts", "deprecated": false } @@ -3180,53 +3651,111 @@ }, { "parentPluginId": "security", - "id": "def-common.UserProfile", + "id": "def-common.UserProfileUserInfoWithSecurity", "type": "Interface", "tags": [], - "label": "UserProfile", + "label": "UserProfileUserInfoWithSecurity", "description": [ - "\nDescribes properties stored in user profile." + "\nExtended user information returned in user profile (both basic and security related properties)." ], "signature": [ { "pluginId": "security", "scope": "common", "docId": "kibSecurityPluginApi", - "section": "def-common.UserProfile", - "text": "UserProfile" + "section": "def-common.UserProfileUserInfoWithSecurity", + "text": "UserProfileUserInfoWithSecurity" }, - "" + " extends ", + { + "pluginId": "security", + "scope": "common", + "docId": "kibSecurityPluginApi", + "section": "def-common.UserProfileUserInfo", + "text": "UserProfileUserInfo" + } ], "path": "x-pack/plugins/security/common/model/user_profile.ts", "deprecated": false, "children": [ { "parentPluginId": "security", - "id": "def-common.UserProfile.uid", + "id": "def-common.UserProfileUserInfoWithSecurity.roles", + "type": "Object", + "tags": [], + "label": "roles", + "description": [ + "\nList of the user roles." + ], + "signature": [ + "readonly string[]" + ], + "path": "x-pack/plugins/security/common/model/user_profile.ts", + "deprecated": false + }, + { + "parentPluginId": "security", + "id": "def-common.UserProfileUserInfoWithSecurity.realm_name", "type": "string", "tags": [], - "label": "uid", + "label": "realm_name", "description": [ - "\nUnique ID for of the user profile." + "\nName of the Elasticsearch security realm that was used to authenticate user." ], "path": "x-pack/plugins/security/common/model/user_profile.ts", "deprecated": false }, { "parentPluginId": "security", - "id": "def-common.UserProfile.enabled", - "type": "boolean", + "id": "def-common.UserProfileUserInfoWithSecurity.realm_domain", + "type": "string", "tags": [], - "label": "enabled", + "label": "realm_domain", "description": [ - "\nIndicates whether user profile is enabled or not." + "\nOptional name of the security domain that Elasticsearch security realm that was\nused to authenticate user resides in (if any)." + ], + "signature": [ + "string | undefined" ], "path": "x-pack/plugins/security/common/model/user_profile.ts", "deprecated": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "security", + "id": "def-common.UserProfileWithSecurity", + "type": "Interface", + "tags": [], + "label": "UserProfileWithSecurity", + "description": [ + "\nDescribes all properties stored in user profile (both basic and security related properties)." + ], + "signature": [ + { + "pluginId": "security", + "scope": "common", + "docId": "kibSecurityPluginApi", + "section": "def-common.UserProfileWithSecurity", + "text": "UserProfileWithSecurity" + }, + " extends ", + { + "pluginId": "security", + "scope": "common", + "docId": "kibSecurityPluginApi", + "section": "def-common.UserProfile", + "text": "UserProfile" }, + "" + ], + "path": "x-pack/plugins/security/common/model/user_profile.ts", + "deprecated": false, + "children": [ { "parentPluginId": "security", - "id": "def-common.UserProfile.user", + "id": "def-common.UserProfileWithSecurity.user", "type": "Object", "tags": [], "label": "user", @@ -3238,8 +3767,8 @@ "pluginId": "security", "scope": "common", "docId": "kibSecurityPluginApi", - "section": "def-common.UserInfo", - "text": "UserInfo" + "section": "def-common.UserProfileUserInfoWithSecurity", + "text": "UserProfileUserInfoWithSecurity" } ], "path": "x-pack/plugins/security/common/model/user_profile.ts", @@ -3247,15 +3776,15 @@ }, { "parentPluginId": "security", - "id": "def-common.UserProfile.data", + "id": "def-common.UserProfileWithSecurity.labels", "type": "Uncategorized", "tags": [], - "label": "data", + "label": "labels", "description": [ - "\nUser specific data associated with the profile." + "\nUser specific _searchable_ labels associated with the profile. Note that labels are considered\nsecurity related field since it's going to be used to store user's space ID." ], "signature": [ - "T" + "L" ], "path": "x-pack/plugins/security/common/model/user_profile.ts", "deprecated": false @@ -3323,10 +3852,10 @@ }, { "parentPluginId": "security", - "id": "def-common.UserData", + "id": "def-common.UserProfileData", "type": "Type", "tags": [], - "label": "UserData", + "label": "UserProfileData", "description": [ "\nPlaceholder for data stored in user profile." ], @@ -3336,6 +3865,22 @@ "path": "x-pack/plugins/security/common/model/user_profile.ts", "deprecated": false, "initialIsOpen": false + }, + { + "parentPluginId": "security", + "id": "def-common.UserProfileLabels", + "type": "Type", + "tags": [], + "label": "UserProfileLabels", + "description": [ + "\nType of the user profile labels structure (currently" + ], + "signature": [ + "{ [x: string]: string; }" + ], + "path": "x-pack/plugins/security/common/model/user_profile.ts", + "deprecated": false, + "initialIsOpen": false } ], "objects": [] diff --git a/api_docs/security.mdx b/api_docs/security.mdx index e85d2da409c64..430c80112dff9 100644 --- a/api_docs/security.mdx +++ b/api_docs/security.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/security title: "security" image: https://source.unsplash.com/400x175/?github summary: API docs for the security plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'security'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- @@ -18,7 +18,7 @@ Contact [Platform Security](https://github.com/orgs/elastic/teams/kibana-securit | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 197 | 0 | 100 | 0 | +| 225 | 0 | 90 | 0 | ## Client diff --git a/api_docs/security_solution.devdocs.json b/api_docs/security_solution.devdocs.json index 98575276e9149..55f725bd37567 100644 --- a/api_docs/security_solution.devdocs.json +++ b/api_docs/security_solution.devdocs.json @@ -62,7 +62,7 @@ "label": "experimentalFeatures", "description": [], "signature": [ - "{ readonly tGridEnabled: boolean; readonly tGridEventRenderedViewEnabled: boolean; readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly disableIsolationUIPendingStatuses: boolean; readonly riskyHostsEnabled: boolean; readonly riskyUsersEnabled: boolean; readonly pendingActionResponsesWithAck: boolean; readonly policyListEnabled: boolean; readonly policyResponseInFleetEnabled: boolean; readonly groupedNavigation: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly responseActionsConsoleEnabled: boolean; readonly cloudSecurityPostureNavigation: boolean; }" + "{ readonly tGridEnabled: boolean; readonly tGridEventRenderedViewEnabled: boolean; readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly disableIsolationUIPendingStatuses: boolean; readonly riskyHostsEnabled: boolean; readonly riskyUsersEnabled: boolean; readonly pendingActionResponsesWithAck: boolean; readonly policyListEnabled: boolean; readonly policyResponseInFleetEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly responseActionsConsoleEnabled: boolean; readonly cloudSecurityPostureNavigation: boolean; readonly insightsRelatedAlertsByProcessAncestry: boolean; }" ], "path": "x-pack/plugins/security_solution/public/plugin.tsx", "deprecated": false @@ -1003,7 +1003,7 @@ "label": "ConfigType", "description": [], "signature": [ - "Readonly<{} & { signalsIndex: string; maxRuleImportExportSize: number; maxRuleImportPayloadBytes: number; maxTimelineImportExportSize: number; maxTimelineImportPayloadBytes: number; alertMergeStrategy: \"allFields\" | \"missingFields\" | \"noFields\"; alertIgnoreFields: string[]; enableExperimental: string[]; packagerTaskInterval: string; prebuiltRulesFromFileSystem: boolean; prebuiltRulesFromSavedObjects: boolean; }> & { experimentalFeatures: Readonly<{ tGridEnabled: boolean; tGridEventRenderedViewEnabled: boolean; excludePoliciesInFilterEnabled: boolean; kubernetesEnabled: boolean; disableIsolationUIPendingStatuses: boolean; riskyHostsEnabled: boolean; riskyUsersEnabled: boolean; pendingActionResponsesWithAck: boolean; policyListEnabled: boolean; policyResponseInFleetEnabled: boolean; groupedNavigation: boolean; previewTelemetryUrlEnabled: boolean; responseActionsConsoleEnabled: boolean; cloudSecurityPostureNavigation: boolean; }>; }" + "Readonly<{} & { signalsIndex: string; maxRuleImportExportSize: number; maxRuleImportPayloadBytes: number; maxTimelineImportExportSize: number; maxTimelineImportPayloadBytes: number; alertMergeStrategy: \"allFields\" | \"missingFields\" | \"noFields\"; alertIgnoreFields: string[]; enableExperimental: string[]; packagerTaskInterval: string; prebuiltRulesFromFileSystem: boolean; prebuiltRulesFromSavedObjects: boolean; }> & { experimentalFeatures: Readonly<{ tGridEnabled: boolean; tGridEventRenderedViewEnabled: boolean; excludePoliciesInFilterEnabled: boolean; kubernetesEnabled: boolean; disableIsolationUIPendingStatuses: boolean; riskyHostsEnabled: boolean; riskyUsersEnabled: boolean; pendingActionResponsesWithAck: boolean; policyListEnabled: boolean; policyResponseInFleetEnabled: boolean; previewTelemetryUrlEnabled: boolean; responseActionsConsoleEnabled: boolean; cloudSecurityPostureNavigation: boolean; insightsRelatedAlertsByProcessAncestry: boolean; }>; }" ], "path": "x-pack/plugins/security_solution/server/config.ts", "deprecated": false, diff --git a/api_docs/security_solution.mdx b/api_docs/security_solution.mdx index 2c5a6f87d6d2e..a956b02859281 100644 --- a/api_docs/security_solution.mdx +++ b/api_docs/security_solution.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/securitySolution title: "securitySolution" image: https://source.unsplash.com/400x175/?github summary: API docs for the securitySolution plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'securitySolution'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/session_view.mdx b/api_docs/session_view.mdx index b0c1ef4d8449c..5a619f77c5a8a 100644 --- a/api_docs/session_view.mdx +++ b/api_docs/session_view.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/sessionView title: "sessionView" image: https://source.unsplash.com/400x175/?github summary: API docs for the sessionView plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'sessionView'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/share.mdx b/api_docs/share.mdx index 8ca697ee5550e..f1d46c68e89a3 100644 --- a/api_docs/share.mdx +++ b/api_docs/share.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/share title: "share" image: https://source.unsplash.com/400x175/?github summary: API docs for the share plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'share'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/shared_u_x.mdx b/api_docs/shared_u_x.mdx index 398a1d8b11776..a84bba398d673 100644 --- a/api_docs/shared_u_x.mdx +++ b/api_docs/shared_u_x.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/sharedUX title: "sharedUX" image: https://source.unsplash.com/400x175/?github summary: API docs for the sharedUX plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'sharedUX'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/snapshot_restore.mdx b/api_docs/snapshot_restore.mdx index b54095e27938f..e9b6897e263ed 100644 --- a/api_docs/snapshot_restore.mdx +++ b/api_docs/snapshot_restore.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/snapshotRestore title: "snapshotRestore" image: https://source.unsplash.com/400x175/?github summary: API docs for the snapshotRestore plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'snapshotRestore'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/spaces.mdx b/api_docs/spaces.mdx index f66f6cc7e7937..b84e5834b6041 100644 --- a/api_docs/spaces.mdx +++ b/api_docs/spaces.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/spaces title: "spaces" image: https://source.unsplash.com/400x175/?github summary: API docs for the spaces plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'spaces'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/stack_alerts.mdx b/api_docs/stack_alerts.mdx index a0c2912cdafff..7a5c7f7e8a390 100644 --- a/api_docs/stack_alerts.mdx +++ b/api_docs/stack_alerts.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/stackAlerts title: "stackAlerts" image: https://source.unsplash.com/400x175/?github summary: API docs for the stackAlerts plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'stackAlerts'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/task_manager.mdx b/api_docs/task_manager.mdx index cdbf52a2e94c7..e8486f67da3c5 100644 --- a/api_docs/task_manager.mdx +++ b/api_docs/task_manager.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/taskManager title: "taskManager" image: https://source.unsplash.com/400x175/?github summary: API docs for the taskManager plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'taskManager'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/telemetry.mdx b/api_docs/telemetry.mdx index 0fda91198a13a..b9f1058ebc65b 100644 --- a/api_docs/telemetry.mdx +++ b/api_docs/telemetry.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/telemetry title: "telemetry" image: https://source.unsplash.com/400x175/?github summary: API docs for the telemetry plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetry'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/telemetry_collection_manager.devdocs.json b/api_docs/telemetry_collection_manager.devdocs.json index c0fb8f6a4001d..85ea9702a12ca 100644 --- a/api_docs/telemetry_collection_manager.devdocs.json +++ b/api_docs/telemetry_collection_manager.devdocs.json @@ -106,7 +106,9 @@ "TransportRequestOptions", " | undefined): Promise<", "SearchResponse", - ">; }; eql: ", + ">; }; cluster: ", + "default", + "; eql: ", "default", "; create: { (this: That, params: ", "CreateRequest", @@ -338,9 +340,7 @@ "TransportRequestOptions", " | undefined): Promise<", "ClearScrollResponse", - ">; }; cluster: ", - "default", - "; count: { (this: That, params?: ", + ">; }; count: { (this: That, params?: ", "CountRequest", " | ", "CountRequest", diff --git a/api_docs/telemetry_collection_manager.mdx b/api_docs/telemetry_collection_manager.mdx index 14242c2198785..3bb0307fde48d 100644 --- a/api_docs/telemetry_collection_manager.mdx +++ b/api_docs/telemetry_collection_manager.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/telemetryCollectionManager title: "telemetryCollectionManager" image: https://source.unsplash.com/400x175/?github summary: API docs for the telemetryCollectionManager plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryCollectionManager'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/telemetry_collection_xpack.mdx b/api_docs/telemetry_collection_xpack.mdx index f6c40db167e04..04ba3b4d1e7d8 100644 --- a/api_docs/telemetry_collection_xpack.mdx +++ b/api_docs/telemetry_collection_xpack.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/telemetryCollectionXpack title: "telemetryCollectionXpack" image: https://source.unsplash.com/400x175/?github summary: API docs for the telemetryCollectionXpack plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryCollectionXpack'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/telemetry_management_section.mdx b/api_docs/telemetry_management_section.mdx index 451728f73beef..d9aa42a2f9f9a 100644 --- a/api_docs/telemetry_management_section.mdx +++ b/api_docs/telemetry_management_section.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/telemetryManagementSection title: "telemetryManagementSection" image: https://source.unsplash.com/400x175/?github summary: API docs for the telemetryManagementSection plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryManagementSection'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/timelines.mdx b/api_docs/timelines.mdx index 41b11077a845f..c1bcea8720eba 100644 --- a/api_docs/timelines.mdx +++ b/api_docs/timelines.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/timelines title: "timelines" image: https://source.unsplash.com/400x175/?github summary: API docs for the timelines plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'timelines'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/transform.mdx b/api_docs/transform.mdx index 96a1c52c6f933..9facda1df93e6 100644 --- a/api_docs/transform.mdx +++ b/api_docs/transform.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/transform title: "transform" image: https://source.unsplash.com/400x175/?github summary: API docs for the transform plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'transform'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/triggers_actions_ui.devdocs.json b/api_docs/triggers_actions_ui.devdocs.json index e3cb591260fb4..410f43f674d33 100644 --- a/api_docs/triggers_actions_ui.devdocs.json +++ b/api_docs/triggers_actions_ui.devdocs.json @@ -809,6 +809,52 @@ ], "initialIsOpen": false }, + { + "parentPluginId": "triggersActionsUi", + "id": "def-public.loadActionErrorLog", + "type": "Function", + "tags": [], + "label": "loadActionErrorLog", + "description": [], + "signature": [ + "({ id, http, dateStart, dateEnd, runId, message, perPage, page, sort, }: ", + "LoadActionErrorLogProps", + " & { http: ", + "HttpSetup", + "; }) => Promise<", + { + "pluginId": "alerting", + "scope": "common", + "docId": "kibAlertingPluginApi", + "section": "def-common.IExecutionErrorsResult", + "text": "IExecutionErrorsResult" + }, + ">" + ], + "path": "x-pack/plugins/triggers_actions_ui/public/application/lib/rule_api/load_action_error_log.ts", + "deprecated": false, + "children": [ + { + "parentPluginId": "triggersActionsUi", + "id": "def-public.loadActionErrorLog.$1", + "type": "CompoundType", + "tags": [], + "label": "{\n id,\n http,\n dateStart,\n dateEnd,\n runId,\n message,\n perPage = 10,\n page = 0,\n sort,\n}", + "description": [], + "signature": [ + "LoadActionErrorLogProps", + " & { http: ", + "HttpSetup", + "; }" + ], + "path": "x-pack/plugins/triggers_actions_ui/public/application/lib/rule_api/load_action_error_log.ts", + "deprecated": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, { "parentPluginId": "triggersActionsUi", "id": "def-public.loadActionTypes", @@ -921,7 +967,7 @@ "label": "loadExecutionLogAggregations", "description": [], "signature": [ - "({ id, http, dateStart, dateEnd, filter, perPage, page, sort, }: ", + "({ id, http, dateStart, dateEnd, outcomeFilter, message, perPage, page, sort, }: ", "LoadExecutionLogAggregationsProps", " & { http: ", "HttpSetup", @@ -930,8 +976,8 @@ "pluginId": "alerting", "scope": "common", "docId": "kibAlertingPluginApi", - "section": "def-common.IExecutionLogWithErrorsResult", - "text": "IExecutionLogWithErrorsResult" + "section": "def-common.IExecutionLogResult", + "text": "IExecutionLogResult" }, ">" ], @@ -943,7 +989,7 @@ "id": "def-public.loadExecutionLogAggregations.$1", "type": "CompoundType", "tags": [], - "label": "{\n id,\n http,\n dateStart,\n dateEnd,\n filter,\n perPage = 10,\n page = 0,\n sort = [],\n}", + "label": "{\n id,\n http,\n dateStart,\n dateEnd,\n outcomeFilter,\n message,\n perPage = 10,\n page = 0,\n sort = [],\n}", "description": [], "signature": [ "LoadExecutionLogAggregationsProps", @@ -1896,8 +1942,9 @@ "label": "alert", "description": [], "signature": [ - "{ [x: `email.to.${number}`]: string[]; [x: `email.cc.${number}`]: string[]; [x: `email.bcc.${number}`]: string[]; [x: `email.attachments.${number}`]: string[]; [x: `user.roles.${number}`]: string[]; [x: `user.target.roles.${number}`]: string[]; [x: `user.changes.roles.${number}`]: string[]; [x: `user.effective.roles.${number}`]: string[]; [x: `source.user.roles.${number}`]: string[]; [x: `tags.${number}`]: string[]; [x: `client.user.roles.${number}`]: string[]; [x: `file.attributes.${number}`]: string[]; [x: `file.elf.exports.${number}`]: string[]; [x: `file.elf.imports.${number}`]: string[]; [x: `file.elf.sections.${number}`]: string[]; [x: `file.elf.segments.${number}`]: string[]; [x: `file.elf.shared_libraries.${number}`]: string[]; [x: `file.x509.issuer.organization.${number}`]: string[]; [x: `file.x509.issuer.common_name.${number}`]: string[]; [x: `file.x509.issuer.country.${number}`]: string[]; [x: `file.x509.issuer.locality.${number}`]: string[]; [x: `file.x509.issuer.organizational_unit.${number}`]: string[]; [x: `file.x509.issuer.state_or_province.${number}`]: string[]; [x: `file.x509.subject.organization.${number}`]: string[]; [x: `file.x509.subject.common_name.${number}`]: string[]; [x: `file.x509.subject.country.${number}`]: string[]; [x: `file.x509.subject.locality.${number}`]: string[]; [x: `file.x509.subject.organizational_unit.${number}`]: string[]; [x: `file.x509.subject.state_or_province.${number}`]: string[]; [x: `file.x509.alternative_names.${number}`]: string[]; [x: `host.ip.${number}`]: string[]; [x: `host.mac.${number}`]: string[]; [x: `container.image.tag.${number}`]: string[]; [x: `server.user.roles.${number}`]: string[]; [x: `rule.author.${number}`]: string[]; [x: `event.type.${number}`]: string[]; [x: `event.category.${number}`]: string[]; [x: `registry.data.strings.${number}`]: string[]; [x: `destination.user.roles.${number}`]: string[]; [x: `dns.answers.${number}`]: string[]; [x: `dns.header_flags.${number}`]: string[]; [x: `dns.resolved_ip.${number}`]: string[]; [x: `observer.ip.${number}`]: string[]; [x: `observer.mac.${number}`]: string[]; [x: `process.elf.exports.${number}`]: string[]; [x: `process.elf.imports.${number}`]: string[]; [x: `process.elf.sections.${number}`]: string[]; [x: `process.elf.segments.${number}`]: string[]; [x: `process.elf.shared_libraries.${number}`]: string[]; [x: `process.args.${number}`]: string[]; [x: `process.target.args.${number}`]: string[]; [x: `process.parent.args.${number}`]: string[]; [x: `process.target.elf.exports.${number}`]: string[]; [x: `process.target.elf.imports.${number}`]: string[]; [x: `process.target.elf.sections.${number}`]: string[]; [x: `process.target.elf.segments.${number}`]: string[]; [x: `process.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.args.${number}`]: string[]; [x: `process.target.parent.args.${number}`]: string[]; [x: `process.parent.elf.exports.${number}`]: string[]; [x: `process.parent.elf.imports.${number}`]: string[]; [x: `process.parent.elf.sections.${number}`]: string[]; [x: `process.parent.elf.segments.${number}`]: string[]; [x: `process.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.args.${number}`]: string[]; [x: `process.parent.parent.args.${number}`]: string[]; [x: `process.target.target.elf.exports.${number}`]: string[]; [x: `process.target.target.elf.imports.${number}`]: string[]; [x: `process.target.target.elf.sections.${number}`]: string[]; [x: `process.target.target.elf.segments.${number}`]: string[]; [x: `process.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.target.args.${number}`]: string[]; [x: `process.target.target.parent.args.${number}`]: string[]; [x: `process.target.parent.elf.exports.${number}`]: string[]; [x: `process.target.parent.elf.imports.${number}`]: string[]; [x: `process.target.parent.elf.sections.${number}`]: string[]; [x: `process.target.parent.elf.segments.${number}`]: string[]; [x: `process.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.target.args.${number}`]: string[]; [x: `process.target.parent.parent.args.${number}`]: string[]; [x: `process.parent.target.elf.exports.${number}`]: string[]; [x: `process.parent.target.elf.imports.${number}`]: string[]; [x: `process.parent.target.elf.sections.${number}`]: string[]; [x: `process.parent.target.elf.segments.${number}`]: string[]; [x: `process.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.target.args.${number}`]: string[]; [x: `process.parent.target.parent.args.${number}`]: string[]; [x: `process.parent.parent.elf.exports.${number}`]: string[]; [x: `process.parent.parent.elf.imports.${number}`]: string[]; [x: `process.parent.parent.elf.sections.${number}`]: string[]; [x: `process.parent.parent.elf.segments.${number}`]: string[]; [x: `process.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.target.args.${number}`]: string[]; [x: `process.parent.parent.parent.args.${number}`]: string[]; [x: `process.target.target.target.elf.exports.${number}`]: string[]; [x: `process.target.target.target.elf.imports.${number}`]: string[]; [x: `process.target.target.target.elf.sections.${number}`]: string[]; [x: `process.target.target.target.elf.segments.${number}`]: string[]; [x: `process.target.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.target.target.args.${number}`]: string[]; [x: `process.target.target.target.parent.args.${number}`]: string[]; [x: `process.target.target.parent.elf.exports.${number}`]: string[]; [x: `process.target.target.parent.elf.imports.${number}`]: string[]; [x: `process.target.target.parent.elf.sections.${number}`]: string[]; [x: `process.target.target.parent.elf.segments.${number}`]: string[]; [x: `process.target.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.parent.target.args.${number}`]: string[]; [x: `process.target.target.parent.parent.args.${number}`]: string[]; [x: `process.target.parent.target.elf.exports.${number}`]: string[]; [x: `process.target.parent.target.elf.imports.${number}`]: string[]; [x: `process.target.parent.target.elf.sections.${number}`]: string[]; [x: `process.target.parent.target.elf.segments.${number}`]: string[]; [x: `process.target.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.target.target.args.${number}`]: string[]; [x: `process.target.parent.target.parent.args.${number}`]: string[]; [x: `process.target.parent.parent.elf.exports.${number}`]: string[]; [x: `process.target.parent.parent.elf.imports.${number}`]: string[]; [x: `process.target.parent.parent.elf.sections.${number}`]: string[]; [x: `process.target.parent.parent.elf.segments.${number}`]: string[]; [x: `process.target.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.parent.target.args.${number}`]: string[]; [x: `process.target.parent.parent.parent.args.${number}`]: string[]; [x: `process.parent.target.target.elf.exports.${number}`]: string[]; [x: `process.parent.target.target.elf.imports.${number}`]: string[]; [x: `process.parent.target.target.elf.sections.${number}`]: string[]; [x: `process.parent.target.target.elf.segments.${number}`]: string[]; [x: `process.parent.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.target.target.args.${number}`]: string[]; [x: `process.parent.target.target.parent.args.${number}`]: string[]; [x: `process.parent.target.parent.elf.exports.${number}`]: string[]; [x: `process.parent.target.parent.elf.imports.${number}`]: string[]; [x: `process.parent.target.parent.elf.sections.${number}`]: string[]; [x: `process.parent.target.parent.elf.segments.${number}`]: string[]; [x: `process.parent.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.parent.target.args.${number}`]: string[]; [x: `process.parent.target.parent.parent.args.${number}`]: string[]; [x: `process.parent.parent.target.elf.exports.${number}`]: string[]; [x: `process.parent.parent.target.elf.imports.${number}`]: string[]; [x: `process.parent.parent.target.elf.sections.${number}`]: string[]; [x: `process.parent.parent.target.elf.segments.${number}`]: string[]; [x: `process.parent.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.target.target.args.${number}`]: string[]; [x: `process.parent.parent.target.parent.args.${number}`]: string[]; [x: `process.parent.parent.parent.elf.exports.${number}`]: string[]; [x: `process.parent.parent.parent.elf.imports.${number}`]: string[]; [x: `process.parent.parent.parent.elf.sections.${number}`]: string[]; [x: `process.parent.parent.parent.elf.segments.${number}`]: string[]; [x: `process.parent.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.parent.target.args.${number}`]: string[]; [x: `process.parent.parent.parent.parent.args.${number}`]: string[]; [x: `process.target.target.target.target.elf.exports.${number}`]: string[]; [x: `process.target.target.target.target.elf.imports.${number}`]: string[]; [x: `process.target.target.target.target.elf.sections.${number}`]: string[]; [x: `process.target.target.target.target.elf.segments.${number}`]: string[]; [x: `process.target.target.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.target.target.target.args.${number}`]: string[]; [x: `process.target.target.target.target.parent.args.${number}`]: string[]; [x: `process.target.target.target.parent.elf.exports.${number}`]: string[]; [x: `process.target.target.target.parent.elf.imports.${number}`]: string[]; [x: `process.target.target.target.parent.elf.sections.${number}`]: string[]; [x: `process.target.target.target.parent.elf.segments.${number}`]: string[]; [x: `process.target.target.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.target.parent.target.args.${number}`]: string[]; [x: `process.target.target.target.parent.parent.args.${number}`]: string[]; [x: `process.target.target.parent.target.elf.exports.${number}`]: string[]; [x: `process.target.target.parent.target.elf.imports.${number}`]: string[]; [x: `process.target.target.parent.target.elf.sections.${number}`]: string[]; [x: `process.target.target.parent.target.elf.segments.${number}`]: string[]; [x: `process.target.target.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.parent.target.target.args.${number}`]: string[]; [x: `process.target.target.parent.target.parent.args.${number}`]: string[]; [x: `process.target.target.parent.parent.elf.exports.${number}`]: string[]; [x: `process.target.target.parent.parent.elf.imports.${number}`]: string[]; [x: `process.target.target.parent.parent.elf.sections.${number}`]: string[]; [x: `process.target.target.parent.parent.elf.segments.${number}`]: string[]; [x: `process.target.target.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.parent.parent.target.args.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.args.${number}`]: string[]; [x: `process.target.parent.target.target.elf.exports.${number}`]: string[]; [x: `process.target.parent.target.target.elf.imports.${number}`]: string[]; [x: `process.target.parent.target.target.elf.sections.${number}`]: string[]; [x: `process.target.parent.target.target.elf.segments.${number}`]: string[]; [x: `process.target.parent.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.target.target.target.args.${number}`]: string[]; [x: `process.target.parent.target.target.parent.args.${number}`]: string[]; [x: `process.target.parent.target.parent.elf.exports.${number}`]: string[]; [x: `process.target.parent.target.parent.elf.imports.${number}`]: string[]; [x: `process.target.parent.target.parent.elf.sections.${number}`]: string[]; [x: `process.target.parent.target.parent.elf.segments.${number}`]: string[]; [x: `process.target.parent.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.target.parent.target.args.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.args.${number}`]: string[]; [x: `process.target.parent.parent.target.elf.exports.${number}`]: string[]; [x: `process.target.parent.parent.target.elf.imports.${number}`]: string[]; [x: `process.target.parent.parent.target.elf.sections.${number}`]: string[]; [x: `process.target.parent.parent.target.elf.segments.${number}`]: string[]; [x: `process.target.parent.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.parent.target.target.args.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.args.${number}`]: string[]; [x: `process.target.parent.parent.parent.elf.exports.${number}`]: string[]; [x: `process.target.parent.parent.parent.elf.imports.${number}`]: string[]; [x: `process.target.parent.parent.parent.elf.sections.${number}`]: string[]; [x: `process.target.parent.parent.parent.elf.segments.${number}`]: string[]; [x: `process.target.parent.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.args.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.args.${number}`]: string[]; [x: `process.parent.target.target.target.elf.exports.${number}`]: string[]; [x: `process.parent.target.target.target.elf.imports.${number}`]: string[]; [x: `process.parent.target.target.target.elf.sections.${number}`]: string[]; [x: `process.parent.target.target.target.elf.segments.${number}`]: string[]; [x: `process.parent.target.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.target.target.target.args.${number}`]: string[]; [x: `process.parent.target.target.target.parent.args.${number}`]: string[]; [x: `process.parent.target.target.parent.elf.exports.${number}`]: string[]; [x: `process.parent.target.target.parent.elf.imports.${number}`]: string[]; [x: `process.parent.target.target.parent.elf.sections.${number}`]: string[]; [x: `process.parent.target.target.parent.elf.segments.${number}`]: string[]; [x: `process.parent.target.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.target.parent.target.args.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.args.${number}`]: string[]; [x: `process.parent.target.parent.target.elf.exports.${number}`]: string[]; [x: `process.parent.target.parent.target.elf.imports.${number}`]: string[]; [x: `process.parent.target.parent.target.elf.sections.${number}`]: string[]; [x: `process.parent.target.parent.target.elf.segments.${number}`]: string[]; [x: `process.parent.target.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.parent.target.target.args.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.args.${number}`]: string[]; [x: `process.parent.target.parent.parent.elf.exports.${number}`]: string[]; [x: `process.parent.target.parent.parent.elf.imports.${number}`]: string[]; [x: `process.parent.target.parent.parent.elf.sections.${number}`]: string[]; [x: `process.parent.target.parent.parent.elf.segments.${number}`]: string[]; [x: `process.parent.target.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.args.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.args.${number}`]: string[]; [x: `process.parent.parent.target.target.elf.exports.${number}`]: string[]; [x: `process.parent.parent.target.target.elf.imports.${number}`]: string[]; [x: `process.parent.parent.target.target.elf.sections.${number}`]: string[]; [x: `process.parent.parent.target.target.elf.segments.${number}`]: string[]; [x: `process.parent.parent.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.target.target.target.args.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.args.${number}`]: string[]; [x: `process.parent.parent.target.parent.elf.exports.${number}`]: string[]; [x: `process.parent.parent.target.parent.elf.imports.${number}`]: string[]; [x: `process.parent.parent.target.parent.elf.sections.${number}`]: string[]; [x: `process.parent.parent.target.parent.elf.segments.${number}`]: string[]; [x: `process.parent.parent.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.args.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.args.${number}`]: string[]; [x: `process.parent.parent.parent.target.elf.exports.${number}`]: string[]; [x: `process.parent.parent.parent.target.elf.imports.${number}`]: string[]; [x: `process.parent.parent.parent.target.elf.sections.${number}`]: string[]; [x: `process.parent.parent.parent.target.elf.segments.${number}`]: string[]; [x: `process.parent.parent.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.args.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.args.${number}`]: string[]; [x: `process.parent.parent.parent.parent.elf.exports.${number}`]: string[]; [x: `process.parent.parent.parent.parent.elf.imports.${number}`]: string[]; [x: `process.parent.parent.parent.parent.elf.sections.${number}`]: string[]; [x: `process.parent.parent.parent.parent.elf.segments.${number}`]: string[]; [x: `process.parent.parent.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.args.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.args.${number}`]: string[]; [x: `process.target.target.target.target.target.elf.exports.${number}`]: string[]; [x: `process.target.target.target.target.target.elf.imports.${number}`]: string[]; [x: `process.target.target.target.target.target.elf.sections.${number}`]: string[]; [x: `process.target.target.target.target.target.elf.segments.${number}`]: string[]; [x: `process.target.target.target.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.target.target.target.target.args.${number}`]: string[]; [x: `process.target.target.target.target.target.parent.args.${number}`]: string[]; [x: `process.target.target.target.target.parent.elf.exports.${number}`]: string[]; [x: `process.target.target.target.target.parent.elf.imports.${number}`]: string[]; [x: `process.target.target.target.target.parent.elf.sections.${number}`]: string[]; [x: `process.target.target.target.target.parent.elf.segments.${number}`]: string[]; [x: `process.target.target.target.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.target.target.parent.target.args.${number}`]: string[]; [x: `process.target.target.target.target.parent.parent.args.${number}`]: string[]; [x: `process.target.target.target.parent.target.elf.exports.${number}`]: string[]; [x: `process.target.target.target.parent.target.elf.imports.${number}`]: string[]; [x: `process.target.target.target.parent.target.elf.sections.${number}`]: string[]; [x: `process.target.target.target.parent.target.elf.segments.${number}`]: string[]; [x: `process.target.target.target.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.target.parent.target.target.args.${number}`]: string[]; [x: `process.target.target.target.parent.target.parent.args.${number}`]: string[]; [x: `process.target.target.target.parent.parent.elf.exports.${number}`]: string[]; [x: `process.target.target.target.parent.parent.elf.imports.${number}`]: string[]; [x: `process.target.target.target.parent.parent.elf.sections.${number}`]: string[]; [x: `process.target.target.target.parent.parent.elf.segments.${number}`]: string[]; [x: `process.target.target.target.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.target.parent.parent.target.args.${number}`]: string[]; [x: `process.target.target.target.parent.parent.parent.args.${number}`]: string[]; [x: `process.target.target.parent.target.target.elf.exports.${number}`]: string[]; [x: `process.target.target.parent.target.target.elf.imports.${number}`]: string[]; [x: `process.target.target.parent.target.target.elf.sections.${number}`]: string[]; [x: `process.target.target.parent.target.target.elf.segments.${number}`]: string[]; [x: `process.target.target.parent.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.parent.target.target.target.args.${number}`]: string[]; [x: `process.target.target.parent.target.target.parent.args.${number}`]: string[]; [x: `process.target.target.parent.target.parent.elf.exports.${number}`]: string[]; [x: `process.target.target.parent.target.parent.elf.imports.${number}`]: string[]; [x: `process.target.target.parent.target.parent.elf.sections.${number}`]: string[]; [x: `process.target.target.parent.target.parent.elf.segments.${number}`]: string[]; [x: `process.target.target.parent.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.parent.target.parent.target.args.${number}`]: string[]; [x: `process.target.target.parent.target.parent.parent.args.${number}`]: string[]; [x: `process.target.target.parent.parent.target.elf.exports.${number}`]: string[]; [x: `process.target.target.parent.parent.target.elf.imports.${number}`]: string[]; [x: `process.target.target.parent.parent.target.elf.sections.${number}`]: string[]; [x: `process.target.target.parent.parent.target.elf.segments.${number}`]: string[]; [x: `process.target.target.parent.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.parent.parent.target.target.args.${number}`]: string[]; [x: `process.target.target.parent.parent.target.parent.args.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.elf.exports.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.elf.imports.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.elf.sections.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.elf.segments.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.target.args.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.parent.args.${number}`]: string[]; [x: `process.target.parent.target.target.target.elf.exports.${number}`]: string[]; [x: `process.target.parent.target.target.target.elf.imports.${number}`]: string[]; [x: `process.target.parent.target.target.target.elf.sections.${number}`]: string[]; [x: `process.target.parent.target.target.target.elf.segments.${number}`]: string[]; [x: `process.target.parent.target.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.target.target.target.target.args.${number}`]: string[]; [x: `process.target.parent.target.target.target.parent.args.${number}`]: string[]; [x: `process.target.parent.target.target.parent.elf.exports.${number}`]: string[]; [x: `process.target.parent.target.target.parent.elf.imports.${number}`]: string[]; [x: `process.target.parent.target.target.parent.elf.sections.${number}`]: string[]; [x: `process.target.parent.target.target.parent.elf.segments.${number}`]: string[]; [x: `process.target.parent.target.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.target.target.parent.target.args.${number}`]: string[]; [x: `process.target.parent.target.target.parent.parent.args.${number}`]: string[]; [x: `process.target.parent.target.parent.target.elf.exports.${number}`]: string[]; [x: `process.target.parent.target.parent.target.elf.imports.${number}`]: string[]; [x: `process.target.parent.target.parent.target.elf.sections.${number}`]: string[]; [x: `process.target.parent.target.parent.target.elf.segments.${number}`]: string[]; [x: `process.target.parent.target.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.target.parent.target.target.args.${number}`]: string[]; [x: `process.target.parent.target.parent.target.parent.args.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.elf.exports.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.elf.imports.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.elf.sections.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.elf.segments.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.target.args.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.parent.args.${number}`]: string[]; [x: `process.target.parent.parent.target.target.elf.exports.${number}`]: string[]; [x: `process.target.parent.parent.target.target.elf.imports.${number}`]: string[]; [x: `process.target.parent.parent.target.target.elf.sections.${number}`]: string[]; [x: `process.target.parent.parent.target.target.elf.segments.${number}`]: string[]; [x: `process.target.parent.parent.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.parent.target.target.target.args.${number}`]: string[]; [x: `process.target.parent.parent.target.target.parent.args.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.elf.exports.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.elf.imports.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.elf.sections.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.elf.segments.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.target.args.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.parent.args.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.elf.exports.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.elf.imports.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.elf.sections.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.elf.segments.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.target.args.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.parent.args.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.elf.exports.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.elf.imports.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.elf.sections.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.elf.segments.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.target.args.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.parent.args.${number}`]: string[]; [x: `process.parent.target.target.target.target.elf.exports.${number}`]: string[]; [x: `process.parent.target.target.target.target.elf.imports.${number}`]: string[]; [x: `process.parent.target.target.target.target.elf.sections.${number}`]: string[]; [x: `process.parent.target.target.target.target.elf.segments.${number}`]: string[]; [x: `process.parent.target.target.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.target.target.target.target.args.${number}`]: string[]; [x: `process.parent.target.target.target.target.parent.args.${number}`]: string[]; [x: `process.parent.target.target.target.parent.elf.exports.${number}`]: string[]; [x: `process.parent.target.target.target.parent.elf.imports.${number}`]: string[]; [x: `process.parent.target.target.target.parent.elf.sections.${number}`]: string[]; [x: `process.parent.target.target.target.parent.elf.segments.${number}`]: string[]; [x: `process.parent.target.target.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.target.target.parent.target.args.${number}`]: string[]; [x: `process.parent.target.target.target.parent.parent.args.${number}`]: string[]; [x: `process.parent.target.target.parent.target.elf.exports.${number}`]: string[]; [x: `process.parent.target.target.parent.target.elf.imports.${number}`]: string[]; [x: `process.parent.target.target.parent.target.elf.sections.${number}`]: string[]; [x: `process.parent.target.target.parent.target.elf.segments.${number}`]: string[]; [x: `process.parent.target.target.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.target.parent.target.target.args.${number}`]: string[]; [x: `process.parent.target.target.parent.target.parent.args.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.elf.exports.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.elf.imports.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.elf.sections.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.elf.segments.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.target.args.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.parent.args.${number}`]: string[]; [x: `process.parent.target.parent.target.target.elf.exports.${number}`]: string[]; [x: `process.parent.target.parent.target.target.elf.imports.${number}`]: string[]; [x: `process.parent.target.parent.target.target.elf.sections.${number}`]: string[]; [x: `process.parent.target.parent.target.target.elf.segments.${number}`]: string[]; [x: `process.parent.target.parent.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.parent.target.target.target.args.${number}`]: string[]; [x: `process.parent.target.parent.target.target.parent.args.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.elf.exports.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.elf.imports.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.elf.sections.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.elf.segments.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.target.args.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.parent.args.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.elf.exports.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.elf.imports.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.elf.sections.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.elf.segments.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.target.args.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.parent.args.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.elf.exports.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.elf.imports.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.elf.sections.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.elf.segments.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.target.args.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.parent.args.${number}`]: string[]; [x: `process.parent.parent.target.target.target.elf.exports.${number}`]: string[]; [x: `process.parent.parent.target.target.target.elf.imports.${number}`]: string[]; [x: `process.parent.parent.target.target.target.elf.sections.${number}`]: string[]; [x: `process.parent.parent.target.target.target.elf.segments.${number}`]: string[]; [x: `process.parent.parent.target.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.target.target.target.target.args.${number}`]: string[]; [x: `process.parent.parent.target.target.target.parent.args.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.elf.exports.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.elf.imports.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.elf.sections.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.elf.segments.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.target.args.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.parent.args.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.elf.exports.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.elf.imports.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.elf.sections.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.elf.segments.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.target.args.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.parent.args.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.elf.exports.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.elf.imports.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.elf.sections.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.elf.segments.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.target.args.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.parent.args.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.elf.exports.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.elf.imports.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.elf.sections.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.elf.segments.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.target.args.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.parent.args.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.elf.exports.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.elf.imports.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.elf.sections.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.elf.segments.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.target.args.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.parent.args.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.elf.exports.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.elf.imports.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.elf.sections.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.elf.segments.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.target.args.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.parent.args.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.elf.exports.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.elf.imports.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.elf.sections.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.elf.segments.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.target.args.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.parent.args.${number}`]: string[]; [x: `process.target.target.target.target.target.target.elf.exports.${number}`]: string[]; [x: `process.target.target.target.target.target.target.elf.imports.${number}`]: string[]; [x: `process.target.target.target.target.target.target.elf.sections.${number}`]: string[]; [x: `process.target.target.target.target.target.target.elf.segments.${number}`]: string[]; [x: `process.target.target.target.target.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.target.target.target.target.target.args.${number}`]: string[]; [x: `process.target.target.target.target.target.target.parent.args.${number}`]: string[]; [x: `process.target.target.target.target.target.parent.elf.exports.${number}`]: string[]; [x: `process.target.target.target.target.target.parent.elf.imports.${number}`]: string[]; [x: `process.target.target.target.target.target.parent.elf.sections.${number}`]: string[]; [x: `process.target.target.target.target.target.parent.elf.segments.${number}`]: string[]; [x: `process.target.target.target.target.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.target.target.target.parent.target.args.${number}`]: string[]; [x: `process.target.target.target.target.target.parent.parent.args.${number}`]: string[]; [x: `process.target.target.target.target.parent.target.elf.exports.${number}`]: string[]; [x: `process.target.target.target.target.parent.target.elf.imports.${number}`]: string[]; [x: `process.target.target.target.target.parent.target.elf.sections.${number}`]: string[]; [x: `process.target.target.target.target.parent.target.elf.segments.${number}`]: string[]; [x: `process.target.target.target.target.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.target.target.parent.target.target.args.${number}`]: string[]; [x: `process.target.target.target.target.parent.target.parent.args.${number}`]: string[]; [x: `process.target.target.target.target.parent.parent.elf.exports.${number}`]: string[]; [x: `process.target.target.target.target.parent.parent.elf.imports.${number}`]: string[]; [x: `process.target.target.target.target.parent.parent.elf.sections.${number}`]: string[]; [x: `process.target.target.target.target.parent.parent.elf.segments.${number}`]: string[]; [x: `process.target.target.target.target.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.target.target.parent.parent.target.args.${number}`]: string[]; [x: `process.target.target.target.target.parent.parent.parent.args.${number}`]: string[]; [x: `process.target.target.target.parent.target.target.elf.exports.${number}`]: string[]; [x: `process.target.target.target.parent.target.target.elf.imports.${number}`]: string[]; [x: `process.target.target.target.parent.target.target.elf.sections.${number}`]: string[]; [x: `process.target.target.target.parent.target.target.elf.segments.${number}`]: string[]; [x: `process.target.target.target.parent.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.target.parent.target.target.target.args.${number}`]: string[]; [x: `process.target.target.target.parent.target.target.parent.args.${number}`]: string[]; [x: `process.target.target.target.parent.target.parent.elf.exports.${number}`]: string[]; [x: `process.target.target.target.parent.target.parent.elf.imports.${number}`]: string[]; [x: `process.target.target.target.parent.target.parent.elf.sections.${number}`]: string[]; [x: `process.target.target.target.parent.target.parent.elf.segments.${number}`]: string[]; [x: `process.target.target.target.parent.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.target.parent.target.parent.target.args.${number}`]: string[]; [x: `process.target.target.target.parent.target.parent.parent.args.${number}`]: string[]; [x: `process.target.target.target.parent.parent.target.elf.exports.${number}`]: string[]; [x: `process.target.target.target.parent.parent.target.elf.imports.${number}`]: string[]; [x: `process.target.target.target.parent.parent.target.elf.sections.${number}`]: string[]; [x: `process.target.target.target.parent.parent.target.elf.segments.${number}`]: string[]; [x: `process.target.target.target.parent.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.target.parent.parent.target.target.args.${number}`]: string[]; [x: `process.target.target.target.parent.parent.target.parent.args.${number}`]: string[]; [x: `process.target.target.target.parent.parent.parent.elf.exports.${number}`]: string[]; [x: `process.target.target.target.parent.parent.parent.elf.imports.${number}`]: string[]; [x: `process.target.target.target.parent.parent.parent.elf.sections.${number}`]: string[]; [x: `process.target.target.target.parent.parent.parent.elf.segments.${number}`]: string[]; [x: `process.target.target.target.parent.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.target.parent.parent.parent.target.args.${number}`]: string[]; [x: `process.target.target.target.parent.parent.parent.parent.args.${number}`]: string[]; [x: `process.target.target.parent.target.target.target.elf.exports.${number}`]: string[]; [x: `process.target.target.parent.target.target.target.elf.imports.${number}`]: string[]; [x: `process.target.target.parent.target.target.target.elf.sections.${number}`]: string[]; [x: `process.target.target.parent.target.target.target.elf.segments.${number}`]: string[]; [x: `process.target.target.parent.target.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.parent.target.target.target.target.args.${number}`]: string[]; [x: `process.target.target.parent.target.target.target.parent.args.${number}`]: string[]; [x: `process.target.target.parent.target.target.parent.elf.exports.${number}`]: string[]; [x: `process.target.target.parent.target.target.parent.elf.imports.${number}`]: string[]; [x: `process.target.target.parent.target.target.parent.elf.sections.${number}`]: string[]; [x: `process.target.target.parent.target.target.parent.elf.segments.${number}`]: string[]; [x: `process.target.target.parent.target.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.parent.target.target.parent.target.args.${number}`]: string[]; [x: `process.target.target.parent.target.target.parent.parent.args.${number}`]: string[]; [x: `process.target.target.parent.target.parent.target.elf.exports.${number}`]: string[]; [x: `process.target.target.parent.target.parent.target.elf.imports.${number}`]: string[]; [x: `process.target.target.parent.target.parent.target.elf.sections.${number}`]: string[]; [x: `process.target.target.parent.target.parent.target.elf.segments.${number}`]: string[]; [x: `process.target.target.parent.target.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.parent.target.parent.target.target.args.${number}`]: string[]; [x: `process.target.target.parent.target.parent.target.parent.args.${number}`]: string[]; [x: `process.target.target.parent.target.parent.parent.elf.exports.${number}`]: string[]; [x: `process.target.target.parent.target.parent.parent.elf.imports.${number}`]: string[]; [x: `process.target.target.parent.target.parent.parent.elf.sections.${number}`]: string[]; [x: `process.target.target.parent.target.parent.parent.elf.segments.${number}`]: string[]; [x: `process.target.target.parent.target.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.parent.target.parent.parent.target.args.${number}`]: string[]; [x: `process.target.target.parent.target.parent.parent.parent.args.${number}`]: string[]; [x: `process.target.target.parent.parent.target.target.elf.exports.${number}`]: string[]; [x: `process.target.target.parent.parent.target.target.elf.imports.${number}`]: string[]; [x: `process.target.target.parent.parent.target.target.elf.sections.${number}`]: string[]; [x: `process.target.target.parent.parent.target.target.elf.segments.${number}`]: string[]; [x: `process.target.target.parent.parent.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.parent.parent.target.target.target.args.${number}`]: string[]; [x: `process.target.target.parent.parent.target.target.parent.args.${number}`]: string[]; [x: `process.target.target.parent.parent.target.parent.elf.exports.${number}`]: string[]; [x: `process.target.target.parent.parent.target.parent.elf.imports.${number}`]: string[]; [x: `process.target.target.parent.parent.target.parent.elf.sections.${number}`]: string[]; [x: `process.target.target.parent.parent.target.parent.elf.segments.${number}`]: string[]; [x: `process.target.target.parent.parent.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.parent.parent.target.parent.target.args.${number}`]: string[]; [x: `process.target.target.parent.parent.target.parent.parent.args.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.target.elf.exports.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.target.elf.imports.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.target.elf.sections.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.target.elf.segments.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.target.target.args.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.target.parent.args.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.parent.elf.exports.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.parent.elf.imports.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.parent.elf.sections.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.parent.elf.segments.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.parent.target.args.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.parent.parent.args.${number}`]: string[]; [x: `process.target.parent.target.target.target.target.elf.exports.${number}`]: string[]; [x: `process.target.parent.target.target.target.target.elf.imports.${number}`]: string[]; [x: `process.target.parent.target.target.target.target.elf.sections.${number}`]: string[]; [x: `process.target.parent.target.target.target.target.elf.segments.${number}`]: string[]; [x: `process.target.parent.target.target.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.target.target.target.target.target.args.${number}`]: string[]; [x: `process.target.parent.target.target.target.target.parent.args.${number}`]: string[]; [x: `process.target.parent.target.target.target.parent.elf.exports.${number}`]: string[]; [x: `process.target.parent.target.target.target.parent.elf.imports.${number}`]: string[]; [x: `process.target.parent.target.target.target.parent.elf.sections.${number}`]: string[]; [x: `process.target.parent.target.target.target.parent.elf.segments.${number}`]: string[]; [x: `process.target.parent.target.target.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.target.target.target.parent.target.args.${number}`]: string[]; [x: `process.target.parent.target.target.target.parent.parent.args.${number}`]: string[]; [x: `process.target.parent.target.target.parent.target.elf.exports.${number}`]: string[]; [x: `process.target.parent.target.target.parent.target.elf.imports.${number}`]: string[]; [x: `process.target.parent.target.target.parent.target.elf.sections.${number}`]: string[]; [x: `process.target.parent.target.target.parent.target.elf.segments.${number}`]: string[]; [x: `process.target.parent.target.target.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.target.target.parent.target.target.args.${number}`]: string[]; [x: `process.target.parent.target.target.parent.target.parent.args.${number}`]: string[]; [x: `process.target.parent.target.target.parent.parent.elf.exports.${number}`]: string[]; [x: `process.target.parent.target.target.parent.parent.elf.imports.${number}`]: string[]; [x: `process.target.parent.target.target.parent.parent.elf.sections.${number}`]: string[]; [x: `process.target.parent.target.target.parent.parent.elf.segments.${number}`]: string[]; [x: `process.target.parent.target.target.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.target.target.parent.parent.target.args.${number}`]: string[]; [x: `process.target.parent.target.target.parent.parent.parent.args.${number}`]: string[]; [x: `process.target.parent.target.parent.target.target.elf.exports.${number}`]: string[]; [x: `process.target.parent.target.parent.target.target.elf.imports.${number}`]: string[]; [x: `process.target.parent.target.parent.target.target.elf.sections.${number}`]: string[]; [x: `process.target.parent.target.parent.target.target.elf.segments.${number}`]: string[]; [x: `process.target.parent.target.parent.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.target.parent.target.target.target.args.${number}`]: string[]; [x: `process.target.parent.target.parent.target.target.parent.args.${number}`]: string[]; [x: `process.target.parent.target.parent.target.parent.elf.exports.${number}`]: string[]; [x: `process.target.parent.target.parent.target.parent.elf.imports.${number}`]: string[]; [x: `process.target.parent.target.parent.target.parent.elf.sections.${number}`]: string[]; [x: `process.target.parent.target.parent.target.parent.elf.segments.${number}`]: string[]; [x: `process.target.parent.target.parent.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.target.parent.target.parent.target.args.${number}`]: string[]; [x: `process.target.parent.target.parent.target.parent.parent.args.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.target.elf.exports.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.target.elf.imports.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.target.elf.sections.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.target.elf.segments.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.target.target.args.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.target.parent.args.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.parent.elf.exports.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.parent.elf.imports.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.parent.elf.sections.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.parent.elf.segments.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.parent.target.args.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.parent.parent.args.${number}`]: string[]; [x: `process.target.parent.parent.target.target.target.elf.exports.${number}`]: string[]; [x: `process.target.parent.parent.target.target.target.elf.imports.${number}`]: string[]; [x: `process.target.parent.parent.target.target.target.elf.sections.${number}`]: string[]; [x: `process.target.parent.parent.target.target.target.elf.segments.${number}`]: string[]; [x: `process.target.parent.parent.target.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.parent.target.target.target.target.args.${number}`]: string[]; [x: `process.target.parent.parent.target.target.target.parent.args.${number}`]: string[]; [x: `process.target.parent.parent.target.target.parent.elf.exports.${number}`]: string[]; [x: `process.target.parent.parent.target.target.parent.elf.imports.${number}`]: string[]; [x: `process.target.parent.parent.target.target.parent.elf.sections.${number}`]: string[]; [x: `process.target.parent.parent.target.target.parent.elf.segments.${number}`]: string[]; [x: `process.target.parent.parent.target.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.parent.target.target.parent.target.args.${number}`]: string[]; [x: `process.target.parent.parent.target.target.parent.parent.args.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.target.elf.exports.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.target.elf.imports.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.target.elf.sections.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.target.elf.segments.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.target.target.args.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.target.parent.args.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.parent.elf.exports.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.parent.elf.imports.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.parent.elf.sections.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.parent.elf.segments.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.parent.target.args.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.parent.parent.args.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.target.elf.exports.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.target.elf.imports.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.target.elf.sections.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.target.elf.segments.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.target.target.args.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.target.parent.args.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.parent.elf.exports.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.parent.elf.imports.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.parent.elf.sections.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.parent.elf.segments.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.parent.target.args.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.parent.parent.args.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.target.elf.exports.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.target.elf.imports.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.target.elf.sections.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.target.elf.segments.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.target.target.args.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.target.parent.args.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.parent.elf.exports.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.parent.elf.imports.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.parent.elf.sections.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.parent.elf.segments.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.parent.target.args.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.parent.parent.args.${number}`]: string[]; [x: `process.parent.target.target.target.target.target.elf.exports.${number}`]: string[]; [x: `process.parent.target.target.target.target.target.elf.imports.${number}`]: string[]; [x: `process.parent.target.target.target.target.target.elf.sections.${number}`]: string[]; [x: `process.parent.target.target.target.target.target.elf.segments.${number}`]: string[]; [x: `process.parent.target.target.target.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.target.target.target.target.target.args.${number}`]: string[]; [x: `process.parent.target.target.target.target.target.parent.args.${number}`]: string[]; [x: `process.parent.target.target.target.target.parent.elf.exports.${number}`]: string[]; [x: `process.parent.target.target.target.target.parent.elf.imports.${number}`]: string[]; [x: `process.parent.target.target.target.target.parent.elf.sections.${number}`]: string[]; [x: `process.parent.target.target.target.target.parent.elf.segments.${number}`]: string[]; [x: `process.parent.target.target.target.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.target.target.target.parent.target.args.${number}`]: string[]; [x: `process.parent.target.target.target.target.parent.parent.args.${number}`]: string[]; [x: `process.parent.target.target.target.parent.target.elf.exports.${number}`]: string[]; [x: `process.parent.target.target.target.parent.target.elf.imports.${number}`]: string[]; [x: `process.parent.target.target.target.parent.target.elf.sections.${number}`]: string[]; [x: `process.parent.target.target.target.parent.target.elf.segments.${number}`]: string[]; [x: `process.parent.target.target.target.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.target.target.parent.target.target.args.${number}`]: string[]; [x: `process.parent.target.target.target.parent.target.parent.args.${number}`]: string[]; [x: `process.parent.target.target.target.parent.parent.elf.exports.${number}`]: string[]; [x: `process.parent.target.target.target.parent.parent.elf.imports.${number}`]: string[]; [x: `process.parent.target.target.target.parent.parent.elf.sections.${number}`]: string[]; [x: `process.parent.target.target.target.parent.parent.elf.segments.${number}`]: string[]; [x: `process.parent.target.target.target.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.target.target.parent.parent.target.args.${number}`]: string[]; [x: `process.parent.target.target.target.parent.parent.parent.args.${number}`]: string[]; [x: `process.parent.target.target.parent.target.target.elf.exports.${number}`]: string[]; [x: `process.parent.target.target.parent.target.target.elf.imports.${number}`]: string[]; [x: `process.parent.target.target.parent.target.target.elf.sections.${number}`]: string[]; [x: `process.parent.target.target.parent.target.target.elf.segments.${number}`]: string[]; [x: `process.parent.target.target.parent.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.target.parent.target.target.target.args.${number}`]: string[]; [x: `process.parent.target.target.parent.target.target.parent.args.${number}`]: string[]; [x: `process.parent.target.target.parent.target.parent.elf.exports.${number}`]: string[]; [x: `process.parent.target.target.parent.target.parent.elf.imports.${number}`]: string[]; [x: `process.parent.target.target.parent.target.parent.elf.sections.${number}`]: string[]; [x: `process.parent.target.target.parent.target.parent.elf.segments.${number}`]: string[]; [x: `process.parent.target.target.parent.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.target.parent.target.parent.target.args.${number}`]: string[]; [x: `process.parent.target.target.parent.target.parent.parent.args.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.target.elf.exports.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.target.elf.imports.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.target.elf.sections.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.target.elf.segments.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.target.target.args.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.target.parent.args.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.parent.elf.exports.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.parent.elf.imports.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.parent.elf.sections.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.parent.elf.segments.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.parent.target.args.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.parent.parent.args.${number}`]: string[]; [x: `process.parent.target.parent.target.target.target.elf.exports.${number}`]: string[]; [x: `process.parent.target.parent.target.target.target.elf.imports.${number}`]: string[]; [x: `process.parent.target.parent.target.target.target.elf.sections.${number}`]: string[]; [x: `process.parent.target.parent.target.target.target.elf.segments.${number}`]: string[]; [x: `process.parent.target.parent.target.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.parent.target.target.target.target.args.${number}`]: string[]; [x: `process.parent.target.parent.target.target.target.parent.args.${number}`]: string[]; [x: `process.parent.target.parent.target.target.parent.elf.exports.${number}`]: string[]; [x: `process.parent.target.parent.target.target.parent.elf.imports.${number}`]: string[]; [x: `process.parent.target.parent.target.target.parent.elf.sections.${number}`]: string[]; [x: `process.parent.target.parent.target.target.parent.elf.segments.${number}`]: string[]; [x: `process.parent.target.parent.target.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.parent.target.target.parent.target.args.${number}`]: string[]; [x: `process.parent.target.parent.target.target.parent.parent.args.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.target.elf.exports.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.target.elf.imports.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.target.elf.sections.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.target.elf.segments.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.target.target.args.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.target.parent.args.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.parent.elf.exports.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.parent.elf.imports.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.parent.elf.sections.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.parent.elf.segments.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.parent.target.args.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.parent.parent.args.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.target.elf.exports.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.target.elf.imports.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.target.elf.sections.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.target.elf.segments.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.target.target.args.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.target.parent.args.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.parent.elf.exports.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.parent.elf.imports.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.parent.elf.sections.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.parent.elf.segments.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.parent.target.args.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.parent.parent.args.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.target.elf.exports.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.target.elf.imports.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.target.elf.sections.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.target.elf.segments.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.target.target.args.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.target.parent.args.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.parent.elf.exports.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.parent.elf.imports.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.parent.elf.sections.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.parent.elf.segments.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.parent.target.args.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.parent.parent.args.${number}`]: string[]; [x: `process.parent.parent.target.target.target.target.elf.exports.${number}`]: string[]; [x: `process.parent.parent.target.target.target.target.elf.imports.${number}`]: string[]; [x: `process.parent.parent.target.target.target.target.elf.sections.${number}`]: string[]; [x: `process.parent.parent.target.target.target.target.elf.segments.${number}`]: string[]; [x: `process.parent.parent.target.target.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.target.target.target.target.target.args.${number}`]: string[]; [x: `process.parent.parent.target.target.target.target.parent.args.${number}`]: string[]; [x: `process.parent.parent.target.target.target.parent.elf.exports.${number}`]: string[]; [x: `process.parent.parent.target.target.target.parent.elf.imports.${number}`]: string[]; [x: `process.parent.parent.target.target.target.parent.elf.sections.${number}`]: string[]; [x: `process.parent.parent.target.target.target.parent.elf.segments.${number}`]: string[]; [x: `process.parent.parent.target.target.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.target.target.target.parent.target.args.${number}`]: string[]; [x: `process.parent.parent.target.target.target.parent.parent.args.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.target.elf.exports.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.target.elf.imports.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.target.elf.sections.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.target.elf.segments.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.target.target.args.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.target.parent.args.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.parent.elf.exports.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.parent.elf.imports.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.parent.elf.sections.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.parent.elf.segments.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.parent.target.args.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.parent.parent.args.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.target.elf.exports.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.target.elf.imports.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.target.elf.sections.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.target.elf.segments.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.target.target.args.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.target.parent.args.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.parent.elf.exports.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.parent.elf.imports.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.parent.elf.sections.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.parent.elf.segments.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.parent.target.args.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.parent.parent.args.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.target.elf.exports.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.target.elf.imports.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.target.elf.sections.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.target.elf.segments.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.target.target.args.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.target.parent.args.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.parent.elf.exports.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.parent.elf.imports.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.parent.elf.sections.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.parent.elf.segments.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.parent.target.args.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.parent.parent.args.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.target.elf.exports.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.target.elf.imports.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.target.elf.sections.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.target.elf.segments.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.target.target.args.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.target.parent.args.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.parent.elf.exports.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.parent.elf.imports.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.parent.elf.sections.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.parent.elf.segments.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.parent.target.args.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.parent.parent.args.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.target.elf.exports.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.target.elf.imports.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.target.elf.sections.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.target.elf.segments.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.target.target.args.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.target.parent.args.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.parent.elf.exports.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.parent.elf.imports.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.parent.elf.sections.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.parent.elf.segments.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.parent.target.args.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.parent.parent.args.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.target.elf.exports.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.target.elf.imports.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.target.elf.sections.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.target.elf.segments.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.target.target.args.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.target.parent.args.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.parent.elf.exports.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.parent.elf.imports.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.parent.elf.sections.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.parent.elf.segments.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.parent.target.args.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.parent.parent.args.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.target.elf.exports.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.target.elf.imports.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.target.elf.sections.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.target.elf.segments.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.target.target.args.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.target.parent.args.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.parent.elf.exports.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.parent.elf.imports.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.parent.elf.sections.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.parent.elf.segments.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.parent.target.args.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.parent.parent.args.${number}`]: string[]; [x: `process.target.target.target.target.target.target.target.elf.exports.${number}`]: string[]; [x: `process.target.target.target.target.target.target.target.elf.imports.${number}`]: string[]; [x: `process.target.target.target.target.target.target.target.elf.sections.${number}`]: string[]; [x: `process.target.target.target.target.target.target.target.elf.segments.${number}`]: string[]; [x: `process.target.target.target.target.target.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.target.target.target.target.target.target.args.${number}`]: string[]; [x: `process.target.target.target.target.target.target.target.parent.args.${number}`]: string[]; [x: `process.target.target.target.target.target.target.parent.elf.exports.${number}`]: string[]; [x: `process.target.target.target.target.target.target.parent.elf.imports.${number}`]: string[]; [x: `process.target.target.target.target.target.target.parent.elf.sections.${number}`]: string[]; [x: `process.target.target.target.target.target.target.parent.elf.segments.${number}`]: string[]; [x: `process.target.target.target.target.target.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.target.target.target.target.parent.target.args.${number}`]: string[]; [x: `process.target.target.target.target.target.target.parent.parent.args.${number}`]: string[]; [x: `process.target.target.target.target.target.parent.target.elf.exports.${number}`]: string[]; [x: `process.target.target.target.target.target.parent.target.elf.imports.${number}`]: string[]; [x: `process.target.target.target.target.target.parent.target.elf.sections.${number}`]: string[]; [x: `process.target.target.target.target.target.parent.target.elf.segments.${number}`]: string[]; [x: `process.target.target.target.target.target.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.target.target.target.parent.target.target.args.${number}`]: string[]; [x: `process.target.target.target.target.target.parent.target.parent.args.${number}`]: string[]; [x: `process.target.target.target.target.target.parent.parent.elf.exports.${number}`]: string[]; [x: `process.target.target.target.target.target.parent.parent.elf.imports.${number}`]: string[]; [x: `process.target.target.target.target.target.parent.parent.elf.sections.${number}`]: string[]; [x: `process.target.target.target.target.target.parent.parent.elf.segments.${number}`]: string[]; [x: `process.target.target.target.target.target.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.target.target.target.parent.parent.target.args.${number}`]: string[]; [x: `process.target.target.target.target.target.parent.parent.parent.args.${number}`]: string[]; [x: `process.target.target.target.target.parent.target.target.elf.exports.${number}`]: string[]; [x: `process.target.target.target.target.parent.target.target.elf.imports.${number}`]: string[]; [x: `process.target.target.target.target.parent.target.target.elf.sections.${number}`]: string[]; [x: `process.target.target.target.target.parent.target.target.elf.segments.${number}`]: string[]; [x: `process.target.target.target.target.parent.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.target.target.parent.target.target.target.args.${number}`]: string[]; [x: `process.target.target.target.target.parent.target.target.parent.args.${number}`]: string[]; [x: `process.target.target.target.target.parent.target.parent.elf.exports.${number}`]: string[]; [x: `process.target.target.target.target.parent.target.parent.elf.imports.${number}`]: string[]; [x: `process.target.target.target.target.parent.target.parent.elf.sections.${number}`]: string[]; [x: `process.target.target.target.target.parent.target.parent.elf.segments.${number}`]: string[]; [x: `process.target.target.target.target.parent.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.target.target.parent.target.parent.target.args.${number}`]: string[]; [x: `process.target.target.target.target.parent.target.parent.parent.args.${number}`]: string[]; [x: `process.target.target.target.target.parent.parent.target.elf.exports.${number}`]: string[]; [x: `process.target.target.target.target.parent.parent.target.elf.imports.${number}`]: string[]; [x: `process.target.target.target.target.parent.parent.target.elf.sections.${number}`]: string[]; [x: `process.target.target.target.target.parent.parent.target.elf.segments.${number}`]: string[]; [x: `process.target.target.target.target.parent.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.target.target.parent.parent.target.target.args.${number}`]: string[]; [x: `process.target.target.target.target.parent.parent.target.parent.args.${number}`]: string[]; [x: `process.target.target.target.target.parent.parent.parent.elf.exports.${number}`]: string[]; [x: `process.target.target.target.target.parent.parent.parent.elf.imports.${number}`]: string[]; [x: `process.target.target.target.target.parent.parent.parent.elf.sections.${number}`]: string[]; [x: `process.target.target.target.target.parent.parent.parent.elf.segments.${number}`]: string[]; [x: `process.target.target.target.target.parent.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.target.target.parent.parent.parent.target.args.${number}`]: string[]; [x: `process.target.target.target.target.parent.parent.parent.parent.args.${number}`]: string[]; [x: `process.target.target.target.parent.target.target.target.elf.exports.${number}`]: string[]; [x: `process.target.target.target.parent.target.target.target.elf.imports.${number}`]: string[]; [x: `process.target.target.target.parent.target.target.target.elf.sections.${number}`]: string[]; [x: `process.target.target.target.parent.target.target.target.elf.segments.${number}`]: string[]; [x: `process.target.target.target.parent.target.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.target.parent.target.target.target.target.args.${number}`]: string[]; [x: `process.target.target.target.parent.target.target.target.parent.args.${number}`]: string[]; [x: `process.target.target.target.parent.target.target.parent.elf.exports.${number}`]: string[]; [x: `process.target.target.target.parent.target.target.parent.elf.imports.${number}`]: string[]; [x: `process.target.target.target.parent.target.target.parent.elf.sections.${number}`]: string[]; [x: `process.target.target.target.parent.target.target.parent.elf.segments.${number}`]: string[]; [x: `process.target.target.target.parent.target.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.target.parent.target.target.parent.target.args.${number}`]: string[]; [x: `process.target.target.target.parent.target.target.parent.parent.args.${number}`]: string[]; [x: `process.target.target.target.parent.target.parent.target.elf.exports.${number}`]: string[]; [x: `process.target.target.target.parent.target.parent.target.elf.imports.${number}`]: string[]; [x: `process.target.target.target.parent.target.parent.target.elf.sections.${number}`]: string[]; [x: `process.target.target.target.parent.target.parent.target.elf.segments.${number}`]: string[]; [x: `process.target.target.target.parent.target.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.target.parent.target.parent.target.target.args.${number}`]: string[]; [x: `process.target.target.target.parent.target.parent.target.parent.args.${number}`]: string[]; [x: `process.target.target.target.parent.target.parent.parent.elf.exports.${number}`]: string[]; [x: `process.target.target.target.parent.target.parent.parent.elf.imports.${number}`]: string[]; [x: `process.target.target.target.parent.target.parent.parent.elf.sections.${number}`]: string[]; [x: `process.target.target.target.parent.target.parent.parent.elf.segments.${number}`]: string[]; [x: `process.target.target.target.parent.target.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.target.parent.target.parent.parent.target.args.${number}`]: string[]; [x: `process.target.target.target.parent.target.parent.parent.parent.args.${number}`]: string[]; [x: `process.target.target.target.parent.parent.target.target.elf.exports.${number}`]: string[]; [x: `process.target.target.target.parent.parent.target.target.elf.imports.${number}`]: string[]; [x: `process.target.target.target.parent.parent.target.target.elf.sections.${number}`]: string[]; [x: `process.target.target.target.parent.parent.target.target.elf.segments.${number}`]: string[]; [x: `process.target.target.target.parent.parent.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.target.parent.parent.target.target.target.args.${number}`]: string[]; [x: `process.target.target.target.parent.parent.target.target.parent.args.${number}`]: string[]; [x: `process.target.target.target.parent.parent.target.parent.elf.exports.${number}`]: string[]; [x: `process.target.target.target.parent.parent.target.parent.elf.imports.${number}`]: string[]; [x: `process.target.target.target.parent.parent.target.parent.elf.sections.${number}`]: string[]; [x: `process.target.target.target.parent.parent.target.parent.elf.segments.${number}`]: string[]; [x: `process.target.target.target.parent.parent.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.target.parent.parent.target.parent.target.args.${number}`]: string[]; [x: `process.target.target.target.parent.parent.target.parent.parent.args.${number}`]: string[]; [x: `process.target.target.target.parent.parent.parent.target.elf.exports.${number}`]: string[]; [x: `process.target.target.target.parent.parent.parent.target.elf.imports.${number}`]: string[]; [x: `process.target.target.target.parent.parent.parent.target.elf.sections.${number}`]: string[]; [x: `process.target.target.target.parent.parent.parent.target.elf.segments.${number}`]: string[]; [x: `process.target.target.target.parent.parent.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.target.parent.parent.parent.target.target.args.${number}`]: string[]; [x: `process.target.target.target.parent.parent.parent.target.parent.args.${number}`]: string[]; [x: `process.target.target.target.parent.parent.parent.parent.elf.exports.${number}`]: string[]; [x: `process.target.target.target.parent.parent.parent.parent.elf.imports.${number}`]: string[]; [x: `process.target.target.target.parent.parent.parent.parent.elf.sections.${number}`]: string[]; [x: `process.target.target.target.parent.parent.parent.parent.elf.segments.${number}`]: string[]; [x: `process.target.target.target.parent.parent.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.target.parent.parent.parent.parent.target.args.${number}`]: string[]; [x: `process.target.target.target.parent.parent.parent.parent.parent.args.${number}`]: string[]; [x: `process.target.target.parent.target.target.target.target.elf.exports.${number}`]: string[]; [x: `process.target.target.parent.target.target.target.target.elf.imports.${number}`]: string[]; [x: `process.target.target.parent.target.target.target.target.elf.sections.${number}`]: string[]; [x: `process.target.target.parent.target.target.target.target.elf.segments.${number}`]: string[]; [x: `process.target.target.parent.target.target.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.parent.target.target.target.target.target.args.${number}`]: string[]; [x: `process.target.target.parent.target.target.target.target.parent.args.${number}`]: string[]; [x: `process.target.target.parent.target.target.target.parent.elf.exports.${number}`]: string[]; [x: `process.target.target.parent.target.target.target.parent.elf.imports.${number}`]: string[]; [x: `process.target.target.parent.target.target.target.parent.elf.sections.${number}`]: string[]; [x: `process.target.target.parent.target.target.target.parent.elf.segments.${number}`]: string[]; [x: `process.target.target.parent.target.target.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.parent.target.target.target.parent.target.args.${number}`]: string[]; [x: `process.target.target.parent.target.target.target.parent.parent.args.${number}`]: string[]; [x: `process.target.target.parent.target.target.parent.target.elf.exports.${number}`]: string[]; [x: `process.target.target.parent.target.target.parent.target.elf.imports.${number}`]: string[]; [x: `process.target.target.parent.target.target.parent.target.elf.sections.${number}`]: string[]; [x: `process.target.target.parent.target.target.parent.target.elf.segments.${number}`]: string[]; [x: `process.target.target.parent.target.target.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.parent.target.target.parent.target.target.args.${number}`]: string[]; [x: `process.target.target.parent.target.target.parent.target.parent.args.${number}`]: string[]; [x: `process.target.target.parent.target.target.parent.parent.elf.exports.${number}`]: string[]; [x: `process.target.target.parent.target.target.parent.parent.elf.imports.${number}`]: string[]; [x: `process.target.target.parent.target.target.parent.parent.elf.sections.${number}`]: string[]; [x: `process.target.target.parent.target.target.parent.parent.elf.segments.${number}`]: string[]; [x: `process.target.target.parent.target.target.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.parent.target.target.parent.parent.target.args.${number}`]: string[]; [x: `process.target.target.parent.target.target.parent.parent.parent.args.${number}`]: string[]; [x: `process.target.target.parent.target.parent.target.target.elf.exports.${number}`]: string[]; [x: `process.target.target.parent.target.parent.target.target.elf.imports.${number}`]: string[]; [x: `process.target.target.parent.target.parent.target.target.elf.sections.${number}`]: string[]; [x: `process.target.target.parent.target.parent.target.target.elf.segments.${number}`]: string[]; [x: `process.target.target.parent.target.parent.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.parent.target.parent.target.target.target.args.${number}`]: string[]; [x: `process.target.target.parent.target.parent.target.target.parent.args.${number}`]: string[]; [x: `process.target.target.parent.target.parent.target.parent.elf.exports.${number}`]: string[]; [x: `process.target.target.parent.target.parent.target.parent.elf.imports.${number}`]: string[]; [x: `process.target.target.parent.target.parent.target.parent.elf.sections.${number}`]: string[]; [x: `process.target.target.parent.target.parent.target.parent.elf.segments.${number}`]: string[]; [x: `process.target.target.parent.target.parent.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.parent.target.parent.target.parent.target.args.${number}`]: string[]; [x: `process.target.target.parent.target.parent.target.parent.parent.args.${number}`]: string[]; [x: `process.target.target.parent.target.parent.parent.target.elf.exports.${number}`]: string[]; [x: `process.target.target.parent.target.parent.parent.target.elf.imports.${number}`]: string[]; [x: `process.target.target.parent.target.parent.parent.target.elf.sections.${number}`]: string[]; [x: `process.target.target.parent.target.parent.parent.target.elf.segments.${number}`]: string[]; [x: `process.target.target.parent.target.parent.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.parent.target.parent.parent.target.target.args.${number}`]: string[]; [x: `process.target.target.parent.target.parent.parent.target.parent.args.${number}`]: string[]; [x: `process.target.target.parent.target.parent.parent.parent.elf.exports.${number}`]: string[]; [x: `process.target.target.parent.target.parent.parent.parent.elf.imports.${number}`]: string[]; [x: `process.target.target.parent.target.parent.parent.parent.elf.sections.${number}`]: string[]; [x: `process.target.target.parent.target.parent.parent.parent.elf.segments.${number}`]: string[]; [x: `process.target.target.parent.target.parent.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.parent.target.parent.parent.parent.target.args.${number}`]: string[]; [x: `process.target.target.parent.target.parent.parent.parent.parent.args.${number}`]: string[]; [x: `process.target.target.parent.parent.target.target.target.elf.exports.${number}`]: string[]; [x: `process.target.target.parent.parent.target.target.target.elf.imports.${number}`]: string[]; [x: `process.target.target.parent.parent.target.target.target.elf.sections.${number}`]: string[]; [x: `process.target.target.parent.parent.target.target.target.elf.segments.${number}`]: string[]; [x: `process.target.target.parent.parent.target.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.parent.parent.target.target.target.target.args.${number}`]: string[]; [x: `process.target.target.parent.parent.target.target.target.parent.args.${number}`]: string[]; [x: `process.target.target.parent.parent.target.target.parent.elf.exports.${number}`]: string[]; [x: `process.target.target.parent.parent.target.target.parent.elf.imports.${number}`]: string[]; [x: `process.target.target.parent.parent.target.target.parent.elf.sections.${number}`]: string[]; [x: `process.target.target.parent.parent.target.target.parent.elf.segments.${number}`]: string[]; [x: `process.target.target.parent.parent.target.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.parent.parent.target.target.parent.target.args.${number}`]: string[]; [x: `process.target.target.parent.parent.target.target.parent.parent.args.${number}`]: string[]; [x: `process.target.target.parent.parent.target.parent.target.elf.exports.${number}`]: string[]; [x: `process.target.target.parent.parent.target.parent.target.elf.imports.${number}`]: string[]; [x: `process.target.target.parent.parent.target.parent.target.elf.sections.${number}`]: string[]; [x: `process.target.target.parent.parent.target.parent.target.elf.segments.${number}`]: string[]; [x: `process.target.target.parent.parent.target.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.parent.parent.target.parent.target.target.args.${number}`]: string[]; [x: `process.target.target.parent.parent.target.parent.target.parent.args.${number}`]: string[]; [x: `process.target.target.parent.parent.target.parent.parent.elf.exports.${number}`]: string[]; [x: `process.target.target.parent.parent.target.parent.parent.elf.imports.${number}`]: string[]; [x: `process.target.target.parent.parent.target.parent.parent.elf.sections.${number}`]: string[]; [x: `process.target.target.parent.parent.target.parent.parent.elf.segments.${number}`]: string[]; [x: `process.target.target.parent.parent.target.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.parent.parent.target.parent.parent.target.args.${number}`]: string[]; [x: `process.target.target.parent.parent.target.parent.parent.parent.args.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.target.target.elf.exports.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.target.target.elf.imports.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.target.target.elf.sections.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.target.target.elf.segments.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.target.target.target.args.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.target.target.parent.args.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.target.parent.elf.exports.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.target.parent.elf.imports.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.target.parent.elf.sections.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.target.parent.elf.segments.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.target.parent.target.args.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.target.parent.parent.args.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.parent.target.elf.exports.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.parent.target.elf.imports.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.parent.target.elf.sections.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.parent.target.elf.segments.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.parent.target.target.args.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.parent.target.parent.args.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.parent.parent.elf.exports.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.parent.parent.elf.imports.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.parent.parent.elf.sections.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.parent.parent.elf.segments.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.parent.parent.target.args.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.parent.parent.parent.args.${number}`]: string[]; [x: `process.target.parent.target.target.target.target.target.elf.exports.${number}`]: string[]; [x: `process.target.parent.target.target.target.target.target.elf.imports.${number}`]: string[]; [x: `process.target.parent.target.target.target.target.target.elf.sections.${number}`]: string[]; [x: `process.target.parent.target.target.target.target.target.elf.segments.${number}`]: string[]; [x: `process.target.parent.target.target.target.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.target.target.target.target.target.target.args.${number}`]: string[]; [x: `process.target.parent.target.target.target.target.target.parent.args.${number}`]: string[]; [x: `process.target.parent.target.target.target.target.parent.elf.exports.${number}`]: string[]; [x: `process.target.parent.target.target.target.target.parent.elf.imports.${number}`]: string[]; [x: `process.target.parent.target.target.target.target.parent.elf.sections.${number}`]: string[]; [x: `process.target.parent.target.target.target.target.parent.elf.segments.${number}`]: string[]; [x: `process.target.parent.target.target.target.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.target.target.target.target.parent.target.args.${number}`]: string[]; [x: `process.target.parent.target.target.target.target.parent.parent.args.${number}`]: string[]; [x: `process.target.parent.target.target.target.parent.target.elf.exports.${number}`]: string[]; [x: `process.target.parent.target.target.target.parent.target.elf.imports.${number}`]: string[]; [x: `process.target.parent.target.target.target.parent.target.elf.sections.${number}`]: string[]; [x: `process.target.parent.target.target.target.parent.target.elf.segments.${number}`]: string[]; [x: `process.target.parent.target.target.target.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.target.target.target.parent.target.target.args.${number}`]: string[]; [x: `process.target.parent.target.target.target.parent.target.parent.args.${number}`]: string[]; [x: `process.target.parent.target.target.target.parent.parent.elf.exports.${number}`]: string[]; [x: `process.target.parent.target.target.target.parent.parent.elf.imports.${number}`]: string[]; [x: `process.target.parent.target.target.target.parent.parent.elf.sections.${number}`]: string[]; [x: `process.target.parent.target.target.target.parent.parent.elf.segments.${number}`]: string[]; [x: `process.target.parent.target.target.target.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.target.target.target.parent.parent.target.args.${number}`]: string[]; [x: `process.target.parent.target.target.target.parent.parent.parent.args.${number}`]: string[]; [x: `process.target.parent.target.target.parent.target.target.elf.exports.${number}`]: string[]; [x: `process.target.parent.target.target.parent.target.target.elf.imports.${number}`]: string[]; [x: `process.target.parent.target.target.parent.target.target.elf.sections.${number}`]: string[]; [x: `process.target.parent.target.target.parent.target.target.elf.segments.${number}`]: string[]; [x: `process.target.parent.target.target.parent.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.target.target.parent.target.target.target.args.${number}`]: string[]; [x: `process.target.parent.target.target.parent.target.target.parent.args.${number}`]: string[]; [x: `process.target.parent.target.target.parent.target.parent.elf.exports.${number}`]: string[]; [x: `process.target.parent.target.target.parent.target.parent.elf.imports.${number}`]: string[]; [x: `process.target.parent.target.target.parent.target.parent.elf.sections.${number}`]: string[]; [x: `process.target.parent.target.target.parent.target.parent.elf.segments.${number}`]: string[]; [x: `process.target.parent.target.target.parent.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.target.target.parent.target.parent.target.args.${number}`]: string[]; [x: `process.target.parent.target.target.parent.target.parent.parent.args.${number}`]: string[]; [x: `process.target.parent.target.target.parent.parent.target.elf.exports.${number}`]: string[]; [x: `process.target.parent.target.target.parent.parent.target.elf.imports.${number}`]: string[]; [x: `process.target.parent.target.target.parent.parent.target.elf.sections.${number}`]: string[]; [x: `process.target.parent.target.target.parent.parent.target.elf.segments.${number}`]: string[]; [x: `process.target.parent.target.target.parent.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.target.target.parent.parent.target.target.args.${number}`]: string[]; [x: `process.target.parent.target.target.parent.parent.target.parent.args.${number}`]: string[]; [x: `process.target.parent.target.target.parent.parent.parent.elf.exports.${number}`]: string[]; [x: `process.target.parent.target.target.parent.parent.parent.elf.imports.${number}`]: string[]; [x: `process.target.parent.target.target.parent.parent.parent.elf.sections.${number}`]: string[]; [x: `process.target.parent.target.target.parent.parent.parent.elf.segments.${number}`]: string[]; [x: `process.target.parent.target.target.parent.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.target.target.parent.parent.parent.target.args.${number}`]: string[]; [x: `process.target.parent.target.target.parent.parent.parent.parent.args.${number}`]: string[]; [x: `process.target.parent.target.parent.target.target.target.elf.exports.${number}`]: string[]; [x: `process.target.parent.target.parent.target.target.target.elf.imports.${number}`]: string[]; [x: `process.target.parent.target.parent.target.target.target.elf.sections.${number}`]: string[]; [x: `process.target.parent.target.parent.target.target.target.elf.segments.${number}`]: string[]; [x: `process.target.parent.target.parent.target.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.target.parent.target.target.target.target.args.${number}`]: string[]; [x: `process.target.parent.target.parent.target.target.target.parent.args.${number}`]: string[]; [x: `process.target.parent.target.parent.target.target.parent.elf.exports.${number}`]: string[]; [x: `process.target.parent.target.parent.target.target.parent.elf.imports.${number}`]: string[]; [x: `process.target.parent.target.parent.target.target.parent.elf.sections.${number}`]: string[]; [x: `process.target.parent.target.parent.target.target.parent.elf.segments.${number}`]: string[]; [x: `process.target.parent.target.parent.target.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.target.parent.target.target.parent.target.args.${number}`]: string[]; [x: `process.target.parent.target.parent.target.target.parent.parent.args.${number}`]: string[]; [x: `process.target.parent.target.parent.target.parent.target.elf.exports.${number}`]: string[]; [x: `process.target.parent.target.parent.target.parent.target.elf.imports.${number}`]: string[]; [x: `process.target.parent.target.parent.target.parent.target.elf.sections.${number}`]: string[]; [x: `process.target.parent.target.parent.target.parent.target.elf.segments.${number}`]: string[]; [x: `process.target.parent.target.parent.target.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.target.parent.target.parent.target.target.args.${number}`]: string[]; [x: `process.target.parent.target.parent.target.parent.target.parent.args.${number}`]: string[]; [x: `process.target.parent.target.parent.target.parent.parent.elf.exports.${number}`]: string[]; [x: `process.target.parent.target.parent.target.parent.parent.elf.imports.${number}`]: string[]; [x: `process.target.parent.target.parent.target.parent.parent.elf.sections.${number}`]: string[]; [x: `process.target.parent.target.parent.target.parent.parent.elf.segments.${number}`]: string[]; [x: `process.target.parent.target.parent.target.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.target.parent.target.parent.parent.target.args.${number}`]: string[]; [x: `process.target.parent.target.parent.target.parent.parent.parent.args.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.target.target.elf.exports.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.target.target.elf.imports.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.target.target.elf.sections.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.target.target.elf.segments.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.target.target.target.args.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.target.target.parent.args.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.target.parent.elf.exports.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.target.parent.elf.imports.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.target.parent.elf.sections.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.target.parent.elf.segments.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.target.parent.target.args.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.target.parent.parent.args.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.parent.target.elf.exports.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.parent.target.elf.imports.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.parent.target.elf.sections.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.parent.target.elf.segments.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.parent.target.target.args.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.parent.target.parent.args.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.parent.parent.elf.exports.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.parent.parent.elf.imports.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.parent.parent.elf.sections.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.parent.parent.elf.segments.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.parent.parent.target.args.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.parent.parent.parent.args.${number}`]: string[]; [x: `process.target.parent.parent.target.target.target.target.elf.exports.${number}`]: string[]; [x: `process.target.parent.parent.target.target.target.target.elf.imports.${number}`]: string[]; [x: `process.target.parent.parent.target.target.target.target.elf.sections.${number}`]: string[]; [x: `process.target.parent.parent.target.target.target.target.elf.segments.${number}`]: string[]; [x: `process.target.parent.parent.target.target.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.parent.target.target.target.target.target.args.${number}`]: string[]; [x: `process.target.parent.parent.target.target.target.target.parent.args.${number}`]: string[]; [x: `process.target.parent.parent.target.target.target.parent.elf.exports.${number}`]: string[]; [x: `process.target.parent.parent.target.target.target.parent.elf.imports.${number}`]: string[]; [x: `process.target.parent.parent.target.target.target.parent.elf.sections.${number}`]: string[]; [x: `process.target.parent.parent.target.target.target.parent.elf.segments.${number}`]: string[]; [x: `process.target.parent.parent.target.target.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.parent.target.target.target.parent.target.args.${number}`]: string[]; [x: `process.target.parent.parent.target.target.target.parent.parent.args.${number}`]: string[]; [x: `process.target.parent.parent.target.target.parent.target.elf.exports.${number}`]: string[]; [x: `process.target.parent.parent.target.target.parent.target.elf.imports.${number}`]: string[]; [x: `process.target.parent.parent.target.target.parent.target.elf.sections.${number}`]: string[]; [x: `process.target.parent.parent.target.target.parent.target.elf.segments.${number}`]: string[]; [x: `process.target.parent.parent.target.target.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.parent.target.target.parent.target.target.args.${number}`]: string[]; [x: `process.target.parent.parent.target.target.parent.target.parent.args.${number}`]: string[]; [x: `process.target.parent.parent.target.target.parent.parent.elf.exports.${number}`]: string[]; [x: `process.target.parent.parent.target.target.parent.parent.elf.imports.${number}`]: string[]; [x: `process.target.parent.parent.target.target.parent.parent.elf.sections.${number}`]: string[]; [x: `process.target.parent.parent.target.target.parent.parent.elf.segments.${number}`]: string[]; [x: `process.target.parent.parent.target.target.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.parent.target.target.parent.parent.target.args.${number}`]: string[]; [x: `process.target.parent.parent.target.target.parent.parent.parent.args.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.target.target.elf.exports.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.target.target.elf.imports.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.target.target.elf.sections.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.target.target.elf.segments.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.target.target.target.args.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.target.target.parent.args.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.target.parent.elf.exports.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.target.parent.elf.imports.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.target.parent.elf.sections.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.target.parent.elf.segments.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.target.parent.target.args.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.target.parent.parent.args.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.parent.target.elf.exports.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.parent.target.elf.imports.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.parent.target.elf.sections.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.parent.target.elf.segments.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.parent.target.target.args.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.parent.target.parent.args.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.parent.parent.elf.exports.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.parent.parent.elf.imports.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.parent.parent.elf.sections.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.parent.parent.elf.segments.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.parent.parent.target.args.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.parent.parent.parent.args.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.target.target.elf.exports.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.target.target.elf.imports.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.target.target.elf.sections.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.target.target.elf.segments.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.target.target.target.args.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.target.target.parent.args.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.target.parent.elf.exports.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.target.parent.elf.imports.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.target.parent.elf.sections.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.target.parent.elf.segments.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.target.parent.target.args.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.target.parent.parent.args.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.parent.target.elf.exports.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.parent.target.elf.imports.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.parent.target.elf.sections.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.parent.target.elf.segments.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.parent.target.target.args.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.parent.target.parent.args.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.parent.parent.elf.exports.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.parent.parent.elf.imports.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.parent.parent.elf.sections.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.parent.parent.elf.segments.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.parent.parent.target.args.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.parent.parent.parent.args.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.target.target.elf.exports.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.target.target.elf.imports.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.target.target.elf.sections.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.target.target.elf.segments.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.target.target.target.args.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.target.target.parent.args.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.target.parent.elf.exports.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.target.parent.elf.imports.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.target.parent.elf.sections.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.target.parent.elf.segments.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.target.parent.target.args.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.target.parent.parent.args.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.parent.target.elf.exports.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.parent.target.elf.imports.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.parent.target.elf.sections.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.parent.target.elf.segments.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.parent.target.target.args.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.parent.target.parent.args.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.parent.parent.elf.exports.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.parent.parent.elf.imports.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.parent.parent.elf.sections.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.parent.parent.elf.segments.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.parent.parent.target.args.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.parent.parent.parent.args.${number}`]: string[]; [x: `process.parent.target.target.target.target.target.target.elf.exports.${number}`]: string[]; [x: `process.parent.target.target.target.target.target.target.elf.imports.${number}`]: string[]; [x: `process.parent.target.target.target.target.target.target.elf.sections.${number}`]: string[]; [x: `process.parent.target.target.target.target.target.target.elf.segments.${number}`]: string[]; [x: `process.parent.target.target.target.target.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.target.target.target.target.target.target.args.${number}`]: string[]; [x: `process.parent.target.target.target.target.target.target.parent.args.${number}`]: string[]; [x: `process.parent.target.target.target.target.target.parent.elf.exports.${number}`]: string[]; [x: `process.parent.target.target.target.target.target.parent.elf.imports.${number}`]: string[]; [x: `process.parent.target.target.target.target.target.parent.elf.sections.${number}`]: string[]; [x: `process.parent.target.target.target.target.target.parent.elf.segments.${number}`]: string[]; [x: `process.parent.target.target.target.target.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.target.target.target.target.parent.target.args.${number}`]: string[]; [x: `process.parent.target.target.target.target.target.parent.parent.args.${number}`]: string[]; [x: `process.parent.target.target.target.target.parent.target.elf.exports.${number}`]: string[]; [x: `process.parent.target.target.target.target.parent.target.elf.imports.${number}`]: string[]; [x: `process.parent.target.target.target.target.parent.target.elf.sections.${number}`]: string[]; [x: `process.parent.target.target.target.target.parent.target.elf.segments.${number}`]: string[]; [x: `process.parent.target.target.target.target.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.target.target.target.parent.target.target.args.${number}`]: string[]; [x: `process.parent.target.target.target.target.parent.target.parent.args.${number}`]: string[]; [x: `process.parent.target.target.target.target.parent.parent.elf.exports.${number}`]: string[]; [x: `process.parent.target.target.target.target.parent.parent.elf.imports.${number}`]: string[]; [x: `process.parent.target.target.target.target.parent.parent.elf.sections.${number}`]: string[]; [x: `process.parent.target.target.target.target.parent.parent.elf.segments.${number}`]: string[]; [x: `process.parent.target.target.target.target.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.target.target.target.parent.parent.target.args.${number}`]: string[]; [x: `process.parent.target.target.target.target.parent.parent.parent.args.${number}`]: string[]; [x: `process.parent.target.target.target.parent.target.target.elf.exports.${number}`]: string[]; [x: `process.parent.target.target.target.parent.target.target.elf.imports.${number}`]: string[]; [x: `process.parent.target.target.target.parent.target.target.elf.sections.${number}`]: string[]; [x: `process.parent.target.target.target.parent.target.target.elf.segments.${number}`]: string[]; [x: `process.parent.target.target.target.parent.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.target.target.parent.target.target.target.args.${number}`]: string[]; [x: `process.parent.target.target.target.parent.target.target.parent.args.${number}`]: string[]; [x: `process.parent.target.target.target.parent.target.parent.elf.exports.${number}`]: string[]; [x: `process.parent.target.target.target.parent.target.parent.elf.imports.${number}`]: string[]; [x: `process.parent.target.target.target.parent.target.parent.elf.sections.${number}`]: string[]; [x: `process.parent.target.target.target.parent.target.parent.elf.segments.${number}`]: string[]; [x: `process.parent.target.target.target.parent.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.target.target.parent.target.parent.target.args.${number}`]: string[]; [x: `process.parent.target.target.target.parent.target.parent.parent.args.${number}`]: string[]; [x: `process.parent.target.target.target.parent.parent.target.elf.exports.${number}`]: string[]; [x: `process.parent.target.target.target.parent.parent.target.elf.imports.${number}`]: string[]; [x: `process.parent.target.target.target.parent.parent.target.elf.sections.${number}`]: string[]; [x: `process.parent.target.target.target.parent.parent.target.elf.segments.${number}`]: string[]; [x: `process.parent.target.target.target.parent.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.target.target.parent.parent.target.target.args.${number}`]: string[]; [x: `process.parent.target.target.target.parent.parent.target.parent.args.${number}`]: string[]; [x: `process.parent.target.target.target.parent.parent.parent.elf.exports.${number}`]: string[]; [x: `process.parent.target.target.target.parent.parent.parent.elf.imports.${number}`]: string[]; [x: `process.parent.target.target.target.parent.parent.parent.elf.sections.${number}`]: string[]; [x: `process.parent.target.target.target.parent.parent.parent.elf.segments.${number}`]: string[]; [x: `process.parent.target.target.target.parent.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.target.target.parent.parent.parent.target.args.${number}`]: string[]; [x: `process.parent.target.target.target.parent.parent.parent.parent.args.${number}`]: string[]; [x: `process.parent.target.target.parent.target.target.target.elf.exports.${number}`]: string[]; [x: `process.parent.target.target.parent.target.target.target.elf.imports.${number}`]: string[]; [x: `process.parent.target.target.parent.target.target.target.elf.sections.${number}`]: string[]; [x: `process.parent.target.target.parent.target.target.target.elf.segments.${number}`]: string[]; [x: `process.parent.target.target.parent.target.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.target.parent.target.target.target.target.args.${number}`]: string[]; [x: `process.parent.target.target.parent.target.target.target.parent.args.${number}`]: string[]; [x: `process.parent.target.target.parent.target.target.parent.elf.exports.${number}`]: string[]; [x: `process.parent.target.target.parent.target.target.parent.elf.imports.${number}`]: string[]; [x: `process.parent.target.target.parent.target.target.parent.elf.sections.${number}`]: string[]; [x: `process.parent.target.target.parent.target.target.parent.elf.segments.${number}`]: string[]; [x: `process.parent.target.target.parent.target.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.target.parent.target.target.parent.target.args.${number}`]: string[]; [x: `process.parent.target.target.parent.target.target.parent.parent.args.${number}`]: string[]; [x: `process.parent.target.target.parent.target.parent.target.elf.exports.${number}`]: string[]; [x: `process.parent.target.target.parent.target.parent.target.elf.imports.${number}`]: string[]; [x: `process.parent.target.target.parent.target.parent.target.elf.sections.${number}`]: string[]; [x: `process.parent.target.target.parent.target.parent.target.elf.segments.${number}`]: string[]; [x: `process.parent.target.target.parent.target.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.target.parent.target.parent.target.target.args.${number}`]: string[]; [x: `process.parent.target.target.parent.target.parent.target.parent.args.${number}`]: string[]; [x: `process.parent.target.target.parent.target.parent.parent.elf.exports.${number}`]: string[]; [x: `process.parent.target.target.parent.target.parent.parent.elf.imports.${number}`]: string[]; [x: `process.parent.target.target.parent.target.parent.parent.elf.sections.${number}`]: string[]; [x: `process.parent.target.target.parent.target.parent.parent.elf.segments.${number}`]: string[]; [x: `process.parent.target.target.parent.target.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.target.parent.target.parent.parent.target.args.${number}`]: string[]; [x: `process.parent.target.target.parent.target.parent.parent.parent.args.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.target.target.elf.exports.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.target.target.elf.imports.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.target.target.elf.sections.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.target.target.elf.segments.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.target.target.target.args.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.target.target.parent.args.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.target.parent.elf.exports.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.target.parent.elf.imports.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.target.parent.elf.sections.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.target.parent.elf.segments.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.target.parent.target.args.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.target.parent.parent.args.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.parent.target.elf.exports.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.parent.target.elf.imports.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.parent.target.elf.sections.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.parent.target.elf.segments.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.parent.target.target.args.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.parent.target.parent.args.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.parent.parent.elf.exports.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.parent.parent.elf.imports.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.parent.parent.elf.sections.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.parent.parent.elf.segments.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.parent.parent.target.args.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.parent.parent.parent.args.${number}`]: string[]; [x: `process.parent.target.parent.target.target.target.target.elf.exports.${number}`]: string[]; [x: `process.parent.target.parent.target.target.target.target.elf.imports.${number}`]: string[]; [x: `process.parent.target.parent.target.target.target.target.elf.sections.${number}`]: string[]; [x: `process.parent.target.parent.target.target.target.target.elf.segments.${number}`]: string[]; [x: `process.parent.target.parent.target.target.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.parent.target.target.target.target.target.args.${number}`]: string[]; [x: `process.parent.target.parent.target.target.target.target.parent.args.${number}`]: string[]; [x: `process.parent.target.parent.target.target.target.parent.elf.exports.${number}`]: string[]; [x: `process.parent.target.parent.target.target.target.parent.elf.imports.${number}`]: string[]; [x: `process.parent.target.parent.target.target.target.parent.elf.sections.${number}`]: string[]; [x: `process.parent.target.parent.target.target.target.parent.elf.segments.${number}`]: string[]; [x: `process.parent.target.parent.target.target.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.parent.target.target.target.parent.target.args.${number}`]: string[]; [x: `process.parent.target.parent.target.target.target.parent.parent.args.${number}`]: string[]; [x: `process.parent.target.parent.target.target.parent.target.elf.exports.${number}`]: string[]; [x: `process.parent.target.parent.target.target.parent.target.elf.imports.${number}`]: string[]; [x: `process.parent.target.parent.target.target.parent.target.elf.sections.${number}`]: string[]; [x: `process.parent.target.parent.target.target.parent.target.elf.segments.${number}`]: string[]; [x: `process.parent.target.parent.target.target.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.parent.target.target.parent.target.target.args.${number}`]: string[]; [x: `process.parent.target.parent.target.target.parent.target.parent.args.${number}`]: string[]; [x: `process.parent.target.parent.target.target.parent.parent.elf.exports.${number}`]: string[]; [x: `process.parent.target.parent.target.target.parent.parent.elf.imports.${number}`]: string[]; [x: `process.parent.target.parent.target.target.parent.parent.elf.sections.${number}`]: string[]; [x: `process.parent.target.parent.target.target.parent.parent.elf.segments.${number}`]: string[]; [x: `process.parent.target.parent.target.target.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.parent.target.target.parent.parent.target.args.${number}`]: string[]; [x: `process.parent.target.parent.target.target.parent.parent.parent.args.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.target.target.elf.exports.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.target.target.elf.imports.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.target.target.elf.sections.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.target.target.elf.segments.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.target.target.target.args.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.target.target.parent.args.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.target.parent.elf.exports.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.target.parent.elf.imports.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.target.parent.elf.sections.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.target.parent.elf.segments.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.target.parent.target.args.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.target.parent.parent.args.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.parent.target.elf.exports.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.parent.target.elf.imports.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.parent.target.elf.sections.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.parent.target.elf.segments.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.parent.target.target.args.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.parent.target.parent.args.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.parent.parent.elf.exports.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.parent.parent.elf.imports.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.parent.parent.elf.sections.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.parent.parent.elf.segments.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.parent.parent.target.args.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.parent.parent.parent.args.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.target.target.elf.exports.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.target.target.elf.imports.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.target.target.elf.sections.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.target.target.elf.segments.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.target.target.target.args.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.target.target.parent.args.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.target.parent.elf.exports.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.target.parent.elf.imports.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.target.parent.elf.sections.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.target.parent.elf.segments.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.target.parent.target.args.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.target.parent.parent.args.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.parent.target.elf.exports.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.parent.target.elf.imports.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.parent.target.elf.sections.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.parent.target.elf.segments.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.parent.target.target.args.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.parent.target.parent.args.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.parent.parent.elf.exports.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.parent.parent.elf.imports.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.parent.parent.elf.sections.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.parent.parent.elf.segments.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.parent.parent.target.args.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.parent.parent.parent.args.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.target.target.elf.exports.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.target.target.elf.imports.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.target.target.elf.sections.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.target.target.elf.segments.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.target.target.target.args.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.target.target.parent.args.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.target.parent.elf.exports.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.target.parent.elf.imports.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.target.parent.elf.sections.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.target.parent.elf.segments.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.target.parent.target.args.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.target.parent.parent.args.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.parent.target.elf.exports.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.parent.target.elf.imports.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.parent.target.elf.sections.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.parent.target.elf.segments.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.parent.target.target.args.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.parent.target.parent.args.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.parent.parent.elf.exports.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.parent.parent.elf.imports.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.parent.parent.elf.sections.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.parent.parent.elf.segments.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.parent.parent.target.args.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.parent.parent.parent.args.${number}`]: string[]; [x: `process.parent.parent.target.target.target.target.target.elf.exports.${number}`]: string[]; [x: `process.parent.parent.target.target.target.target.target.elf.imports.${number}`]: string[]; [x: `process.parent.parent.target.target.target.target.target.elf.sections.${number}`]: string[]; [x: `process.parent.parent.target.target.target.target.target.elf.segments.${number}`]: string[]; [x: `process.parent.parent.target.target.target.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.target.target.target.target.target.target.args.${number}`]: string[]; [x: `process.parent.parent.target.target.target.target.target.parent.args.${number}`]: string[]; [x: `process.parent.parent.target.target.target.target.parent.elf.exports.${number}`]: string[]; [x: `process.parent.parent.target.target.target.target.parent.elf.imports.${number}`]: string[]; [x: `process.parent.parent.target.target.target.target.parent.elf.sections.${number}`]: string[]; [x: `process.parent.parent.target.target.target.target.parent.elf.segments.${number}`]: string[]; [x: `process.parent.parent.target.target.target.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.target.target.target.target.parent.target.args.${number}`]: string[]; [x: `process.parent.parent.target.target.target.target.parent.parent.args.${number}`]: string[]; [x: `process.parent.parent.target.target.target.parent.target.elf.exports.${number}`]: string[]; [x: `process.parent.parent.target.target.target.parent.target.elf.imports.${number}`]: string[]; [x: `process.parent.parent.target.target.target.parent.target.elf.sections.${number}`]: string[]; [x: `process.parent.parent.target.target.target.parent.target.elf.segments.${number}`]: string[]; [x: `process.parent.parent.target.target.target.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.target.target.target.parent.target.target.args.${number}`]: string[]; [x: `process.parent.parent.target.target.target.parent.target.parent.args.${number}`]: string[]; [x: `process.parent.parent.target.target.target.parent.parent.elf.exports.${number}`]: string[]; [x: `process.parent.parent.target.target.target.parent.parent.elf.imports.${number}`]: string[]; [x: `process.parent.parent.target.target.target.parent.parent.elf.sections.${number}`]: string[]; [x: `process.parent.parent.target.target.target.parent.parent.elf.segments.${number}`]: string[]; [x: `process.parent.parent.target.target.target.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.target.target.target.parent.parent.target.args.${number}`]: string[]; [x: `process.parent.parent.target.target.target.parent.parent.parent.args.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.target.target.elf.exports.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.target.target.elf.imports.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.target.target.elf.sections.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.target.target.elf.segments.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.target.target.target.args.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.target.target.parent.args.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.target.parent.elf.exports.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.target.parent.elf.imports.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.target.parent.elf.sections.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.target.parent.elf.segments.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.target.parent.target.args.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.target.parent.parent.args.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.parent.target.elf.exports.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.parent.target.elf.imports.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.parent.target.elf.sections.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.parent.target.elf.segments.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.parent.target.target.args.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.parent.target.parent.args.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.parent.parent.elf.exports.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.parent.parent.elf.imports.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.parent.parent.elf.sections.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.parent.parent.elf.segments.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.parent.parent.target.args.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.parent.parent.parent.args.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.target.target.elf.exports.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.target.target.elf.imports.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.target.target.elf.sections.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.target.target.elf.segments.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.target.target.target.args.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.target.target.parent.args.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.target.parent.elf.exports.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.target.parent.elf.imports.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.target.parent.elf.sections.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.target.parent.elf.segments.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.target.parent.target.args.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.target.parent.parent.args.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.parent.target.elf.exports.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.parent.target.elf.imports.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.parent.target.elf.sections.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.parent.target.elf.segments.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.parent.target.target.args.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.parent.target.parent.args.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.parent.parent.elf.exports.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.parent.parent.elf.imports.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.parent.parent.elf.sections.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.parent.parent.elf.segments.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.parent.parent.target.args.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.parent.parent.parent.args.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.target.target.elf.exports.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.target.target.elf.imports.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.target.target.elf.sections.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.target.target.elf.segments.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.target.target.target.args.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.target.target.parent.args.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.target.parent.elf.exports.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.target.parent.elf.imports.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.target.parent.elf.sections.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.target.parent.elf.segments.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.target.parent.target.args.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.target.parent.parent.args.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.parent.target.elf.exports.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.parent.target.elf.imports.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.parent.target.elf.sections.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.parent.target.elf.segments.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.parent.target.target.args.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.parent.target.parent.args.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.parent.parent.elf.exports.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.parent.parent.elf.imports.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.parent.parent.elf.sections.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.parent.parent.elf.segments.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.parent.parent.target.args.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.parent.parent.parent.args.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.target.target.elf.exports.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.target.target.elf.imports.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.target.target.elf.sections.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.target.target.elf.segments.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.target.target.target.args.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.target.target.parent.args.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.target.parent.elf.exports.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.target.parent.elf.imports.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.target.parent.elf.sections.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.target.parent.elf.segments.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.target.parent.target.args.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.target.parent.parent.args.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.parent.target.elf.exports.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.parent.target.elf.imports.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.parent.target.elf.sections.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.parent.target.elf.segments.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.parent.target.target.args.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.parent.target.parent.args.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.parent.parent.elf.exports.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.parent.parent.elf.imports.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.parent.parent.elf.sections.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.parent.parent.elf.segments.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.parent.parent.target.args.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.parent.parent.parent.args.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.target.target.elf.exports.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.target.target.elf.imports.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.target.target.elf.sections.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.target.target.elf.segments.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.target.target.target.args.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.target.target.parent.args.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.target.parent.elf.exports.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.target.parent.elf.imports.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.target.parent.elf.sections.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.target.parent.elf.segments.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.target.parent.target.args.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.target.parent.parent.args.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.parent.target.elf.exports.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.parent.target.elf.imports.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.parent.target.elf.sections.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.parent.target.elf.segments.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.parent.target.target.args.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.parent.target.parent.args.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.parent.parent.elf.exports.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.parent.parent.elf.imports.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.parent.parent.elf.sections.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.parent.parent.elf.segments.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.parent.parent.target.args.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.parent.parent.parent.args.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.target.target.elf.exports.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.target.target.elf.imports.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.target.target.elf.sections.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.target.target.elf.segments.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.target.target.target.args.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.target.target.parent.args.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.target.parent.elf.exports.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.target.parent.elf.imports.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.target.parent.elf.sections.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.target.parent.elf.segments.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.target.parent.target.args.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.target.parent.parent.args.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.parent.target.elf.exports.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.parent.target.elf.imports.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.parent.target.elf.sections.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.parent.target.elf.segments.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.parent.target.target.args.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.parent.target.parent.args.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.parent.parent.elf.exports.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.parent.parent.elf.imports.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.parent.parent.elf.sections.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.parent.parent.elf.segments.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.parent.parent.target.args.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.parent.parent.parent.args.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.target.target.elf.exports.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.target.target.elf.imports.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.target.target.elf.sections.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.target.target.elf.segments.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.target.target.target.args.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.target.target.parent.args.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.target.parent.elf.exports.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.target.parent.elf.imports.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.target.parent.elf.sections.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.target.parent.elf.segments.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.target.parent.target.args.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.target.parent.parent.args.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.parent.target.elf.exports.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.parent.target.elf.imports.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.parent.target.elf.sections.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.parent.target.elf.segments.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.parent.target.target.args.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.parent.target.parent.args.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.parent.parent.elf.exports.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.parent.parent.elf.imports.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.parent.parent.elf.sections.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.parent.parent.elf.segments.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.parent.parent.target.args.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.parent.parent.parent.args.${number}`]: string[]; [x: `related.ip.${number}`]: string[]; [x: `related.user.${number}`]: string[]; [x: `related.hash.${number}`]: string[]; [x: `related.hosts.${number}`]: string[]; [x: `threat.group.alias.${number}`]: string[]; [x: `threat.indicator.x509.issuer.organization.${number}`]: string[]; [x: `threat.indicator.x509.issuer.common_name.${number}`]: string[]; [x: `threat.indicator.x509.issuer.country.${number}`]: string[]; [x: `threat.indicator.x509.issuer.locality.${number}`]: string[]; [x: `threat.indicator.x509.issuer.organizational_unit.${number}`]: string[]; [x: `threat.indicator.x509.issuer.state_or_province.${number}`]: string[]; [x: `threat.indicator.x509.subject.organization.${number}`]: string[]; [x: `threat.indicator.x509.subject.common_name.${number}`]: string[]; [x: `threat.indicator.x509.subject.country.${number}`]: string[]; [x: `threat.indicator.x509.subject.locality.${number}`]: string[]; [x: `threat.indicator.x509.subject.organizational_unit.${number}`]: string[]; [x: `threat.indicator.x509.subject.state_or_province.${number}`]: string[]; [x: `threat.indicator.x509.alternative_names.${number}`]: string[]; [x: `threat.indicator.file.attributes.${number}`]: string[]; [x: `threat.indicator.file.elf.exports.${number}`]: string[]; [x: `threat.indicator.file.elf.imports.${number}`]: string[]; [x: `threat.indicator.file.elf.sections.${number}`]: string[]; [x: `threat.indicator.file.elf.segments.${number}`]: string[]; [x: `threat.indicator.file.elf.shared_libraries.${number}`]: string[]; [x: `threat.indicator.file.x509.issuer.organization.${number}`]: string[]; [x: `threat.indicator.file.x509.issuer.common_name.${number}`]: string[]; [x: `threat.indicator.file.x509.issuer.country.${number}`]: string[]; [x: `threat.indicator.file.x509.issuer.locality.${number}`]: string[]; [x: `threat.indicator.file.x509.issuer.organizational_unit.${number}`]: string[]; [x: `threat.indicator.file.x509.issuer.state_or_province.${number}`]: string[]; [x: `threat.indicator.file.x509.subject.organization.${number}`]: string[]; [x: `threat.indicator.file.x509.subject.common_name.${number}`]: string[]; [x: `threat.indicator.file.x509.subject.country.${number}`]: string[]; [x: `threat.indicator.file.x509.subject.locality.${number}`]: string[]; [x: `threat.indicator.file.x509.subject.organizational_unit.${number}`]: string[]; [x: `threat.indicator.file.x509.subject.state_or_province.${number}`]: string[]; [x: `threat.indicator.file.x509.alternative_names.${number}`]: string[]; [x: `threat.indicator.registry.data.strings.${number}`]: string[]; [x: `threat.enrichments.${number}`]: string[]; [x: `threat.enrichments.${number}.indicator.x509.issuer.organization.${number}`]: string[]; [x: `threat.enrichments.${number}.indicator.x509.issuer.common_name.${number}`]: string[]; [x: `threat.enrichments.${number}.indicator.x509.issuer.country.${number}`]: string[]; [x: `threat.enrichments.${number}.indicator.x509.issuer.locality.${number}`]: string[]; [x: `threat.enrichments.${number}.indicator.x509.issuer.organizational_unit.${number}`]: string[]; [x: `threat.enrichments.${number}.indicator.x509.issuer.state_or_province.${number}`]: string[]; [x: `threat.enrichments.${number}.indicator.x509.subject.organization.${number}`]: string[]; [x: `threat.enrichments.${number}.indicator.x509.subject.common_name.${number}`]: string[]; [x: `threat.enrichments.${number}.indicator.x509.subject.country.${number}`]: string[]; [x: `threat.enrichments.${number}.indicator.x509.subject.locality.${number}`]: string[]; [x: `threat.enrichments.${number}.indicator.x509.subject.organizational_unit.${number}`]: string[]; [x: `threat.enrichments.${number}.indicator.x509.subject.state_or_province.${number}`]: string[]; [x: `threat.enrichments.${number}.indicator.x509.alternative_names.${number}`]: string[]; [x: `threat.enrichments.${number}.indicator.file.attributes.${number}`]: string[]; [x: `threat.enrichments.${number}.indicator.file.elf.exports.${number}`]: string[]; [x: `threat.enrichments.${number}.indicator.file.elf.imports.${number}`]: string[]; [x: `threat.enrichments.${number}.indicator.file.elf.sections.${number}`]: string[]; [x: `threat.enrichments.${number}.indicator.file.elf.segments.${number}`]: string[]; [x: `threat.enrichments.${number}.indicator.file.elf.shared_libraries.${number}`]: string[]; [x: `threat.enrichments.${number}.indicator.file.x509.issuer.organization.${number}`]: string[]; [x: `threat.enrichments.${number}.indicator.file.x509.issuer.common_name.${number}`]: string[]; [x: `threat.enrichments.${number}.indicator.file.x509.issuer.country.${number}`]: string[]; [x: `threat.enrichments.${number}.indicator.file.x509.issuer.locality.${number}`]: string[]; [x: `threat.enrichments.${number}.indicator.file.x509.issuer.organizational_unit.${number}`]: string[]; [x: `threat.enrichments.${number}.indicator.file.x509.issuer.state_or_province.${number}`]: string[]; [x: `threat.enrichments.${number}.indicator.file.x509.subject.organization.${number}`]: string[]; [x: `threat.enrichments.${number}.indicator.file.x509.subject.common_name.${number}`]: string[]; [x: `threat.enrichments.${number}.indicator.file.x509.subject.country.${number}`]: string[]; [x: `threat.enrichments.${number}.indicator.file.x509.subject.locality.${number}`]: string[]; [x: `threat.enrichments.${number}.indicator.file.x509.subject.organizational_unit.${number}`]: string[]; [x: `threat.enrichments.${number}.indicator.file.x509.subject.state_or_province.${number}`]: string[]; [x: `threat.enrichments.${number}.indicator.file.x509.alternative_names.${number}`]: string[]; [x: `threat.enrichments.${number}.indicator.registry.data.strings.${number}`]: string[]; [x: `threat.software.platforms.${number}`]: string[]; [x: `threat.tactic.id.${number}`]: string[]; [x: `threat.tactic.name.${number}`]: string[]; [x: `threat.tactic.reference.${number}`]: string[]; [x: `threat.technique.id.${number}`]: string[]; [x: `threat.technique.name.${number}`]: string[]; [x: `threat.technique.reference.${number}`]: string[]; [x: `threat.technique.subtechnique.id.${number}`]: string[]; [x: `threat.technique.subtechnique.name.${number}`]: string[]; [x: `threat.technique.subtechnique.reference.${number}`]: string[]; [x: `threat.technique.subtechnique.subtechnique.id.${number}`]: string[]; [x: `threat.technique.subtechnique.subtechnique.name.${number}`]: string[]; [x: `threat.technique.subtechnique.subtechnique.reference.${number}`]: string[]; [x: `threat.technique.subtechnique.subtechnique.subtechnique.id.${number}`]: string[]; [x: `threat.technique.subtechnique.subtechnique.subtechnique.name.${number}`]: string[]; [x: `threat.technique.subtechnique.subtechnique.subtechnique.reference.${number}`]: string[]; [x: `threat.technique.subtechnique.subtechnique.subtechnique.subtechnique.id.${number}`]: string[]; [x: `threat.technique.subtechnique.subtechnique.subtechnique.subtechnique.name.${number}`]: string[]; [x: `threat.technique.subtechnique.subtechnique.subtechnique.subtechnique.reference.${number}`]: string[]; [x: `threat.technique.subtechnique.subtechnique.subtechnique.subtechnique.subtechnique.id.${number}`]: string[]; [x: `threat.technique.subtechnique.subtechnique.subtechnique.subtechnique.subtechnique.name.${number}`]: string[]; [x: `threat.technique.subtechnique.subtechnique.subtechnique.subtechnique.subtechnique.reference.${number}`]: string[]; [x: `threat.technique.subtechnique.subtechnique.subtechnique.subtechnique.subtechnique.subtechnique.id.${number}`]: string[]; [x: `threat.technique.subtechnique.subtechnique.subtechnique.subtechnique.subtechnique.subtechnique.name.${number}`]: string[]; [x: `threat.technique.subtechnique.subtechnique.subtechnique.subtechnique.subtechnique.subtechnique.reference.${number}`]: string[]; [x: `threat.technique.subtechnique.subtechnique.subtechnique.subtechnique.subtechnique.subtechnique.subtechnique.id.${number}`]: string[]; [x: `threat.technique.subtechnique.subtechnique.subtechnique.subtechnique.subtechnique.subtechnique.subtechnique.name.${number}`]: string[]; [x: `threat.technique.subtechnique.subtechnique.subtechnique.subtechnique.subtechnique.subtechnique.subtechnique.reference.${number}`]: string[]; [x: `tls.client.x509.issuer.organization.${number}`]: string[]; [x: `tls.client.x509.issuer.common_name.${number}`]: string[]; [x: `tls.client.x509.issuer.country.${number}`]: string[]; [x: `tls.client.x509.issuer.locality.${number}`]: string[]; [x: `tls.client.x509.issuer.organizational_unit.${number}`]: string[]; [x: `tls.client.x509.issuer.state_or_province.${number}`]: string[]; [x: `tls.client.x509.subject.organization.${number}`]: string[]; [x: `tls.client.x509.subject.common_name.${number}`]: string[]; [x: `tls.client.x509.subject.country.${number}`]: string[]; [x: `tls.client.x509.subject.locality.${number}`]: string[]; [x: `tls.client.x509.subject.organizational_unit.${number}`]: string[]; [x: `tls.client.x509.subject.state_or_province.${number}`]: string[]; [x: `tls.client.x509.alternative_names.${number}`]: string[]; [x: `tls.client.certificate_chain.${number}`]: string[]; [x: `tls.client.supported_ciphers.${number}`]: string[]; [x: `tls.server.x509.issuer.organization.${number}`]: string[]; [x: `tls.server.x509.issuer.common_name.${number}`]: string[]; [x: `tls.server.x509.issuer.country.${number}`]: string[]; [x: `tls.server.x509.issuer.locality.${number}`]: string[]; [x: `tls.server.x509.issuer.organizational_unit.${number}`]: string[]; [x: `tls.server.x509.issuer.state_or_province.${number}`]: string[]; [x: `tls.server.x509.subject.organization.${number}`]: string[]; [x: `tls.server.x509.subject.common_name.${number}`]: string[]; [x: `tls.server.x509.subject.country.${number}`]: string[]; [x: `tls.server.x509.subject.locality.${number}`]: string[]; [x: `tls.server.x509.subject.organizational_unit.${number}`]: string[]; [x: `tls.server.x509.subject.state_or_province.${number}`]: string[]; [x: `tls.server.x509.alternative_names.${number}`]: string[]; [x: `tls.server.certificate_chain.${number}`]: string[]; [x: `vulnerability.category.${number}`]: string[]; } & ", - "BasicFields" + "{ [x: `container.image.tag.${number}`]: string[]; [x: `email.to.${number}`]: string[]; [x: `email.cc.${number}`]: string[]; [x: `email.bcc.${number}`]: string[]; [x: `email.attachments.${number}`]: string[]; [x: `user.roles.${number}`]: string[]; [x: `user.target.roles.${number}`]: string[]; [x: `user.changes.roles.${number}`]: string[]; [x: `user.effective.roles.${number}`]: string[]; [x: `source.user.roles.${number}`]: string[]; [x: `tags.${number}`]: string[]; [x: `client.user.roles.${number}`]: string[]; [x: `file.attributes.${number}`]: string[]; [x: `file.elf.exports.${number}`]: string[]; [x: `file.elf.imports.${number}`]: string[]; [x: `file.elf.sections.${number}`]: string[]; [x: `file.elf.segments.${number}`]: string[]; [x: `file.elf.shared_libraries.${number}`]: string[]; [x: `file.x509.issuer.organization.${number}`]: string[]; [x: `file.x509.issuer.common_name.${number}`]: string[]; [x: `file.x509.issuer.country.${number}`]: string[]; [x: `file.x509.issuer.locality.${number}`]: string[]; [x: `file.x509.issuer.organizational_unit.${number}`]: string[]; [x: `file.x509.issuer.state_or_province.${number}`]: string[]; [x: `file.x509.subject.organization.${number}`]: string[]; [x: `file.x509.subject.common_name.${number}`]: string[]; [x: `file.x509.subject.country.${number}`]: string[]; [x: `file.x509.subject.locality.${number}`]: string[]; [x: `file.x509.subject.organizational_unit.${number}`]: string[]; [x: `file.x509.subject.state_or_province.${number}`]: string[]; [x: `file.x509.alternative_names.${number}`]: string[]; [x: `host.ip.${number}`]: string[]; [x: `host.mac.${number}`]: string[]; [x: `server.user.roles.${number}`]: string[]; [x: `rule.author.${number}`]: string[]; [x: `event.type.${number}`]: string[]; [x: `event.category.${number}`]: string[]; [x: `registry.data.strings.${number}`]: string[]; [x: `destination.user.roles.${number}`]: string[]; [x: `dns.answers.${number}`]: string[]; [x: `dns.header_flags.${number}`]: string[]; [x: `dns.resolved_ip.${number}`]: string[]; [x: `observer.ip.${number}`]: string[]; [x: `observer.mac.${number}`]: string[]; [x: `process.elf.exports.${number}`]: string[]; [x: `process.elf.imports.${number}`]: string[]; [x: `process.elf.sections.${number}`]: string[]; [x: `process.elf.segments.${number}`]: string[]; [x: `process.elf.shared_libraries.${number}`]: string[]; [x: `process.args.${number}`]: string[]; [x: `process.target.args.${number}`]: string[]; [x: `process.parent.args.${number}`]: string[]; [x: `process.target.elf.exports.${number}`]: string[]; [x: `process.target.elf.imports.${number}`]: string[]; [x: `process.target.elf.sections.${number}`]: string[]; [x: `process.target.elf.segments.${number}`]: string[]; [x: `process.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.args.${number}`]: string[]; [x: `process.target.parent.args.${number}`]: string[]; [x: `process.parent.elf.exports.${number}`]: string[]; [x: `process.parent.elf.imports.${number}`]: string[]; [x: `process.parent.elf.sections.${number}`]: string[]; [x: `process.parent.elf.segments.${number}`]: string[]; [x: `process.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.args.${number}`]: string[]; [x: `process.parent.parent.args.${number}`]: string[]; [x: `process.target.target.elf.exports.${number}`]: string[]; [x: `process.target.target.elf.imports.${number}`]: string[]; [x: `process.target.target.elf.sections.${number}`]: string[]; [x: `process.target.target.elf.segments.${number}`]: string[]; [x: `process.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.target.args.${number}`]: string[]; [x: `process.target.target.parent.args.${number}`]: string[]; [x: `process.target.parent.elf.exports.${number}`]: string[]; [x: `process.target.parent.elf.imports.${number}`]: string[]; [x: `process.target.parent.elf.sections.${number}`]: string[]; [x: `process.target.parent.elf.segments.${number}`]: string[]; [x: `process.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.target.args.${number}`]: string[]; [x: `process.target.parent.parent.args.${number}`]: string[]; [x: `process.parent.target.elf.exports.${number}`]: string[]; [x: `process.parent.target.elf.imports.${number}`]: string[]; [x: `process.parent.target.elf.sections.${number}`]: string[]; [x: `process.parent.target.elf.segments.${number}`]: string[]; [x: `process.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.target.args.${number}`]: string[]; [x: `process.parent.target.parent.args.${number}`]: string[]; [x: `process.parent.parent.elf.exports.${number}`]: string[]; [x: `process.parent.parent.elf.imports.${number}`]: string[]; [x: `process.parent.parent.elf.sections.${number}`]: string[]; [x: `process.parent.parent.elf.segments.${number}`]: string[]; [x: `process.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.target.args.${number}`]: string[]; [x: `process.parent.parent.parent.args.${number}`]: string[]; [x: `process.target.target.target.elf.exports.${number}`]: string[]; [x: `process.target.target.target.elf.imports.${number}`]: string[]; [x: `process.target.target.target.elf.sections.${number}`]: string[]; [x: `process.target.target.target.elf.segments.${number}`]: string[]; [x: `process.target.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.target.target.args.${number}`]: string[]; [x: `process.target.target.target.parent.args.${number}`]: string[]; [x: `process.target.target.parent.elf.exports.${number}`]: string[]; [x: `process.target.target.parent.elf.imports.${number}`]: string[]; [x: `process.target.target.parent.elf.sections.${number}`]: string[]; [x: `process.target.target.parent.elf.segments.${number}`]: string[]; [x: `process.target.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.parent.target.args.${number}`]: string[]; [x: `process.target.target.parent.parent.args.${number}`]: string[]; [x: `process.target.parent.target.elf.exports.${number}`]: string[]; [x: `process.target.parent.target.elf.imports.${number}`]: string[]; [x: `process.target.parent.target.elf.sections.${number}`]: string[]; [x: `process.target.parent.target.elf.segments.${number}`]: string[]; [x: `process.target.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.target.target.args.${number}`]: string[]; [x: `process.target.parent.target.parent.args.${number}`]: string[]; [x: `process.target.parent.parent.elf.exports.${number}`]: string[]; [x: `process.target.parent.parent.elf.imports.${number}`]: string[]; [x: `process.target.parent.parent.elf.sections.${number}`]: string[]; [x: `process.target.parent.parent.elf.segments.${number}`]: string[]; [x: `process.target.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.parent.target.args.${number}`]: string[]; [x: `process.target.parent.parent.parent.args.${number}`]: string[]; [x: `process.parent.target.target.elf.exports.${number}`]: string[]; [x: `process.parent.target.target.elf.imports.${number}`]: string[]; [x: `process.parent.target.target.elf.sections.${number}`]: string[]; [x: `process.parent.target.target.elf.segments.${number}`]: string[]; [x: `process.parent.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.target.target.args.${number}`]: string[]; [x: `process.parent.target.target.parent.args.${number}`]: string[]; [x: `process.parent.target.parent.elf.exports.${number}`]: string[]; [x: `process.parent.target.parent.elf.imports.${number}`]: string[]; [x: `process.parent.target.parent.elf.sections.${number}`]: string[]; [x: `process.parent.target.parent.elf.segments.${number}`]: string[]; [x: `process.parent.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.parent.target.args.${number}`]: string[]; [x: `process.parent.target.parent.parent.args.${number}`]: string[]; [x: `process.parent.parent.target.elf.exports.${number}`]: string[]; [x: `process.parent.parent.target.elf.imports.${number}`]: string[]; [x: `process.parent.parent.target.elf.sections.${number}`]: string[]; [x: `process.parent.parent.target.elf.segments.${number}`]: string[]; [x: `process.parent.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.target.target.args.${number}`]: string[]; [x: `process.parent.parent.target.parent.args.${number}`]: string[]; [x: `process.parent.parent.parent.elf.exports.${number}`]: string[]; [x: `process.parent.parent.parent.elf.imports.${number}`]: string[]; [x: `process.parent.parent.parent.elf.sections.${number}`]: string[]; [x: `process.parent.parent.parent.elf.segments.${number}`]: string[]; [x: `process.parent.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.parent.target.args.${number}`]: string[]; [x: `process.parent.parent.parent.parent.args.${number}`]: string[]; [x: `process.target.target.target.target.elf.exports.${number}`]: string[]; [x: `process.target.target.target.target.elf.imports.${number}`]: string[]; [x: `process.target.target.target.target.elf.sections.${number}`]: string[]; [x: `process.target.target.target.target.elf.segments.${number}`]: string[]; [x: `process.target.target.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.target.target.target.args.${number}`]: string[]; [x: `process.target.target.target.target.parent.args.${number}`]: string[]; [x: `process.target.target.target.parent.elf.exports.${number}`]: string[]; [x: `process.target.target.target.parent.elf.imports.${number}`]: string[]; [x: `process.target.target.target.parent.elf.sections.${number}`]: string[]; [x: `process.target.target.target.parent.elf.segments.${number}`]: string[]; [x: `process.target.target.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.target.parent.target.args.${number}`]: string[]; [x: `process.target.target.target.parent.parent.args.${number}`]: string[]; [x: `process.target.target.parent.target.elf.exports.${number}`]: string[]; [x: `process.target.target.parent.target.elf.imports.${number}`]: string[]; [x: `process.target.target.parent.target.elf.sections.${number}`]: string[]; [x: `process.target.target.parent.target.elf.segments.${number}`]: string[]; [x: `process.target.target.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.parent.target.target.args.${number}`]: string[]; [x: `process.target.target.parent.target.parent.args.${number}`]: string[]; [x: `process.target.target.parent.parent.elf.exports.${number}`]: string[]; [x: `process.target.target.parent.parent.elf.imports.${number}`]: string[]; [x: `process.target.target.parent.parent.elf.sections.${number}`]: string[]; [x: `process.target.target.parent.parent.elf.segments.${number}`]: string[]; [x: `process.target.target.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.parent.parent.target.args.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.args.${number}`]: string[]; [x: `process.target.parent.target.target.elf.exports.${number}`]: string[]; [x: `process.target.parent.target.target.elf.imports.${number}`]: string[]; [x: `process.target.parent.target.target.elf.sections.${number}`]: string[]; [x: `process.target.parent.target.target.elf.segments.${number}`]: string[]; [x: `process.target.parent.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.target.target.target.args.${number}`]: string[]; [x: `process.target.parent.target.target.parent.args.${number}`]: string[]; [x: `process.target.parent.target.parent.elf.exports.${number}`]: string[]; [x: `process.target.parent.target.parent.elf.imports.${number}`]: string[]; [x: `process.target.parent.target.parent.elf.sections.${number}`]: string[]; [x: `process.target.parent.target.parent.elf.segments.${number}`]: string[]; [x: `process.target.parent.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.target.parent.target.args.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.args.${number}`]: string[]; [x: `process.target.parent.parent.target.elf.exports.${number}`]: string[]; [x: `process.target.parent.parent.target.elf.imports.${number}`]: string[]; [x: `process.target.parent.parent.target.elf.sections.${number}`]: string[]; [x: `process.target.parent.parent.target.elf.segments.${number}`]: string[]; [x: `process.target.parent.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.parent.target.target.args.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.args.${number}`]: string[]; [x: `process.target.parent.parent.parent.elf.exports.${number}`]: string[]; [x: `process.target.parent.parent.parent.elf.imports.${number}`]: string[]; [x: `process.target.parent.parent.parent.elf.sections.${number}`]: string[]; [x: `process.target.parent.parent.parent.elf.segments.${number}`]: string[]; [x: `process.target.parent.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.args.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.args.${number}`]: string[]; [x: `process.parent.target.target.target.elf.exports.${number}`]: string[]; [x: `process.parent.target.target.target.elf.imports.${number}`]: string[]; [x: `process.parent.target.target.target.elf.sections.${number}`]: string[]; [x: `process.parent.target.target.target.elf.segments.${number}`]: string[]; [x: `process.parent.target.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.target.target.target.args.${number}`]: string[]; [x: `process.parent.target.target.target.parent.args.${number}`]: string[]; [x: `process.parent.target.target.parent.elf.exports.${number}`]: string[]; [x: `process.parent.target.target.parent.elf.imports.${number}`]: string[]; [x: `process.parent.target.target.parent.elf.sections.${number}`]: string[]; [x: `process.parent.target.target.parent.elf.segments.${number}`]: string[]; [x: `process.parent.target.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.target.parent.target.args.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.args.${number}`]: string[]; [x: `process.parent.target.parent.target.elf.exports.${number}`]: string[]; [x: `process.parent.target.parent.target.elf.imports.${number}`]: string[]; [x: `process.parent.target.parent.target.elf.sections.${number}`]: string[]; [x: `process.parent.target.parent.target.elf.segments.${number}`]: string[]; [x: `process.parent.target.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.parent.target.target.args.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.args.${number}`]: string[]; [x: `process.parent.target.parent.parent.elf.exports.${number}`]: string[]; [x: `process.parent.target.parent.parent.elf.imports.${number}`]: string[]; [x: `process.parent.target.parent.parent.elf.sections.${number}`]: string[]; [x: `process.parent.target.parent.parent.elf.segments.${number}`]: string[]; [x: `process.parent.target.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.args.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.args.${number}`]: string[]; [x: `process.parent.parent.target.target.elf.exports.${number}`]: string[]; [x: `process.parent.parent.target.target.elf.imports.${number}`]: string[]; [x: `process.parent.parent.target.target.elf.sections.${number}`]: string[]; [x: `process.parent.parent.target.target.elf.segments.${number}`]: string[]; [x: `process.parent.parent.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.target.target.target.args.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.args.${number}`]: string[]; [x: `process.parent.parent.target.parent.elf.exports.${number}`]: string[]; [x: `process.parent.parent.target.parent.elf.imports.${number}`]: string[]; [x: `process.parent.parent.target.parent.elf.sections.${number}`]: string[]; [x: `process.parent.parent.target.parent.elf.segments.${number}`]: string[]; [x: `process.parent.parent.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.args.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.args.${number}`]: string[]; [x: `process.parent.parent.parent.target.elf.exports.${number}`]: string[]; [x: `process.parent.parent.parent.target.elf.imports.${number}`]: string[]; [x: `process.parent.parent.parent.target.elf.sections.${number}`]: string[]; [x: `process.parent.parent.parent.target.elf.segments.${number}`]: string[]; [x: `process.parent.parent.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.args.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.args.${number}`]: string[]; [x: `process.parent.parent.parent.parent.elf.exports.${number}`]: string[]; [x: `process.parent.parent.parent.parent.elf.imports.${number}`]: string[]; [x: `process.parent.parent.parent.parent.elf.sections.${number}`]: string[]; [x: `process.parent.parent.parent.parent.elf.segments.${number}`]: string[]; [x: `process.parent.parent.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.args.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.args.${number}`]: string[]; [x: `process.target.target.target.target.target.elf.exports.${number}`]: string[]; [x: `process.target.target.target.target.target.elf.imports.${number}`]: string[]; [x: `process.target.target.target.target.target.elf.sections.${number}`]: string[]; [x: `process.target.target.target.target.target.elf.segments.${number}`]: string[]; [x: `process.target.target.target.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.target.target.target.target.args.${number}`]: string[]; [x: `process.target.target.target.target.target.parent.args.${number}`]: string[]; [x: `process.target.target.target.target.parent.elf.exports.${number}`]: string[]; [x: `process.target.target.target.target.parent.elf.imports.${number}`]: string[]; [x: `process.target.target.target.target.parent.elf.sections.${number}`]: string[]; [x: `process.target.target.target.target.parent.elf.segments.${number}`]: string[]; [x: `process.target.target.target.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.target.target.parent.target.args.${number}`]: string[]; [x: `process.target.target.target.target.parent.parent.args.${number}`]: string[]; [x: `process.target.target.target.parent.target.elf.exports.${number}`]: string[]; [x: `process.target.target.target.parent.target.elf.imports.${number}`]: string[]; [x: `process.target.target.target.parent.target.elf.sections.${number}`]: string[]; [x: `process.target.target.target.parent.target.elf.segments.${number}`]: string[]; [x: `process.target.target.target.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.target.parent.target.target.args.${number}`]: string[]; [x: `process.target.target.target.parent.target.parent.args.${number}`]: string[]; [x: `process.target.target.target.parent.parent.elf.exports.${number}`]: string[]; [x: `process.target.target.target.parent.parent.elf.imports.${number}`]: string[]; [x: `process.target.target.target.parent.parent.elf.sections.${number}`]: string[]; [x: `process.target.target.target.parent.parent.elf.segments.${number}`]: string[]; [x: `process.target.target.target.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.target.parent.parent.target.args.${number}`]: string[]; [x: `process.target.target.target.parent.parent.parent.args.${number}`]: string[]; [x: `process.target.target.parent.target.target.elf.exports.${number}`]: string[]; [x: `process.target.target.parent.target.target.elf.imports.${number}`]: string[]; [x: `process.target.target.parent.target.target.elf.sections.${number}`]: string[]; [x: `process.target.target.parent.target.target.elf.segments.${number}`]: string[]; [x: `process.target.target.parent.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.parent.target.target.target.args.${number}`]: string[]; [x: `process.target.target.parent.target.target.parent.args.${number}`]: string[]; [x: `process.target.target.parent.target.parent.elf.exports.${number}`]: string[]; [x: `process.target.target.parent.target.parent.elf.imports.${number}`]: string[]; [x: `process.target.target.parent.target.parent.elf.sections.${number}`]: string[]; [x: `process.target.target.parent.target.parent.elf.segments.${number}`]: string[]; [x: `process.target.target.parent.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.parent.target.parent.target.args.${number}`]: string[]; [x: `process.target.target.parent.target.parent.parent.args.${number}`]: string[]; [x: `process.target.target.parent.parent.target.elf.exports.${number}`]: string[]; [x: `process.target.target.parent.parent.target.elf.imports.${number}`]: string[]; [x: `process.target.target.parent.parent.target.elf.sections.${number}`]: string[]; [x: `process.target.target.parent.parent.target.elf.segments.${number}`]: string[]; [x: `process.target.target.parent.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.parent.parent.target.target.args.${number}`]: string[]; [x: `process.target.target.parent.parent.target.parent.args.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.elf.exports.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.elf.imports.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.elf.sections.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.elf.segments.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.target.args.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.parent.args.${number}`]: string[]; [x: `process.target.parent.target.target.target.elf.exports.${number}`]: string[]; [x: `process.target.parent.target.target.target.elf.imports.${number}`]: string[]; [x: `process.target.parent.target.target.target.elf.sections.${number}`]: string[]; [x: `process.target.parent.target.target.target.elf.segments.${number}`]: string[]; [x: `process.target.parent.target.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.target.target.target.target.args.${number}`]: string[]; [x: `process.target.parent.target.target.target.parent.args.${number}`]: string[]; [x: `process.target.parent.target.target.parent.elf.exports.${number}`]: string[]; [x: `process.target.parent.target.target.parent.elf.imports.${number}`]: string[]; [x: `process.target.parent.target.target.parent.elf.sections.${number}`]: string[]; [x: `process.target.parent.target.target.parent.elf.segments.${number}`]: string[]; [x: `process.target.parent.target.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.target.target.parent.target.args.${number}`]: string[]; [x: `process.target.parent.target.target.parent.parent.args.${number}`]: string[]; [x: `process.target.parent.target.parent.target.elf.exports.${number}`]: string[]; [x: `process.target.parent.target.parent.target.elf.imports.${number}`]: string[]; [x: `process.target.parent.target.parent.target.elf.sections.${number}`]: string[]; [x: `process.target.parent.target.parent.target.elf.segments.${number}`]: string[]; [x: `process.target.parent.target.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.target.parent.target.target.args.${number}`]: string[]; [x: `process.target.parent.target.parent.target.parent.args.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.elf.exports.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.elf.imports.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.elf.sections.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.elf.segments.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.target.args.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.parent.args.${number}`]: string[]; [x: `process.target.parent.parent.target.target.elf.exports.${number}`]: string[]; [x: `process.target.parent.parent.target.target.elf.imports.${number}`]: string[]; [x: `process.target.parent.parent.target.target.elf.sections.${number}`]: string[]; [x: `process.target.parent.parent.target.target.elf.segments.${number}`]: string[]; [x: `process.target.parent.parent.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.parent.target.target.target.args.${number}`]: string[]; [x: `process.target.parent.parent.target.target.parent.args.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.elf.exports.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.elf.imports.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.elf.sections.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.elf.segments.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.target.args.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.parent.args.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.elf.exports.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.elf.imports.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.elf.sections.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.elf.segments.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.target.args.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.parent.args.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.elf.exports.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.elf.imports.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.elf.sections.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.elf.segments.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.target.args.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.parent.args.${number}`]: string[]; [x: `process.parent.target.target.target.target.elf.exports.${number}`]: string[]; [x: `process.parent.target.target.target.target.elf.imports.${number}`]: string[]; [x: `process.parent.target.target.target.target.elf.sections.${number}`]: string[]; [x: `process.parent.target.target.target.target.elf.segments.${number}`]: string[]; [x: `process.parent.target.target.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.target.target.target.target.args.${number}`]: string[]; [x: `process.parent.target.target.target.target.parent.args.${number}`]: string[]; [x: `process.parent.target.target.target.parent.elf.exports.${number}`]: string[]; [x: `process.parent.target.target.target.parent.elf.imports.${number}`]: string[]; [x: `process.parent.target.target.target.parent.elf.sections.${number}`]: string[]; [x: `process.parent.target.target.target.parent.elf.segments.${number}`]: string[]; [x: `process.parent.target.target.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.target.target.parent.target.args.${number}`]: string[]; [x: `process.parent.target.target.target.parent.parent.args.${number}`]: string[]; [x: `process.parent.target.target.parent.target.elf.exports.${number}`]: string[]; [x: `process.parent.target.target.parent.target.elf.imports.${number}`]: string[]; [x: `process.parent.target.target.parent.target.elf.sections.${number}`]: string[]; [x: `process.parent.target.target.parent.target.elf.segments.${number}`]: string[]; [x: `process.parent.target.target.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.target.parent.target.target.args.${number}`]: string[]; [x: `process.parent.target.target.parent.target.parent.args.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.elf.exports.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.elf.imports.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.elf.sections.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.elf.segments.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.target.args.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.parent.args.${number}`]: string[]; [x: `process.parent.target.parent.target.target.elf.exports.${number}`]: string[]; [x: `process.parent.target.parent.target.target.elf.imports.${number}`]: string[]; [x: `process.parent.target.parent.target.target.elf.sections.${number}`]: string[]; [x: `process.parent.target.parent.target.target.elf.segments.${number}`]: string[]; [x: `process.parent.target.parent.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.parent.target.target.target.args.${number}`]: string[]; [x: `process.parent.target.parent.target.target.parent.args.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.elf.exports.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.elf.imports.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.elf.sections.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.elf.segments.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.target.args.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.parent.args.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.elf.exports.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.elf.imports.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.elf.sections.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.elf.segments.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.target.args.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.parent.args.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.elf.exports.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.elf.imports.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.elf.sections.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.elf.segments.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.target.args.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.parent.args.${number}`]: string[]; [x: `process.parent.parent.target.target.target.elf.exports.${number}`]: string[]; [x: `process.parent.parent.target.target.target.elf.imports.${number}`]: string[]; [x: `process.parent.parent.target.target.target.elf.sections.${number}`]: string[]; [x: `process.parent.parent.target.target.target.elf.segments.${number}`]: string[]; [x: `process.parent.parent.target.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.target.target.target.target.args.${number}`]: string[]; [x: `process.parent.parent.target.target.target.parent.args.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.elf.exports.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.elf.imports.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.elf.sections.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.elf.segments.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.target.args.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.parent.args.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.elf.exports.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.elf.imports.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.elf.sections.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.elf.segments.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.target.args.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.parent.args.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.elf.exports.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.elf.imports.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.elf.sections.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.elf.segments.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.target.args.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.parent.args.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.elf.exports.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.elf.imports.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.elf.sections.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.elf.segments.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.target.args.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.parent.args.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.elf.exports.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.elf.imports.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.elf.sections.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.elf.segments.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.target.args.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.parent.args.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.elf.exports.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.elf.imports.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.elf.sections.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.elf.segments.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.target.args.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.parent.args.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.elf.exports.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.elf.imports.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.elf.sections.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.elf.segments.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.target.args.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.parent.args.${number}`]: string[]; [x: `process.target.target.target.target.target.target.elf.exports.${number}`]: string[]; [x: `process.target.target.target.target.target.target.elf.imports.${number}`]: string[]; [x: `process.target.target.target.target.target.target.elf.sections.${number}`]: string[]; [x: `process.target.target.target.target.target.target.elf.segments.${number}`]: string[]; [x: `process.target.target.target.target.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.target.target.target.target.target.args.${number}`]: string[]; [x: `process.target.target.target.target.target.target.parent.args.${number}`]: string[]; [x: `process.target.target.target.target.target.parent.elf.exports.${number}`]: string[]; [x: `process.target.target.target.target.target.parent.elf.imports.${number}`]: string[]; [x: `process.target.target.target.target.target.parent.elf.sections.${number}`]: string[]; [x: `process.target.target.target.target.target.parent.elf.segments.${number}`]: string[]; [x: `process.target.target.target.target.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.target.target.target.parent.target.args.${number}`]: string[]; [x: `process.target.target.target.target.target.parent.parent.args.${number}`]: string[]; [x: `process.target.target.target.target.parent.target.elf.exports.${number}`]: string[]; [x: `process.target.target.target.target.parent.target.elf.imports.${number}`]: string[]; [x: `process.target.target.target.target.parent.target.elf.sections.${number}`]: string[]; [x: `process.target.target.target.target.parent.target.elf.segments.${number}`]: string[]; [x: `process.target.target.target.target.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.target.target.parent.target.target.args.${number}`]: string[]; [x: `process.target.target.target.target.parent.target.parent.args.${number}`]: string[]; [x: `process.target.target.target.target.parent.parent.elf.exports.${number}`]: string[]; [x: `process.target.target.target.target.parent.parent.elf.imports.${number}`]: string[]; [x: `process.target.target.target.target.parent.parent.elf.sections.${number}`]: string[]; [x: `process.target.target.target.target.parent.parent.elf.segments.${number}`]: string[]; [x: `process.target.target.target.target.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.target.target.parent.parent.target.args.${number}`]: string[]; [x: `process.target.target.target.target.parent.parent.parent.args.${number}`]: string[]; [x: `process.target.target.target.parent.target.target.elf.exports.${number}`]: string[]; [x: `process.target.target.target.parent.target.target.elf.imports.${number}`]: string[]; [x: `process.target.target.target.parent.target.target.elf.sections.${number}`]: string[]; [x: `process.target.target.target.parent.target.target.elf.segments.${number}`]: string[]; [x: `process.target.target.target.parent.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.target.parent.target.target.target.args.${number}`]: string[]; [x: `process.target.target.target.parent.target.target.parent.args.${number}`]: string[]; [x: `process.target.target.target.parent.target.parent.elf.exports.${number}`]: string[]; [x: `process.target.target.target.parent.target.parent.elf.imports.${number}`]: string[]; [x: `process.target.target.target.parent.target.parent.elf.sections.${number}`]: string[]; [x: `process.target.target.target.parent.target.parent.elf.segments.${number}`]: string[]; [x: `process.target.target.target.parent.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.target.parent.target.parent.target.args.${number}`]: string[]; [x: `process.target.target.target.parent.target.parent.parent.args.${number}`]: string[]; [x: `process.target.target.target.parent.parent.target.elf.exports.${number}`]: string[]; [x: `process.target.target.target.parent.parent.target.elf.imports.${number}`]: string[]; [x: `process.target.target.target.parent.parent.target.elf.sections.${number}`]: string[]; [x: `process.target.target.target.parent.parent.target.elf.segments.${number}`]: string[]; [x: `process.target.target.target.parent.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.target.parent.parent.target.target.args.${number}`]: string[]; [x: `process.target.target.target.parent.parent.target.parent.args.${number}`]: string[]; [x: `process.target.target.target.parent.parent.parent.elf.exports.${number}`]: string[]; [x: `process.target.target.target.parent.parent.parent.elf.imports.${number}`]: string[]; [x: `process.target.target.target.parent.parent.parent.elf.sections.${number}`]: string[]; [x: `process.target.target.target.parent.parent.parent.elf.segments.${number}`]: string[]; [x: `process.target.target.target.parent.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.target.parent.parent.parent.target.args.${number}`]: string[]; [x: `process.target.target.target.parent.parent.parent.parent.args.${number}`]: string[]; [x: `process.target.target.parent.target.target.target.elf.exports.${number}`]: string[]; [x: `process.target.target.parent.target.target.target.elf.imports.${number}`]: string[]; [x: `process.target.target.parent.target.target.target.elf.sections.${number}`]: string[]; [x: `process.target.target.parent.target.target.target.elf.segments.${number}`]: string[]; [x: `process.target.target.parent.target.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.parent.target.target.target.target.args.${number}`]: string[]; [x: `process.target.target.parent.target.target.target.parent.args.${number}`]: string[]; [x: `process.target.target.parent.target.target.parent.elf.exports.${number}`]: string[]; [x: `process.target.target.parent.target.target.parent.elf.imports.${number}`]: string[]; [x: `process.target.target.parent.target.target.parent.elf.sections.${number}`]: string[]; [x: `process.target.target.parent.target.target.parent.elf.segments.${number}`]: string[]; [x: `process.target.target.parent.target.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.parent.target.target.parent.target.args.${number}`]: string[]; [x: `process.target.target.parent.target.target.parent.parent.args.${number}`]: string[]; [x: `process.target.target.parent.target.parent.target.elf.exports.${number}`]: string[]; [x: `process.target.target.parent.target.parent.target.elf.imports.${number}`]: string[]; [x: `process.target.target.parent.target.parent.target.elf.sections.${number}`]: string[]; [x: `process.target.target.parent.target.parent.target.elf.segments.${number}`]: string[]; [x: `process.target.target.parent.target.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.parent.target.parent.target.target.args.${number}`]: string[]; [x: `process.target.target.parent.target.parent.target.parent.args.${number}`]: string[]; [x: `process.target.target.parent.target.parent.parent.elf.exports.${number}`]: string[]; [x: `process.target.target.parent.target.parent.parent.elf.imports.${number}`]: string[]; [x: `process.target.target.parent.target.parent.parent.elf.sections.${number}`]: string[]; [x: `process.target.target.parent.target.parent.parent.elf.segments.${number}`]: string[]; [x: `process.target.target.parent.target.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.parent.target.parent.parent.target.args.${number}`]: string[]; [x: `process.target.target.parent.target.parent.parent.parent.args.${number}`]: string[]; [x: `process.target.target.parent.parent.target.target.elf.exports.${number}`]: string[]; [x: `process.target.target.parent.parent.target.target.elf.imports.${number}`]: string[]; [x: `process.target.target.parent.parent.target.target.elf.sections.${number}`]: string[]; [x: `process.target.target.parent.parent.target.target.elf.segments.${number}`]: string[]; [x: `process.target.target.parent.parent.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.parent.parent.target.target.target.args.${number}`]: string[]; [x: `process.target.target.parent.parent.target.target.parent.args.${number}`]: string[]; [x: `process.target.target.parent.parent.target.parent.elf.exports.${number}`]: string[]; [x: `process.target.target.parent.parent.target.parent.elf.imports.${number}`]: string[]; [x: `process.target.target.parent.parent.target.parent.elf.sections.${number}`]: string[]; [x: `process.target.target.parent.parent.target.parent.elf.segments.${number}`]: string[]; [x: `process.target.target.parent.parent.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.parent.parent.target.parent.target.args.${number}`]: string[]; [x: `process.target.target.parent.parent.target.parent.parent.args.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.target.elf.exports.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.target.elf.imports.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.target.elf.sections.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.target.elf.segments.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.target.target.args.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.target.parent.args.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.parent.elf.exports.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.parent.elf.imports.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.parent.elf.sections.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.parent.elf.segments.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.parent.target.args.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.parent.parent.args.${number}`]: string[]; [x: `process.target.parent.target.target.target.target.elf.exports.${number}`]: string[]; [x: `process.target.parent.target.target.target.target.elf.imports.${number}`]: string[]; [x: `process.target.parent.target.target.target.target.elf.sections.${number}`]: string[]; [x: `process.target.parent.target.target.target.target.elf.segments.${number}`]: string[]; [x: `process.target.parent.target.target.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.target.target.target.target.target.args.${number}`]: string[]; [x: `process.target.parent.target.target.target.target.parent.args.${number}`]: string[]; [x: `process.target.parent.target.target.target.parent.elf.exports.${number}`]: string[]; [x: `process.target.parent.target.target.target.parent.elf.imports.${number}`]: string[]; [x: `process.target.parent.target.target.target.parent.elf.sections.${number}`]: string[]; [x: `process.target.parent.target.target.target.parent.elf.segments.${number}`]: string[]; [x: `process.target.parent.target.target.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.target.target.target.parent.target.args.${number}`]: string[]; [x: `process.target.parent.target.target.target.parent.parent.args.${number}`]: string[]; [x: `process.target.parent.target.target.parent.target.elf.exports.${number}`]: string[]; [x: `process.target.parent.target.target.parent.target.elf.imports.${number}`]: string[]; [x: `process.target.parent.target.target.parent.target.elf.sections.${number}`]: string[]; [x: `process.target.parent.target.target.parent.target.elf.segments.${number}`]: string[]; [x: `process.target.parent.target.target.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.target.target.parent.target.target.args.${number}`]: string[]; [x: `process.target.parent.target.target.parent.target.parent.args.${number}`]: string[]; [x: `process.target.parent.target.target.parent.parent.elf.exports.${number}`]: string[]; [x: `process.target.parent.target.target.parent.parent.elf.imports.${number}`]: string[]; [x: `process.target.parent.target.target.parent.parent.elf.sections.${number}`]: string[]; [x: `process.target.parent.target.target.parent.parent.elf.segments.${number}`]: string[]; [x: `process.target.parent.target.target.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.target.target.parent.parent.target.args.${number}`]: string[]; [x: `process.target.parent.target.target.parent.parent.parent.args.${number}`]: string[]; [x: `process.target.parent.target.parent.target.target.elf.exports.${number}`]: string[]; [x: `process.target.parent.target.parent.target.target.elf.imports.${number}`]: string[]; [x: `process.target.parent.target.parent.target.target.elf.sections.${number}`]: string[]; [x: `process.target.parent.target.parent.target.target.elf.segments.${number}`]: string[]; [x: `process.target.parent.target.parent.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.target.parent.target.target.target.args.${number}`]: string[]; [x: `process.target.parent.target.parent.target.target.parent.args.${number}`]: string[]; [x: `process.target.parent.target.parent.target.parent.elf.exports.${number}`]: string[]; [x: `process.target.parent.target.parent.target.parent.elf.imports.${number}`]: string[]; [x: `process.target.parent.target.parent.target.parent.elf.sections.${number}`]: string[]; [x: `process.target.parent.target.parent.target.parent.elf.segments.${number}`]: string[]; [x: `process.target.parent.target.parent.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.target.parent.target.parent.target.args.${number}`]: string[]; [x: `process.target.parent.target.parent.target.parent.parent.args.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.target.elf.exports.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.target.elf.imports.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.target.elf.sections.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.target.elf.segments.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.target.target.args.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.target.parent.args.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.parent.elf.exports.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.parent.elf.imports.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.parent.elf.sections.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.parent.elf.segments.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.parent.target.args.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.parent.parent.args.${number}`]: string[]; [x: `process.target.parent.parent.target.target.target.elf.exports.${number}`]: string[]; [x: `process.target.parent.parent.target.target.target.elf.imports.${number}`]: string[]; [x: `process.target.parent.parent.target.target.target.elf.sections.${number}`]: string[]; [x: `process.target.parent.parent.target.target.target.elf.segments.${number}`]: string[]; [x: `process.target.parent.parent.target.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.parent.target.target.target.target.args.${number}`]: string[]; [x: `process.target.parent.parent.target.target.target.parent.args.${number}`]: string[]; [x: `process.target.parent.parent.target.target.parent.elf.exports.${number}`]: string[]; [x: `process.target.parent.parent.target.target.parent.elf.imports.${number}`]: string[]; [x: `process.target.parent.parent.target.target.parent.elf.sections.${number}`]: string[]; [x: `process.target.parent.parent.target.target.parent.elf.segments.${number}`]: string[]; [x: `process.target.parent.parent.target.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.parent.target.target.parent.target.args.${number}`]: string[]; [x: `process.target.parent.parent.target.target.parent.parent.args.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.target.elf.exports.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.target.elf.imports.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.target.elf.sections.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.target.elf.segments.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.target.target.args.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.target.parent.args.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.parent.elf.exports.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.parent.elf.imports.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.parent.elf.sections.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.parent.elf.segments.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.parent.target.args.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.parent.parent.args.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.target.elf.exports.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.target.elf.imports.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.target.elf.sections.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.target.elf.segments.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.target.target.args.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.target.parent.args.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.parent.elf.exports.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.parent.elf.imports.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.parent.elf.sections.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.parent.elf.segments.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.parent.target.args.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.parent.parent.args.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.target.elf.exports.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.target.elf.imports.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.target.elf.sections.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.target.elf.segments.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.target.target.args.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.target.parent.args.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.parent.elf.exports.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.parent.elf.imports.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.parent.elf.sections.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.parent.elf.segments.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.parent.target.args.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.parent.parent.args.${number}`]: string[]; [x: `process.parent.target.target.target.target.target.elf.exports.${number}`]: string[]; [x: `process.parent.target.target.target.target.target.elf.imports.${number}`]: string[]; [x: `process.parent.target.target.target.target.target.elf.sections.${number}`]: string[]; [x: `process.parent.target.target.target.target.target.elf.segments.${number}`]: string[]; [x: `process.parent.target.target.target.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.target.target.target.target.target.args.${number}`]: string[]; [x: `process.parent.target.target.target.target.target.parent.args.${number}`]: string[]; [x: `process.parent.target.target.target.target.parent.elf.exports.${number}`]: string[]; [x: `process.parent.target.target.target.target.parent.elf.imports.${number}`]: string[]; [x: `process.parent.target.target.target.target.parent.elf.sections.${number}`]: string[]; [x: `process.parent.target.target.target.target.parent.elf.segments.${number}`]: string[]; [x: `process.parent.target.target.target.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.target.target.target.parent.target.args.${number}`]: string[]; [x: `process.parent.target.target.target.target.parent.parent.args.${number}`]: string[]; [x: `process.parent.target.target.target.parent.target.elf.exports.${number}`]: string[]; [x: `process.parent.target.target.target.parent.target.elf.imports.${number}`]: string[]; [x: `process.parent.target.target.target.parent.target.elf.sections.${number}`]: string[]; [x: `process.parent.target.target.target.parent.target.elf.segments.${number}`]: string[]; [x: `process.parent.target.target.target.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.target.target.parent.target.target.args.${number}`]: string[]; [x: `process.parent.target.target.target.parent.target.parent.args.${number}`]: string[]; [x: `process.parent.target.target.target.parent.parent.elf.exports.${number}`]: string[]; [x: `process.parent.target.target.target.parent.parent.elf.imports.${number}`]: string[]; [x: `process.parent.target.target.target.parent.parent.elf.sections.${number}`]: string[]; [x: `process.parent.target.target.target.parent.parent.elf.segments.${number}`]: string[]; [x: `process.parent.target.target.target.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.target.target.parent.parent.target.args.${number}`]: string[]; [x: `process.parent.target.target.target.parent.parent.parent.args.${number}`]: string[]; [x: `process.parent.target.target.parent.target.target.elf.exports.${number}`]: string[]; [x: `process.parent.target.target.parent.target.target.elf.imports.${number}`]: string[]; [x: `process.parent.target.target.parent.target.target.elf.sections.${number}`]: string[]; [x: `process.parent.target.target.parent.target.target.elf.segments.${number}`]: string[]; [x: `process.parent.target.target.parent.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.target.parent.target.target.target.args.${number}`]: string[]; [x: `process.parent.target.target.parent.target.target.parent.args.${number}`]: string[]; [x: `process.parent.target.target.parent.target.parent.elf.exports.${number}`]: string[]; [x: `process.parent.target.target.parent.target.parent.elf.imports.${number}`]: string[]; [x: `process.parent.target.target.parent.target.parent.elf.sections.${number}`]: string[]; [x: `process.parent.target.target.parent.target.parent.elf.segments.${number}`]: string[]; [x: `process.parent.target.target.parent.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.target.parent.target.parent.target.args.${number}`]: string[]; [x: `process.parent.target.target.parent.target.parent.parent.args.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.target.elf.exports.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.target.elf.imports.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.target.elf.sections.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.target.elf.segments.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.target.target.args.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.target.parent.args.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.parent.elf.exports.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.parent.elf.imports.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.parent.elf.sections.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.parent.elf.segments.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.parent.target.args.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.parent.parent.args.${number}`]: string[]; [x: `process.parent.target.parent.target.target.target.elf.exports.${number}`]: string[]; [x: `process.parent.target.parent.target.target.target.elf.imports.${number}`]: string[]; [x: `process.parent.target.parent.target.target.target.elf.sections.${number}`]: string[]; [x: `process.parent.target.parent.target.target.target.elf.segments.${number}`]: string[]; [x: `process.parent.target.parent.target.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.parent.target.target.target.target.args.${number}`]: string[]; [x: `process.parent.target.parent.target.target.target.parent.args.${number}`]: string[]; [x: `process.parent.target.parent.target.target.parent.elf.exports.${number}`]: string[]; [x: `process.parent.target.parent.target.target.parent.elf.imports.${number}`]: string[]; [x: `process.parent.target.parent.target.target.parent.elf.sections.${number}`]: string[]; [x: `process.parent.target.parent.target.target.parent.elf.segments.${number}`]: string[]; [x: `process.parent.target.parent.target.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.parent.target.target.parent.target.args.${number}`]: string[]; [x: `process.parent.target.parent.target.target.parent.parent.args.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.target.elf.exports.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.target.elf.imports.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.target.elf.sections.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.target.elf.segments.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.target.target.args.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.target.parent.args.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.parent.elf.exports.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.parent.elf.imports.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.parent.elf.sections.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.parent.elf.segments.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.parent.target.args.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.parent.parent.args.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.target.elf.exports.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.target.elf.imports.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.target.elf.sections.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.target.elf.segments.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.target.target.args.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.target.parent.args.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.parent.elf.exports.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.parent.elf.imports.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.parent.elf.sections.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.parent.elf.segments.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.parent.target.args.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.parent.parent.args.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.target.elf.exports.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.target.elf.imports.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.target.elf.sections.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.target.elf.segments.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.target.target.args.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.target.parent.args.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.parent.elf.exports.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.parent.elf.imports.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.parent.elf.sections.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.parent.elf.segments.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.parent.target.args.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.parent.parent.args.${number}`]: string[]; [x: `process.parent.parent.target.target.target.target.elf.exports.${number}`]: string[]; [x: `process.parent.parent.target.target.target.target.elf.imports.${number}`]: string[]; [x: `process.parent.parent.target.target.target.target.elf.sections.${number}`]: string[]; [x: `process.parent.parent.target.target.target.target.elf.segments.${number}`]: string[]; [x: `process.parent.parent.target.target.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.target.target.target.target.target.args.${number}`]: string[]; [x: `process.parent.parent.target.target.target.target.parent.args.${number}`]: string[]; [x: `process.parent.parent.target.target.target.parent.elf.exports.${number}`]: string[]; [x: `process.parent.parent.target.target.target.parent.elf.imports.${number}`]: string[]; [x: `process.parent.parent.target.target.target.parent.elf.sections.${number}`]: string[]; [x: `process.parent.parent.target.target.target.parent.elf.segments.${number}`]: string[]; [x: `process.parent.parent.target.target.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.target.target.target.parent.target.args.${number}`]: string[]; [x: `process.parent.parent.target.target.target.parent.parent.args.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.target.elf.exports.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.target.elf.imports.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.target.elf.sections.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.target.elf.segments.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.target.target.args.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.target.parent.args.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.parent.elf.exports.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.parent.elf.imports.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.parent.elf.sections.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.parent.elf.segments.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.parent.target.args.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.parent.parent.args.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.target.elf.exports.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.target.elf.imports.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.target.elf.sections.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.target.elf.segments.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.target.target.args.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.target.parent.args.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.parent.elf.exports.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.parent.elf.imports.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.parent.elf.sections.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.parent.elf.segments.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.parent.target.args.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.parent.parent.args.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.target.elf.exports.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.target.elf.imports.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.target.elf.sections.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.target.elf.segments.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.target.target.args.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.target.parent.args.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.parent.elf.exports.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.parent.elf.imports.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.parent.elf.sections.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.parent.elf.segments.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.parent.target.args.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.parent.parent.args.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.target.elf.exports.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.target.elf.imports.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.target.elf.sections.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.target.elf.segments.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.target.target.args.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.target.parent.args.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.parent.elf.exports.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.parent.elf.imports.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.parent.elf.sections.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.parent.elf.segments.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.parent.target.args.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.parent.parent.args.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.target.elf.exports.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.target.elf.imports.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.target.elf.sections.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.target.elf.segments.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.target.target.args.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.target.parent.args.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.parent.elf.exports.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.parent.elf.imports.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.parent.elf.sections.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.parent.elf.segments.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.parent.target.args.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.parent.parent.args.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.target.elf.exports.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.target.elf.imports.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.target.elf.sections.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.target.elf.segments.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.target.target.args.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.target.parent.args.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.parent.elf.exports.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.parent.elf.imports.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.parent.elf.sections.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.parent.elf.segments.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.parent.target.args.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.parent.parent.args.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.target.elf.exports.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.target.elf.imports.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.target.elf.sections.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.target.elf.segments.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.target.target.args.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.target.parent.args.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.parent.elf.exports.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.parent.elf.imports.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.parent.elf.sections.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.parent.elf.segments.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.parent.target.args.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.parent.parent.args.${number}`]: string[]; [x: `process.target.target.target.target.target.target.target.elf.exports.${number}`]: string[]; [x: `process.target.target.target.target.target.target.target.elf.imports.${number}`]: string[]; [x: `process.target.target.target.target.target.target.target.elf.sections.${number}`]: string[]; [x: `process.target.target.target.target.target.target.target.elf.segments.${number}`]: string[]; [x: `process.target.target.target.target.target.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.target.target.target.target.target.target.args.${number}`]: string[]; [x: `process.target.target.target.target.target.target.target.parent.args.${number}`]: string[]; [x: `process.target.target.target.target.target.target.parent.elf.exports.${number}`]: string[]; [x: `process.target.target.target.target.target.target.parent.elf.imports.${number}`]: string[]; [x: `process.target.target.target.target.target.target.parent.elf.sections.${number}`]: string[]; [x: `process.target.target.target.target.target.target.parent.elf.segments.${number}`]: string[]; [x: `process.target.target.target.target.target.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.target.target.target.target.parent.target.args.${number}`]: string[]; [x: `process.target.target.target.target.target.target.parent.parent.args.${number}`]: string[]; [x: `process.target.target.target.target.target.parent.target.elf.exports.${number}`]: string[]; [x: `process.target.target.target.target.target.parent.target.elf.imports.${number}`]: string[]; [x: `process.target.target.target.target.target.parent.target.elf.sections.${number}`]: string[]; [x: `process.target.target.target.target.target.parent.target.elf.segments.${number}`]: string[]; [x: `process.target.target.target.target.target.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.target.target.target.parent.target.target.args.${number}`]: string[]; [x: `process.target.target.target.target.target.parent.target.parent.args.${number}`]: string[]; [x: `process.target.target.target.target.target.parent.parent.elf.exports.${number}`]: string[]; [x: `process.target.target.target.target.target.parent.parent.elf.imports.${number}`]: string[]; [x: `process.target.target.target.target.target.parent.parent.elf.sections.${number}`]: string[]; [x: `process.target.target.target.target.target.parent.parent.elf.segments.${number}`]: string[]; [x: `process.target.target.target.target.target.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.target.target.target.parent.parent.target.args.${number}`]: string[]; [x: `process.target.target.target.target.target.parent.parent.parent.args.${number}`]: string[]; [x: `process.target.target.target.target.parent.target.target.elf.exports.${number}`]: string[]; [x: `process.target.target.target.target.parent.target.target.elf.imports.${number}`]: string[]; [x: `process.target.target.target.target.parent.target.target.elf.sections.${number}`]: string[]; [x: `process.target.target.target.target.parent.target.target.elf.segments.${number}`]: string[]; [x: `process.target.target.target.target.parent.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.target.target.parent.target.target.target.args.${number}`]: string[]; [x: `process.target.target.target.target.parent.target.target.parent.args.${number}`]: string[]; [x: `process.target.target.target.target.parent.target.parent.elf.exports.${number}`]: string[]; [x: `process.target.target.target.target.parent.target.parent.elf.imports.${number}`]: string[]; [x: `process.target.target.target.target.parent.target.parent.elf.sections.${number}`]: string[]; [x: `process.target.target.target.target.parent.target.parent.elf.segments.${number}`]: string[]; [x: `process.target.target.target.target.parent.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.target.target.parent.target.parent.target.args.${number}`]: string[]; [x: `process.target.target.target.target.parent.target.parent.parent.args.${number}`]: string[]; [x: `process.target.target.target.target.parent.parent.target.elf.exports.${number}`]: string[]; [x: `process.target.target.target.target.parent.parent.target.elf.imports.${number}`]: string[]; [x: `process.target.target.target.target.parent.parent.target.elf.sections.${number}`]: string[]; [x: `process.target.target.target.target.parent.parent.target.elf.segments.${number}`]: string[]; [x: `process.target.target.target.target.parent.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.target.target.parent.parent.target.target.args.${number}`]: string[]; [x: `process.target.target.target.target.parent.parent.target.parent.args.${number}`]: string[]; [x: `process.target.target.target.target.parent.parent.parent.elf.exports.${number}`]: string[]; [x: `process.target.target.target.target.parent.parent.parent.elf.imports.${number}`]: string[]; [x: `process.target.target.target.target.parent.parent.parent.elf.sections.${number}`]: string[]; [x: `process.target.target.target.target.parent.parent.parent.elf.segments.${number}`]: string[]; [x: `process.target.target.target.target.parent.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.target.target.parent.parent.parent.target.args.${number}`]: string[]; [x: `process.target.target.target.target.parent.parent.parent.parent.args.${number}`]: string[]; [x: `process.target.target.target.parent.target.target.target.elf.exports.${number}`]: string[]; [x: `process.target.target.target.parent.target.target.target.elf.imports.${number}`]: string[]; [x: `process.target.target.target.parent.target.target.target.elf.sections.${number}`]: string[]; [x: `process.target.target.target.parent.target.target.target.elf.segments.${number}`]: string[]; [x: `process.target.target.target.parent.target.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.target.parent.target.target.target.target.args.${number}`]: string[]; [x: `process.target.target.target.parent.target.target.target.parent.args.${number}`]: string[]; [x: `process.target.target.target.parent.target.target.parent.elf.exports.${number}`]: string[]; [x: `process.target.target.target.parent.target.target.parent.elf.imports.${number}`]: string[]; [x: `process.target.target.target.parent.target.target.parent.elf.sections.${number}`]: string[]; [x: `process.target.target.target.parent.target.target.parent.elf.segments.${number}`]: string[]; [x: `process.target.target.target.parent.target.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.target.parent.target.target.parent.target.args.${number}`]: string[]; [x: `process.target.target.target.parent.target.target.parent.parent.args.${number}`]: string[]; [x: `process.target.target.target.parent.target.parent.target.elf.exports.${number}`]: string[]; [x: `process.target.target.target.parent.target.parent.target.elf.imports.${number}`]: string[]; [x: `process.target.target.target.parent.target.parent.target.elf.sections.${number}`]: string[]; [x: `process.target.target.target.parent.target.parent.target.elf.segments.${number}`]: string[]; [x: `process.target.target.target.parent.target.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.target.parent.target.parent.target.target.args.${number}`]: string[]; [x: `process.target.target.target.parent.target.parent.target.parent.args.${number}`]: string[]; [x: `process.target.target.target.parent.target.parent.parent.elf.exports.${number}`]: string[]; [x: `process.target.target.target.parent.target.parent.parent.elf.imports.${number}`]: string[]; [x: `process.target.target.target.parent.target.parent.parent.elf.sections.${number}`]: string[]; [x: `process.target.target.target.parent.target.parent.parent.elf.segments.${number}`]: string[]; [x: `process.target.target.target.parent.target.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.target.parent.target.parent.parent.target.args.${number}`]: string[]; [x: `process.target.target.target.parent.target.parent.parent.parent.args.${number}`]: string[]; [x: `process.target.target.target.parent.parent.target.target.elf.exports.${number}`]: string[]; [x: `process.target.target.target.parent.parent.target.target.elf.imports.${number}`]: string[]; [x: `process.target.target.target.parent.parent.target.target.elf.sections.${number}`]: string[]; [x: `process.target.target.target.parent.parent.target.target.elf.segments.${number}`]: string[]; [x: `process.target.target.target.parent.parent.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.target.parent.parent.target.target.target.args.${number}`]: string[]; [x: `process.target.target.target.parent.parent.target.target.parent.args.${number}`]: string[]; [x: `process.target.target.target.parent.parent.target.parent.elf.exports.${number}`]: string[]; [x: `process.target.target.target.parent.parent.target.parent.elf.imports.${number}`]: string[]; [x: `process.target.target.target.parent.parent.target.parent.elf.sections.${number}`]: string[]; [x: `process.target.target.target.parent.parent.target.parent.elf.segments.${number}`]: string[]; [x: `process.target.target.target.parent.parent.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.target.parent.parent.target.parent.target.args.${number}`]: string[]; [x: `process.target.target.target.parent.parent.target.parent.parent.args.${number}`]: string[]; [x: `process.target.target.target.parent.parent.parent.target.elf.exports.${number}`]: string[]; [x: `process.target.target.target.parent.parent.parent.target.elf.imports.${number}`]: string[]; [x: `process.target.target.target.parent.parent.parent.target.elf.sections.${number}`]: string[]; [x: `process.target.target.target.parent.parent.parent.target.elf.segments.${number}`]: string[]; [x: `process.target.target.target.parent.parent.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.target.parent.parent.parent.target.target.args.${number}`]: string[]; [x: `process.target.target.target.parent.parent.parent.target.parent.args.${number}`]: string[]; [x: `process.target.target.target.parent.parent.parent.parent.elf.exports.${number}`]: string[]; [x: `process.target.target.target.parent.parent.parent.parent.elf.imports.${number}`]: string[]; [x: `process.target.target.target.parent.parent.parent.parent.elf.sections.${number}`]: string[]; [x: `process.target.target.target.parent.parent.parent.parent.elf.segments.${number}`]: string[]; [x: `process.target.target.target.parent.parent.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.target.parent.parent.parent.parent.target.args.${number}`]: string[]; [x: `process.target.target.target.parent.parent.parent.parent.parent.args.${number}`]: string[]; [x: `process.target.target.parent.target.target.target.target.elf.exports.${number}`]: string[]; [x: `process.target.target.parent.target.target.target.target.elf.imports.${number}`]: string[]; [x: `process.target.target.parent.target.target.target.target.elf.sections.${number}`]: string[]; [x: `process.target.target.parent.target.target.target.target.elf.segments.${number}`]: string[]; [x: `process.target.target.parent.target.target.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.parent.target.target.target.target.target.args.${number}`]: string[]; [x: `process.target.target.parent.target.target.target.target.parent.args.${number}`]: string[]; [x: `process.target.target.parent.target.target.target.parent.elf.exports.${number}`]: string[]; [x: `process.target.target.parent.target.target.target.parent.elf.imports.${number}`]: string[]; [x: `process.target.target.parent.target.target.target.parent.elf.sections.${number}`]: string[]; [x: `process.target.target.parent.target.target.target.parent.elf.segments.${number}`]: string[]; [x: `process.target.target.parent.target.target.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.parent.target.target.target.parent.target.args.${number}`]: string[]; [x: `process.target.target.parent.target.target.target.parent.parent.args.${number}`]: string[]; [x: `process.target.target.parent.target.target.parent.target.elf.exports.${number}`]: string[]; [x: `process.target.target.parent.target.target.parent.target.elf.imports.${number}`]: string[]; [x: `process.target.target.parent.target.target.parent.target.elf.sections.${number}`]: string[]; [x: `process.target.target.parent.target.target.parent.target.elf.segments.${number}`]: string[]; [x: `process.target.target.parent.target.target.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.parent.target.target.parent.target.target.args.${number}`]: string[]; [x: `process.target.target.parent.target.target.parent.target.parent.args.${number}`]: string[]; [x: `process.target.target.parent.target.target.parent.parent.elf.exports.${number}`]: string[]; [x: `process.target.target.parent.target.target.parent.parent.elf.imports.${number}`]: string[]; [x: `process.target.target.parent.target.target.parent.parent.elf.sections.${number}`]: string[]; [x: `process.target.target.parent.target.target.parent.parent.elf.segments.${number}`]: string[]; [x: `process.target.target.parent.target.target.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.parent.target.target.parent.parent.target.args.${number}`]: string[]; [x: `process.target.target.parent.target.target.parent.parent.parent.args.${number}`]: string[]; [x: `process.target.target.parent.target.parent.target.target.elf.exports.${number}`]: string[]; [x: `process.target.target.parent.target.parent.target.target.elf.imports.${number}`]: string[]; [x: `process.target.target.parent.target.parent.target.target.elf.sections.${number}`]: string[]; [x: `process.target.target.parent.target.parent.target.target.elf.segments.${number}`]: string[]; [x: `process.target.target.parent.target.parent.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.parent.target.parent.target.target.target.args.${number}`]: string[]; [x: `process.target.target.parent.target.parent.target.target.parent.args.${number}`]: string[]; [x: `process.target.target.parent.target.parent.target.parent.elf.exports.${number}`]: string[]; [x: `process.target.target.parent.target.parent.target.parent.elf.imports.${number}`]: string[]; [x: `process.target.target.parent.target.parent.target.parent.elf.sections.${number}`]: string[]; [x: `process.target.target.parent.target.parent.target.parent.elf.segments.${number}`]: string[]; [x: `process.target.target.parent.target.parent.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.parent.target.parent.target.parent.target.args.${number}`]: string[]; [x: `process.target.target.parent.target.parent.target.parent.parent.args.${number}`]: string[]; [x: `process.target.target.parent.target.parent.parent.target.elf.exports.${number}`]: string[]; [x: `process.target.target.parent.target.parent.parent.target.elf.imports.${number}`]: string[]; [x: `process.target.target.parent.target.parent.parent.target.elf.sections.${number}`]: string[]; [x: `process.target.target.parent.target.parent.parent.target.elf.segments.${number}`]: string[]; [x: `process.target.target.parent.target.parent.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.parent.target.parent.parent.target.target.args.${number}`]: string[]; [x: `process.target.target.parent.target.parent.parent.target.parent.args.${number}`]: string[]; [x: `process.target.target.parent.target.parent.parent.parent.elf.exports.${number}`]: string[]; [x: `process.target.target.parent.target.parent.parent.parent.elf.imports.${number}`]: string[]; [x: `process.target.target.parent.target.parent.parent.parent.elf.sections.${number}`]: string[]; [x: `process.target.target.parent.target.parent.parent.parent.elf.segments.${number}`]: string[]; [x: `process.target.target.parent.target.parent.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.parent.target.parent.parent.parent.target.args.${number}`]: string[]; [x: `process.target.target.parent.target.parent.parent.parent.parent.args.${number}`]: string[]; [x: `process.target.target.parent.parent.target.target.target.elf.exports.${number}`]: string[]; [x: `process.target.target.parent.parent.target.target.target.elf.imports.${number}`]: string[]; [x: `process.target.target.parent.parent.target.target.target.elf.sections.${number}`]: string[]; [x: `process.target.target.parent.parent.target.target.target.elf.segments.${number}`]: string[]; [x: `process.target.target.parent.parent.target.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.parent.parent.target.target.target.target.args.${number}`]: string[]; [x: `process.target.target.parent.parent.target.target.target.parent.args.${number}`]: string[]; [x: `process.target.target.parent.parent.target.target.parent.elf.exports.${number}`]: string[]; [x: `process.target.target.parent.parent.target.target.parent.elf.imports.${number}`]: string[]; [x: `process.target.target.parent.parent.target.target.parent.elf.sections.${number}`]: string[]; [x: `process.target.target.parent.parent.target.target.parent.elf.segments.${number}`]: string[]; [x: `process.target.target.parent.parent.target.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.parent.parent.target.target.parent.target.args.${number}`]: string[]; [x: `process.target.target.parent.parent.target.target.parent.parent.args.${number}`]: string[]; [x: `process.target.target.parent.parent.target.parent.target.elf.exports.${number}`]: string[]; [x: `process.target.target.parent.parent.target.parent.target.elf.imports.${number}`]: string[]; [x: `process.target.target.parent.parent.target.parent.target.elf.sections.${number}`]: string[]; [x: `process.target.target.parent.parent.target.parent.target.elf.segments.${number}`]: string[]; [x: `process.target.target.parent.parent.target.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.parent.parent.target.parent.target.target.args.${number}`]: string[]; [x: `process.target.target.parent.parent.target.parent.target.parent.args.${number}`]: string[]; [x: `process.target.target.parent.parent.target.parent.parent.elf.exports.${number}`]: string[]; [x: `process.target.target.parent.parent.target.parent.parent.elf.imports.${number}`]: string[]; [x: `process.target.target.parent.parent.target.parent.parent.elf.sections.${number}`]: string[]; [x: `process.target.target.parent.parent.target.parent.parent.elf.segments.${number}`]: string[]; [x: `process.target.target.parent.parent.target.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.parent.parent.target.parent.parent.target.args.${number}`]: string[]; [x: `process.target.target.parent.parent.target.parent.parent.parent.args.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.target.target.elf.exports.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.target.target.elf.imports.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.target.target.elf.sections.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.target.target.elf.segments.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.target.target.target.args.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.target.target.parent.args.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.target.parent.elf.exports.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.target.parent.elf.imports.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.target.parent.elf.sections.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.target.parent.elf.segments.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.target.parent.target.args.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.target.parent.parent.args.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.parent.target.elf.exports.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.parent.target.elf.imports.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.parent.target.elf.sections.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.parent.target.elf.segments.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.parent.target.target.args.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.parent.target.parent.args.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.parent.parent.elf.exports.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.parent.parent.elf.imports.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.parent.parent.elf.sections.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.parent.parent.elf.segments.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.parent.parent.target.args.${number}`]: string[]; [x: `process.target.target.parent.parent.parent.parent.parent.parent.args.${number}`]: string[]; [x: `process.target.parent.target.target.target.target.target.elf.exports.${number}`]: string[]; [x: `process.target.parent.target.target.target.target.target.elf.imports.${number}`]: string[]; [x: `process.target.parent.target.target.target.target.target.elf.sections.${number}`]: string[]; [x: `process.target.parent.target.target.target.target.target.elf.segments.${number}`]: string[]; [x: `process.target.parent.target.target.target.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.target.target.target.target.target.target.args.${number}`]: string[]; [x: `process.target.parent.target.target.target.target.target.parent.args.${number}`]: string[]; [x: `process.target.parent.target.target.target.target.parent.elf.exports.${number}`]: string[]; [x: `process.target.parent.target.target.target.target.parent.elf.imports.${number}`]: string[]; [x: `process.target.parent.target.target.target.target.parent.elf.sections.${number}`]: string[]; [x: `process.target.parent.target.target.target.target.parent.elf.segments.${number}`]: string[]; [x: `process.target.parent.target.target.target.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.target.target.target.target.parent.target.args.${number}`]: string[]; [x: `process.target.parent.target.target.target.target.parent.parent.args.${number}`]: string[]; [x: `process.target.parent.target.target.target.parent.target.elf.exports.${number}`]: string[]; [x: `process.target.parent.target.target.target.parent.target.elf.imports.${number}`]: string[]; [x: `process.target.parent.target.target.target.parent.target.elf.sections.${number}`]: string[]; [x: `process.target.parent.target.target.target.parent.target.elf.segments.${number}`]: string[]; [x: `process.target.parent.target.target.target.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.target.target.target.parent.target.target.args.${number}`]: string[]; [x: `process.target.parent.target.target.target.parent.target.parent.args.${number}`]: string[]; [x: `process.target.parent.target.target.target.parent.parent.elf.exports.${number}`]: string[]; [x: `process.target.parent.target.target.target.parent.parent.elf.imports.${number}`]: string[]; [x: `process.target.parent.target.target.target.parent.parent.elf.sections.${number}`]: string[]; [x: `process.target.parent.target.target.target.parent.parent.elf.segments.${number}`]: string[]; [x: `process.target.parent.target.target.target.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.target.target.target.parent.parent.target.args.${number}`]: string[]; [x: `process.target.parent.target.target.target.parent.parent.parent.args.${number}`]: string[]; [x: `process.target.parent.target.target.parent.target.target.elf.exports.${number}`]: string[]; [x: `process.target.parent.target.target.parent.target.target.elf.imports.${number}`]: string[]; [x: `process.target.parent.target.target.parent.target.target.elf.sections.${number}`]: string[]; [x: `process.target.parent.target.target.parent.target.target.elf.segments.${number}`]: string[]; [x: `process.target.parent.target.target.parent.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.target.target.parent.target.target.target.args.${number}`]: string[]; [x: `process.target.parent.target.target.parent.target.target.parent.args.${number}`]: string[]; [x: `process.target.parent.target.target.parent.target.parent.elf.exports.${number}`]: string[]; [x: `process.target.parent.target.target.parent.target.parent.elf.imports.${number}`]: string[]; [x: `process.target.parent.target.target.parent.target.parent.elf.sections.${number}`]: string[]; [x: `process.target.parent.target.target.parent.target.parent.elf.segments.${number}`]: string[]; [x: `process.target.parent.target.target.parent.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.target.target.parent.target.parent.target.args.${number}`]: string[]; [x: `process.target.parent.target.target.parent.target.parent.parent.args.${number}`]: string[]; [x: `process.target.parent.target.target.parent.parent.target.elf.exports.${number}`]: string[]; [x: `process.target.parent.target.target.parent.parent.target.elf.imports.${number}`]: string[]; [x: `process.target.parent.target.target.parent.parent.target.elf.sections.${number}`]: string[]; [x: `process.target.parent.target.target.parent.parent.target.elf.segments.${number}`]: string[]; [x: `process.target.parent.target.target.parent.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.target.target.parent.parent.target.target.args.${number}`]: string[]; [x: `process.target.parent.target.target.parent.parent.target.parent.args.${number}`]: string[]; [x: `process.target.parent.target.target.parent.parent.parent.elf.exports.${number}`]: string[]; [x: `process.target.parent.target.target.parent.parent.parent.elf.imports.${number}`]: string[]; [x: `process.target.parent.target.target.parent.parent.parent.elf.sections.${number}`]: string[]; [x: `process.target.parent.target.target.parent.parent.parent.elf.segments.${number}`]: string[]; [x: `process.target.parent.target.target.parent.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.target.target.parent.parent.parent.target.args.${number}`]: string[]; [x: `process.target.parent.target.target.parent.parent.parent.parent.args.${number}`]: string[]; [x: `process.target.parent.target.parent.target.target.target.elf.exports.${number}`]: string[]; [x: `process.target.parent.target.parent.target.target.target.elf.imports.${number}`]: string[]; [x: `process.target.parent.target.parent.target.target.target.elf.sections.${number}`]: string[]; [x: `process.target.parent.target.parent.target.target.target.elf.segments.${number}`]: string[]; [x: `process.target.parent.target.parent.target.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.target.parent.target.target.target.target.args.${number}`]: string[]; [x: `process.target.parent.target.parent.target.target.target.parent.args.${number}`]: string[]; [x: `process.target.parent.target.parent.target.target.parent.elf.exports.${number}`]: string[]; [x: `process.target.parent.target.parent.target.target.parent.elf.imports.${number}`]: string[]; [x: `process.target.parent.target.parent.target.target.parent.elf.sections.${number}`]: string[]; [x: `process.target.parent.target.parent.target.target.parent.elf.segments.${number}`]: string[]; [x: `process.target.parent.target.parent.target.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.target.parent.target.target.parent.target.args.${number}`]: string[]; [x: `process.target.parent.target.parent.target.target.parent.parent.args.${number}`]: string[]; [x: `process.target.parent.target.parent.target.parent.target.elf.exports.${number}`]: string[]; [x: `process.target.parent.target.parent.target.parent.target.elf.imports.${number}`]: string[]; [x: `process.target.parent.target.parent.target.parent.target.elf.sections.${number}`]: string[]; [x: `process.target.parent.target.parent.target.parent.target.elf.segments.${number}`]: string[]; [x: `process.target.parent.target.parent.target.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.target.parent.target.parent.target.target.args.${number}`]: string[]; [x: `process.target.parent.target.parent.target.parent.target.parent.args.${number}`]: string[]; [x: `process.target.parent.target.parent.target.parent.parent.elf.exports.${number}`]: string[]; [x: `process.target.parent.target.parent.target.parent.parent.elf.imports.${number}`]: string[]; [x: `process.target.parent.target.parent.target.parent.parent.elf.sections.${number}`]: string[]; [x: `process.target.parent.target.parent.target.parent.parent.elf.segments.${number}`]: string[]; [x: `process.target.parent.target.parent.target.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.target.parent.target.parent.parent.target.args.${number}`]: string[]; [x: `process.target.parent.target.parent.target.parent.parent.parent.args.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.target.target.elf.exports.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.target.target.elf.imports.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.target.target.elf.sections.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.target.target.elf.segments.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.target.target.target.args.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.target.target.parent.args.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.target.parent.elf.exports.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.target.parent.elf.imports.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.target.parent.elf.sections.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.target.parent.elf.segments.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.target.parent.target.args.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.target.parent.parent.args.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.parent.target.elf.exports.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.parent.target.elf.imports.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.parent.target.elf.sections.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.parent.target.elf.segments.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.parent.target.target.args.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.parent.target.parent.args.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.parent.parent.elf.exports.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.parent.parent.elf.imports.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.parent.parent.elf.sections.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.parent.parent.elf.segments.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.parent.parent.target.args.${number}`]: string[]; [x: `process.target.parent.target.parent.parent.parent.parent.parent.args.${number}`]: string[]; [x: `process.target.parent.parent.target.target.target.target.elf.exports.${number}`]: string[]; [x: `process.target.parent.parent.target.target.target.target.elf.imports.${number}`]: string[]; [x: `process.target.parent.parent.target.target.target.target.elf.sections.${number}`]: string[]; [x: `process.target.parent.parent.target.target.target.target.elf.segments.${number}`]: string[]; [x: `process.target.parent.parent.target.target.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.parent.target.target.target.target.target.args.${number}`]: string[]; [x: `process.target.parent.parent.target.target.target.target.parent.args.${number}`]: string[]; [x: `process.target.parent.parent.target.target.target.parent.elf.exports.${number}`]: string[]; [x: `process.target.parent.parent.target.target.target.parent.elf.imports.${number}`]: string[]; [x: `process.target.parent.parent.target.target.target.parent.elf.sections.${number}`]: string[]; [x: `process.target.parent.parent.target.target.target.parent.elf.segments.${number}`]: string[]; [x: `process.target.parent.parent.target.target.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.parent.target.target.target.parent.target.args.${number}`]: string[]; [x: `process.target.parent.parent.target.target.target.parent.parent.args.${number}`]: string[]; [x: `process.target.parent.parent.target.target.parent.target.elf.exports.${number}`]: string[]; [x: `process.target.parent.parent.target.target.parent.target.elf.imports.${number}`]: string[]; [x: `process.target.parent.parent.target.target.parent.target.elf.sections.${number}`]: string[]; [x: `process.target.parent.parent.target.target.parent.target.elf.segments.${number}`]: string[]; [x: `process.target.parent.parent.target.target.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.parent.target.target.parent.target.target.args.${number}`]: string[]; [x: `process.target.parent.parent.target.target.parent.target.parent.args.${number}`]: string[]; [x: `process.target.parent.parent.target.target.parent.parent.elf.exports.${number}`]: string[]; [x: `process.target.parent.parent.target.target.parent.parent.elf.imports.${number}`]: string[]; [x: `process.target.parent.parent.target.target.parent.parent.elf.sections.${number}`]: string[]; [x: `process.target.parent.parent.target.target.parent.parent.elf.segments.${number}`]: string[]; [x: `process.target.parent.parent.target.target.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.parent.target.target.parent.parent.target.args.${number}`]: string[]; [x: `process.target.parent.parent.target.target.parent.parent.parent.args.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.target.target.elf.exports.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.target.target.elf.imports.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.target.target.elf.sections.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.target.target.elf.segments.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.target.target.target.args.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.target.target.parent.args.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.target.parent.elf.exports.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.target.parent.elf.imports.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.target.parent.elf.sections.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.target.parent.elf.segments.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.target.parent.target.args.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.target.parent.parent.args.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.parent.target.elf.exports.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.parent.target.elf.imports.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.parent.target.elf.sections.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.parent.target.elf.segments.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.parent.target.target.args.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.parent.target.parent.args.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.parent.parent.elf.exports.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.parent.parent.elf.imports.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.parent.parent.elf.sections.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.parent.parent.elf.segments.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.parent.parent.target.args.${number}`]: string[]; [x: `process.target.parent.parent.target.parent.parent.parent.parent.args.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.target.target.elf.exports.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.target.target.elf.imports.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.target.target.elf.sections.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.target.target.elf.segments.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.target.target.target.args.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.target.target.parent.args.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.target.parent.elf.exports.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.target.parent.elf.imports.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.target.parent.elf.sections.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.target.parent.elf.segments.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.target.parent.target.args.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.target.parent.parent.args.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.parent.target.elf.exports.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.parent.target.elf.imports.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.parent.target.elf.sections.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.parent.target.elf.segments.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.parent.target.target.args.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.parent.target.parent.args.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.parent.parent.elf.exports.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.parent.parent.elf.imports.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.parent.parent.elf.sections.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.parent.parent.elf.segments.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.parent.parent.target.args.${number}`]: string[]; [x: `process.target.parent.parent.parent.target.parent.parent.parent.args.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.target.target.elf.exports.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.target.target.elf.imports.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.target.target.elf.sections.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.target.target.elf.segments.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.target.target.target.args.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.target.target.parent.args.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.target.parent.elf.exports.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.target.parent.elf.imports.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.target.parent.elf.sections.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.target.parent.elf.segments.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.target.parent.target.args.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.target.parent.parent.args.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.parent.target.elf.exports.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.parent.target.elf.imports.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.parent.target.elf.sections.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.parent.target.elf.segments.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.parent.target.target.args.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.parent.target.parent.args.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.parent.parent.elf.exports.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.parent.parent.elf.imports.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.parent.parent.elf.sections.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.parent.parent.elf.segments.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.parent.parent.target.args.${number}`]: string[]; [x: `process.target.parent.parent.parent.parent.parent.parent.parent.args.${number}`]: string[]; [x: `process.parent.target.target.target.target.target.target.elf.exports.${number}`]: string[]; [x: `process.parent.target.target.target.target.target.target.elf.imports.${number}`]: string[]; [x: `process.parent.target.target.target.target.target.target.elf.sections.${number}`]: string[]; [x: `process.parent.target.target.target.target.target.target.elf.segments.${number}`]: string[]; [x: `process.parent.target.target.target.target.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.target.target.target.target.target.target.args.${number}`]: string[]; [x: `process.parent.target.target.target.target.target.target.parent.args.${number}`]: string[]; [x: `process.parent.target.target.target.target.target.parent.elf.exports.${number}`]: string[]; [x: `process.parent.target.target.target.target.target.parent.elf.imports.${number}`]: string[]; [x: `process.parent.target.target.target.target.target.parent.elf.sections.${number}`]: string[]; [x: `process.parent.target.target.target.target.target.parent.elf.segments.${number}`]: string[]; [x: `process.parent.target.target.target.target.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.target.target.target.target.parent.target.args.${number}`]: string[]; [x: `process.parent.target.target.target.target.target.parent.parent.args.${number}`]: string[]; [x: `process.parent.target.target.target.target.parent.target.elf.exports.${number}`]: string[]; [x: `process.parent.target.target.target.target.parent.target.elf.imports.${number}`]: string[]; [x: `process.parent.target.target.target.target.parent.target.elf.sections.${number}`]: string[]; [x: `process.parent.target.target.target.target.parent.target.elf.segments.${number}`]: string[]; [x: `process.parent.target.target.target.target.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.target.target.target.parent.target.target.args.${number}`]: string[]; [x: `process.parent.target.target.target.target.parent.target.parent.args.${number}`]: string[]; [x: `process.parent.target.target.target.target.parent.parent.elf.exports.${number}`]: string[]; [x: `process.parent.target.target.target.target.parent.parent.elf.imports.${number}`]: string[]; [x: `process.parent.target.target.target.target.parent.parent.elf.sections.${number}`]: string[]; [x: `process.parent.target.target.target.target.parent.parent.elf.segments.${number}`]: string[]; [x: `process.parent.target.target.target.target.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.target.target.target.parent.parent.target.args.${number}`]: string[]; [x: `process.parent.target.target.target.target.parent.parent.parent.args.${number}`]: string[]; [x: `process.parent.target.target.target.parent.target.target.elf.exports.${number}`]: string[]; [x: `process.parent.target.target.target.parent.target.target.elf.imports.${number}`]: string[]; [x: `process.parent.target.target.target.parent.target.target.elf.sections.${number}`]: string[]; [x: `process.parent.target.target.target.parent.target.target.elf.segments.${number}`]: string[]; [x: `process.parent.target.target.target.parent.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.target.target.parent.target.target.target.args.${number}`]: string[]; [x: `process.parent.target.target.target.parent.target.target.parent.args.${number}`]: string[]; [x: `process.parent.target.target.target.parent.target.parent.elf.exports.${number}`]: string[]; [x: `process.parent.target.target.target.parent.target.parent.elf.imports.${number}`]: string[]; [x: `process.parent.target.target.target.parent.target.parent.elf.sections.${number}`]: string[]; [x: `process.parent.target.target.target.parent.target.parent.elf.segments.${number}`]: string[]; [x: `process.parent.target.target.target.parent.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.target.target.parent.target.parent.target.args.${number}`]: string[]; [x: `process.parent.target.target.target.parent.target.parent.parent.args.${number}`]: string[]; [x: `process.parent.target.target.target.parent.parent.target.elf.exports.${number}`]: string[]; [x: `process.parent.target.target.target.parent.parent.target.elf.imports.${number}`]: string[]; [x: `process.parent.target.target.target.parent.parent.target.elf.sections.${number}`]: string[]; [x: `process.parent.target.target.target.parent.parent.target.elf.segments.${number}`]: string[]; [x: `process.parent.target.target.target.parent.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.target.target.parent.parent.target.target.args.${number}`]: string[]; [x: `process.parent.target.target.target.parent.parent.target.parent.args.${number}`]: string[]; [x: `process.parent.target.target.target.parent.parent.parent.elf.exports.${number}`]: string[]; [x: `process.parent.target.target.target.parent.parent.parent.elf.imports.${number}`]: string[]; [x: `process.parent.target.target.target.parent.parent.parent.elf.sections.${number}`]: string[]; [x: `process.parent.target.target.target.parent.parent.parent.elf.segments.${number}`]: string[]; [x: `process.parent.target.target.target.parent.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.target.target.parent.parent.parent.target.args.${number}`]: string[]; [x: `process.parent.target.target.target.parent.parent.parent.parent.args.${number}`]: string[]; [x: `process.parent.target.target.parent.target.target.target.elf.exports.${number}`]: string[]; [x: `process.parent.target.target.parent.target.target.target.elf.imports.${number}`]: string[]; [x: `process.parent.target.target.parent.target.target.target.elf.sections.${number}`]: string[]; [x: `process.parent.target.target.parent.target.target.target.elf.segments.${number}`]: string[]; [x: `process.parent.target.target.parent.target.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.target.parent.target.target.target.target.args.${number}`]: string[]; [x: `process.parent.target.target.parent.target.target.target.parent.args.${number}`]: string[]; [x: `process.parent.target.target.parent.target.target.parent.elf.exports.${number}`]: string[]; [x: `process.parent.target.target.parent.target.target.parent.elf.imports.${number}`]: string[]; [x: `process.parent.target.target.parent.target.target.parent.elf.sections.${number}`]: string[]; [x: `process.parent.target.target.parent.target.target.parent.elf.segments.${number}`]: string[]; [x: `process.parent.target.target.parent.target.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.target.parent.target.target.parent.target.args.${number}`]: string[]; [x: `process.parent.target.target.parent.target.target.parent.parent.args.${number}`]: string[]; [x: `process.parent.target.target.parent.target.parent.target.elf.exports.${number}`]: string[]; [x: `process.parent.target.target.parent.target.parent.target.elf.imports.${number}`]: string[]; [x: `process.parent.target.target.parent.target.parent.target.elf.sections.${number}`]: string[]; [x: `process.parent.target.target.parent.target.parent.target.elf.segments.${number}`]: string[]; [x: `process.parent.target.target.parent.target.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.target.parent.target.parent.target.target.args.${number}`]: string[]; [x: `process.parent.target.target.parent.target.parent.target.parent.args.${number}`]: string[]; [x: `process.parent.target.target.parent.target.parent.parent.elf.exports.${number}`]: string[]; [x: `process.parent.target.target.parent.target.parent.parent.elf.imports.${number}`]: string[]; [x: `process.parent.target.target.parent.target.parent.parent.elf.sections.${number}`]: string[]; [x: `process.parent.target.target.parent.target.parent.parent.elf.segments.${number}`]: string[]; [x: `process.parent.target.target.parent.target.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.target.parent.target.parent.parent.target.args.${number}`]: string[]; [x: `process.parent.target.target.parent.target.parent.parent.parent.args.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.target.target.elf.exports.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.target.target.elf.imports.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.target.target.elf.sections.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.target.target.elf.segments.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.target.target.target.args.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.target.target.parent.args.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.target.parent.elf.exports.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.target.parent.elf.imports.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.target.parent.elf.sections.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.target.parent.elf.segments.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.target.parent.target.args.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.target.parent.parent.args.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.parent.target.elf.exports.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.parent.target.elf.imports.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.parent.target.elf.sections.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.parent.target.elf.segments.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.parent.target.target.args.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.parent.target.parent.args.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.parent.parent.elf.exports.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.parent.parent.elf.imports.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.parent.parent.elf.sections.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.parent.parent.elf.segments.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.parent.parent.target.args.${number}`]: string[]; [x: `process.parent.target.target.parent.parent.parent.parent.parent.args.${number}`]: string[]; [x: `process.parent.target.parent.target.target.target.target.elf.exports.${number}`]: string[]; [x: `process.parent.target.parent.target.target.target.target.elf.imports.${number}`]: string[]; [x: `process.parent.target.parent.target.target.target.target.elf.sections.${number}`]: string[]; [x: `process.parent.target.parent.target.target.target.target.elf.segments.${number}`]: string[]; [x: `process.parent.target.parent.target.target.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.parent.target.target.target.target.target.args.${number}`]: string[]; [x: `process.parent.target.parent.target.target.target.target.parent.args.${number}`]: string[]; [x: `process.parent.target.parent.target.target.target.parent.elf.exports.${number}`]: string[]; [x: `process.parent.target.parent.target.target.target.parent.elf.imports.${number}`]: string[]; [x: `process.parent.target.parent.target.target.target.parent.elf.sections.${number}`]: string[]; [x: `process.parent.target.parent.target.target.target.parent.elf.segments.${number}`]: string[]; [x: `process.parent.target.parent.target.target.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.parent.target.target.target.parent.target.args.${number}`]: string[]; [x: `process.parent.target.parent.target.target.target.parent.parent.args.${number}`]: string[]; [x: `process.parent.target.parent.target.target.parent.target.elf.exports.${number}`]: string[]; [x: `process.parent.target.parent.target.target.parent.target.elf.imports.${number}`]: string[]; [x: `process.parent.target.parent.target.target.parent.target.elf.sections.${number}`]: string[]; [x: `process.parent.target.parent.target.target.parent.target.elf.segments.${number}`]: string[]; [x: `process.parent.target.parent.target.target.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.parent.target.target.parent.target.target.args.${number}`]: string[]; [x: `process.parent.target.parent.target.target.parent.target.parent.args.${number}`]: string[]; [x: `process.parent.target.parent.target.target.parent.parent.elf.exports.${number}`]: string[]; [x: `process.parent.target.parent.target.target.parent.parent.elf.imports.${number}`]: string[]; [x: `process.parent.target.parent.target.target.parent.parent.elf.sections.${number}`]: string[]; [x: `process.parent.target.parent.target.target.parent.parent.elf.segments.${number}`]: string[]; [x: `process.parent.target.parent.target.target.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.parent.target.target.parent.parent.target.args.${number}`]: string[]; [x: `process.parent.target.parent.target.target.parent.parent.parent.args.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.target.target.elf.exports.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.target.target.elf.imports.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.target.target.elf.sections.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.target.target.elf.segments.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.target.target.target.args.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.target.target.parent.args.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.target.parent.elf.exports.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.target.parent.elf.imports.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.target.parent.elf.sections.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.target.parent.elf.segments.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.target.parent.target.args.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.target.parent.parent.args.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.parent.target.elf.exports.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.parent.target.elf.imports.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.parent.target.elf.sections.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.parent.target.elf.segments.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.parent.target.target.args.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.parent.target.parent.args.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.parent.parent.elf.exports.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.parent.parent.elf.imports.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.parent.parent.elf.sections.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.parent.parent.elf.segments.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.parent.parent.target.args.${number}`]: string[]; [x: `process.parent.target.parent.target.parent.parent.parent.parent.args.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.target.target.elf.exports.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.target.target.elf.imports.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.target.target.elf.sections.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.target.target.elf.segments.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.target.target.target.args.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.target.target.parent.args.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.target.parent.elf.exports.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.target.parent.elf.imports.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.target.parent.elf.sections.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.target.parent.elf.segments.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.target.parent.target.args.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.target.parent.parent.args.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.parent.target.elf.exports.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.parent.target.elf.imports.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.parent.target.elf.sections.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.parent.target.elf.segments.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.parent.target.target.args.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.parent.target.parent.args.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.parent.parent.elf.exports.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.parent.parent.elf.imports.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.parent.parent.elf.sections.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.parent.parent.elf.segments.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.parent.parent.target.args.${number}`]: string[]; [x: `process.parent.target.parent.parent.target.parent.parent.parent.args.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.target.target.elf.exports.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.target.target.elf.imports.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.target.target.elf.sections.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.target.target.elf.segments.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.target.target.target.args.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.target.target.parent.args.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.target.parent.elf.exports.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.target.parent.elf.imports.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.target.parent.elf.sections.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.target.parent.elf.segments.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.target.parent.target.args.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.target.parent.parent.args.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.parent.target.elf.exports.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.parent.target.elf.imports.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.parent.target.elf.sections.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.parent.target.elf.segments.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.parent.target.target.args.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.parent.target.parent.args.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.parent.parent.elf.exports.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.parent.parent.elf.imports.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.parent.parent.elf.sections.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.parent.parent.elf.segments.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.parent.parent.target.args.${number}`]: string[]; [x: `process.parent.target.parent.parent.parent.parent.parent.parent.args.${number}`]: string[]; [x: `process.parent.parent.target.target.target.target.target.elf.exports.${number}`]: string[]; [x: `process.parent.parent.target.target.target.target.target.elf.imports.${number}`]: string[]; [x: `process.parent.parent.target.target.target.target.target.elf.sections.${number}`]: string[]; [x: `process.parent.parent.target.target.target.target.target.elf.segments.${number}`]: string[]; [x: `process.parent.parent.target.target.target.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.target.target.target.target.target.target.args.${number}`]: string[]; [x: `process.parent.parent.target.target.target.target.target.parent.args.${number}`]: string[]; [x: `process.parent.parent.target.target.target.target.parent.elf.exports.${number}`]: string[]; [x: `process.parent.parent.target.target.target.target.parent.elf.imports.${number}`]: string[]; [x: `process.parent.parent.target.target.target.target.parent.elf.sections.${number}`]: string[]; [x: `process.parent.parent.target.target.target.target.parent.elf.segments.${number}`]: string[]; [x: `process.parent.parent.target.target.target.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.target.target.target.target.parent.target.args.${number}`]: string[]; [x: `process.parent.parent.target.target.target.target.parent.parent.args.${number}`]: string[]; [x: `process.parent.parent.target.target.target.parent.target.elf.exports.${number}`]: string[]; [x: `process.parent.parent.target.target.target.parent.target.elf.imports.${number}`]: string[]; [x: `process.parent.parent.target.target.target.parent.target.elf.sections.${number}`]: string[]; [x: `process.parent.parent.target.target.target.parent.target.elf.segments.${number}`]: string[]; [x: `process.parent.parent.target.target.target.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.target.target.target.parent.target.target.args.${number}`]: string[]; [x: `process.parent.parent.target.target.target.parent.target.parent.args.${number}`]: string[]; [x: `process.parent.parent.target.target.target.parent.parent.elf.exports.${number}`]: string[]; [x: `process.parent.parent.target.target.target.parent.parent.elf.imports.${number}`]: string[]; [x: `process.parent.parent.target.target.target.parent.parent.elf.sections.${number}`]: string[]; [x: `process.parent.parent.target.target.target.parent.parent.elf.segments.${number}`]: string[]; [x: `process.parent.parent.target.target.target.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.target.target.target.parent.parent.target.args.${number}`]: string[]; [x: `process.parent.parent.target.target.target.parent.parent.parent.args.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.target.target.elf.exports.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.target.target.elf.imports.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.target.target.elf.sections.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.target.target.elf.segments.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.target.target.target.args.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.target.target.parent.args.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.target.parent.elf.exports.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.target.parent.elf.imports.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.target.parent.elf.sections.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.target.parent.elf.segments.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.target.parent.target.args.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.target.parent.parent.args.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.parent.target.elf.exports.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.parent.target.elf.imports.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.parent.target.elf.sections.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.parent.target.elf.segments.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.parent.target.target.args.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.parent.target.parent.args.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.parent.parent.elf.exports.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.parent.parent.elf.imports.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.parent.parent.elf.sections.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.parent.parent.elf.segments.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.parent.parent.target.args.${number}`]: string[]; [x: `process.parent.parent.target.target.parent.parent.parent.parent.args.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.target.target.elf.exports.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.target.target.elf.imports.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.target.target.elf.sections.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.target.target.elf.segments.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.target.target.target.args.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.target.target.parent.args.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.target.parent.elf.exports.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.target.parent.elf.imports.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.target.parent.elf.sections.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.target.parent.elf.segments.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.target.parent.target.args.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.target.parent.parent.args.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.parent.target.elf.exports.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.parent.target.elf.imports.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.parent.target.elf.sections.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.parent.target.elf.segments.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.parent.target.target.args.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.parent.target.parent.args.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.parent.parent.elf.exports.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.parent.parent.elf.imports.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.parent.parent.elf.sections.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.parent.parent.elf.segments.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.parent.parent.target.args.${number}`]: string[]; [x: `process.parent.parent.target.parent.target.parent.parent.parent.args.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.target.target.elf.exports.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.target.target.elf.imports.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.target.target.elf.sections.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.target.target.elf.segments.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.target.target.target.args.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.target.target.parent.args.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.target.parent.elf.exports.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.target.parent.elf.imports.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.target.parent.elf.sections.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.target.parent.elf.segments.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.target.parent.target.args.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.target.parent.parent.args.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.parent.target.elf.exports.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.parent.target.elf.imports.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.parent.target.elf.sections.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.parent.target.elf.segments.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.parent.target.target.args.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.parent.target.parent.args.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.parent.parent.elf.exports.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.parent.parent.elf.imports.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.parent.parent.elf.sections.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.parent.parent.elf.segments.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.parent.parent.target.args.${number}`]: string[]; [x: `process.parent.parent.target.parent.parent.parent.parent.parent.args.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.target.target.elf.exports.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.target.target.elf.imports.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.target.target.elf.sections.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.target.target.elf.segments.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.target.target.target.args.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.target.target.parent.args.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.target.parent.elf.exports.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.target.parent.elf.imports.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.target.parent.elf.sections.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.target.parent.elf.segments.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.target.parent.target.args.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.target.parent.parent.args.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.parent.target.elf.exports.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.parent.target.elf.imports.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.parent.target.elf.sections.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.parent.target.elf.segments.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.parent.target.target.args.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.parent.target.parent.args.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.parent.parent.elf.exports.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.parent.parent.elf.imports.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.parent.parent.elf.sections.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.parent.parent.elf.segments.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.parent.parent.target.args.${number}`]: string[]; [x: `process.parent.parent.parent.target.target.parent.parent.parent.args.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.target.target.elf.exports.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.target.target.elf.imports.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.target.target.elf.sections.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.target.target.elf.segments.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.target.target.target.args.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.target.target.parent.args.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.target.parent.elf.exports.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.target.parent.elf.imports.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.target.parent.elf.sections.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.target.parent.elf.segments.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.target.parent.target.args.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.target.parent.parent.args.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.parent.target.elf.exports.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.parent.target.elf.imports.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.parent.target.elf.sections.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.parent.target.elf.segments.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.parent.target.target.args.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.parent.target.parent.args.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.parent.parent.elf.exports.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.parent.parent.elf.imports.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.parent.parent.elf.sections.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.parent.parent.elf.segments.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.parent.parent.target.args.${number}`]: string[]; [x: `process.parent.parent.parent.target.parent.parent.parent.parent.args.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.target.target.elf.exports.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.target.target.elf.imports.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.target.target.elf.sections.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.target.target.elf.segments.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.target.target.target.args.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.target.target.parent.args.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.target.parent.elf.exports.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.target.parent.elf.imports.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.target.parent.elf.sections.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.target.parent.elf.segments.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.target.parent.target.args.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.target.parent.parent.args.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.parent.target.elf.exports.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.parent.target.elf.imports.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.parent.target.elf.sections.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.parent.target.elf.segments.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.parent.target.target.args.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.parent.target.parent.args.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.parent.parent.elf.exports.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.parent.parent.elf.imports.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.parent.parent.elf.sections.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.parent.parent.elf.segments.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.parent.parent.target.args.${number}`]: string[]; [x: `process.parent.parent.parent.parent.target.parent.parent.parent.args.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.target.target.elf.exports.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.target.target.elf.imports.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.target.target.elf.sections.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.target.target.elf.segments.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.target.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.target.target.target.args.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.target.target.parent.args.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.target.parent.elf.exports.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.target.parent.elf.imports.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.target.parent.elf.sections.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.target.parent.elf.segments.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.target.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.target.parent.target.args.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.target.parent.parent.args.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.parent.target.elf.exports.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.parent.target.elf.imports.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.parent.target.elf.sections.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.parent.target.elf.segments.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.parent.target.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.parent.target.target.args.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.parent.target.parent.args.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.parent.parent.elf.exports.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.parent.parent.elf.imports.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.parent.parent.elf.sections.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.parent.parent.elf.segments.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.parent.parent.elf.shared_libraries.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.parent.parent.target.args.${number}`]: string[]; [x: `process.parent.parent.parent.parent.parent.parent.parent.parent.args.${number}`]: string[]; [x: `related.ip.${number}`]: string[]; [x: `related.user.${number}`]: string[]; [x: `related.hash.${number}`]: string[]; [x: `related.hosts.${number}`]: string[]; [x: `threat.group.alias.${number}`]: string[]; [x: `threat.indicator.x509.issuer.organization.${number}`]: string[]; [x: `threat.indicator.x509.issuer.common_name.${number}`]: string[]; [x: `threat.indicator.x509.issuer.country.${number}`]: string[]; [x: `threat.indicator.x509.issuer.locality.${number}`]: string[]; [x: `threat.indicator.x509.issuer.organizational_unit.${number}`]: string[]; [x: `threat.indicator.x509.issuer.state_or_province.${number}`]: string[]; [x: `threat.indicator.x509.subject.organization.${number}`]: string[]; [x: `threat.indicator.x509.subject.common_name.${number}`]: string[]; [x: `threat.indicator.x509.subject.country.${number}`]: string[]; [x: `threat.indicator.x509.subject.locality.${number}`]: string[]; [x: `threat.indicator.x509.subject.organizational_unit.${number}`]: string[]; [x: `threat.indicator.x509.subject.state_or_province.${number}`]: string[]; [x: `threat.indicator.x509.alternative_names.${number}`]: string[]; [x: `threat.indicator.file.attributes.${number}`]: string[]; [x: `threat.indicator.file.elf.exports.${number}`]: string[]; [x: `threat.indicator.file.elf.imports.${number}`]: string[]; [x: `threat.indicator.file.elf.sections.${number}`]: string[]; [x: `threat.indicator.file.elf.segments.${number}`]: string[]; [x: `threat.indicator.file.elf.shared_libraries.${number}`]: string[]; [x: `threat.indicator.file.x509.issuer.organization.${number}`]: string[]; [x: `threat.indicator.file.x509.issuer.common_name.${number}`]: string[]; [x: `threat.indicator.file.x509.issuer.country.${number}`]: string[]; [x: `threat.indicator.file.x509.issuer.locality.${number}`]: string[]; [x: `threat.indicator.file.x509.issuer.organizational_unit.${number}`]: string[]; [x: `threat.indicator.file.x509.issuer.state_or_province.${number}`]: string[]; [x: `threat.indicator.file.x509.subject.organization.${number}`]: string[]; [x: `threat.indicator.file.x509.subject.common_name.${number}`]: string[]; [x: `threat.indicator.file.x509.subject.country.${number}`]: string[]; [x: `threat.indicator.file.x509.subject.locality.${number}`]: string[]; [x: `threat.indicator.file.x509.subject.organizational_unit.${number}`]: string[]; [x: `threat.indicator.file.x509.subject.state_or_province.${number}`]: string[]; [x: `threat.indicator.file.x509.alternative_names.${number}`]: string[]; [x: `threat.indicator.registry.data.strings.${number}`]: string[]; [x: `threat.enrichments.${number}`]: string[]; [x: `threat.enrichments.${number}.indicator.x509.issuer.organization.${number}`]: string[]; [x: `threat.enrichments.${number}.indicator.x509.issuer.common_name.${number}`]: string[]; [x: `threat.enrichments.${number}.indicator.x509.issuer.country.${number}`]: string[]; [x: `threat.enrichments.${number}.indicator.x509.issuer.locality.${number}`]: string[]; [x: `threat.enrichments.${number}.indicator.x509.issuer.organizational_unit.${number}`]: string[]; [x: `threat.enrichments.${number}.indicator.x509.issuer.state_or_province.${number}`]: string[]; [x: `threat.enrichments.${number}.indicator.x509.subject.organization.${number}`]: string[]; [x: `threat.enrichments.${number}.indicator.x509.subject.common_name.${number}`]: string[]; [x: `threat.enrichments.${number}.indicator.x509.subject.country.${number}`]: string[]; [x: `threat.enrichments.${number}.indicator.x509.subject.locality.${number}`]: string[]; [x: `threat.enrichments.${number}.indicator.x509.subject.organizational_unit.${number}`]: string[]; [x: `threat.enrichments.${number}.indicator.x509.subject.state_or_province.${number}`]: string[]; [x: `threat.enrichments.${number}.indicator.x509.alternative_names.${number}`]: string[]; [x: `threat.enrichments.${number}.indicator.file.attributes.${number}`]: string[]; [x: `threat.enrichments.${number}.indicator.file.elf.exports.${number}`]: string[]; [x: `threat.enrichments.${number}.indicator.file.elf.imports.${number}`]: string[]; [x: `threat.enrichments.${number}.indicator.file.elf.sections.${number}`]: string[]; [x: `threat.enrichments.${number}.indicator.file.elf.segments.${number}`]: string[]; [x: `threat.enrichments.${number}.indicator.file.elf.shared_libraries.${number}`]: string[]; [x: `threat.enrichments.${number}.indicator.file.x509.issuer.organization.${number}`]: string[]; [x: `threat.enrichments.${number}.indicator.file.x509.issuer.common_name.${number}`]: string[]; [x: `threat.enrichments.${number}.indicator.file.x509.issuer.country.${number}`]: string[]; [x: `threat.enrichments.${number}.indicator.file.x509.issuer.locality.${number}`]: string[]; [x: `threat.enrichments.${number}.indicator.file.x509.issuer.organizational_unit.${number}`]: string[]; [x: `threat.enrichments.${number}.indicator.file.x509.issuer.state_or_province.${number}`]: string[]; [x: `threat.enrichments.${number}.indicator.file.x509.subject.organization.${number}`]: string[]; [x: `threat.enrichments.${number}.indicator.file.x509.subject.common_name.${number}`]: string[]; [x: `threat.enrichments.${number}.indicator.file.x509.subject.country.${number}`]: string[]; [x: `threat.enrichments.${number}.indicator.file.x509.subject.locality.${number}`]: string[]; [x: `threat.enrichments.${number}.indicator.file.x509.subject.organizational_unit.${number}`]: string[]; [x: `threat.enrichments.${number}.indicator.file.x509.subject.state_or_province.${number}`]: string[]; [x: `threat.enrichments.${number}.indicator.file.x509.alternative_names.${number}`]: string[]; [x: `threat.enrichments.${number}.indicator.registry.data.strings.${number}`]: string[]; [x: `threat.software.platforms.${number}`]: string[]; [x: `threat.tactic.id.${number}`]: string[]; [x: `threat.tactic.name.${number}`]: string[]; [x: `threat.tactic.reference.${number}`]: string[]; [x: `threat.technique.id.${number}`]: string[]; [x: `threat.technique.name.${number}`]: string[]; [x: `threat.technique.reference.${number}`]: string[]; [x: `threat.technique.subtechnique.id.${number}`]: string[]; [x: `threat.technique.subtechnique.name.${number}`]: string[]; [x: `threat.technique.subtechnique.reference.${number}`]: string[]; [x: `threat.technique.subtechnique.subtechnique.id.${number}`]: string[]; [x: `threat.technique.subtechnique.subtechnique.name.${number}`]: string[]; [x: `threat.technique.subtechnique.subtechnique.reference.${number}`]: string[]; [x: `threat.technique.subtechnique.subtechnique.subtechnique.id.${number}`]: string[]; [x: `threat.technique.subtechnique.subtechnique.subtechnique.name.${number}`]: string[]; [x: `threat.technique.subtechnique.subtechnique.subtechnique.reference.${number}`]: string[]; [x: `threat.technique.subtechnique.subtechnique.subtechnique.subtechnique.id.${number}`]: string[]; [x: `threat.technique.subtechnique.subtechnique.subtechnique.subtechnique.name.${number}`]: string[]; [x: `threat.technique.subtechnique.subtechnique.subtechnique.subtechnique.reference.${number}`]: string[]; [x: `threat.technique.subtechnique.subtechnique.subtechnique.subtechnique.subtechnique.id.${number}`]: string[]; [x: `threat.technique.subtechnique.subtechnique.subtechnique.subtechnique.subtechnique.name.${number}`]: string[]; [x: `threat.technique.subtechnique.subtechnique.subtechnique.subtechnique.subtechnique.reference.${number}`]: string[]; [x: `threat.technique.subtechnique.subtechnique.subtechnique.subtechnique.subtechnique.subtechnique.id.${number}`]: string[]; [x: `threat.technique.subtechnique.subtechnique.subtechnique.subtechnique.subtechnique.subtechnique.name.${number}`]: string[]; [x: `threat.technique.subtechnique.subtechnique.subtechnique.subtechnique.subtechnique.subtechnique.reference.${number}`]: string[]; [x: `threat.technique.subtechnique.subtechnique.subtechnique.subtechnique.subtechnique.subtechnique.subtechnique.id.${number}`]: string[]; [x: `threat.technique.subtechnique.subtechnique.subtechnique.subtechnique.subtechnique.subtechnique.subtechnique.name.${number}`]: string[]; [x: `threat.technique.subtechnique.subtechnique.subtechnique.subtechnique.subtechnique.subtechnique.subtechnique.reference.${number}`]: string[]; [x: `tls.client.x509.issuer.organization.${number}`]: string[]; [x: `tls.client.x509.issuer.common_name.${number}`]: string[]; [x: `tls.client.x509.issuer.country.${number}`]: string[]; [x: `tls.client.x509.issuer.locality.${number}`]: string[]; [x: `tls.client.x509.issuer.organizational_unit.${number}`]: string[]; [x: `tls.client.x509.issuer.state_or_province.${number}`]: string[]; [x: `tls.client.x509.subject.organization.${number}`]: string[]; [x: `tls.client.x509.subject.common_name.${number}`]: string[]; [x: `tls.client.x509.subject.country.${number}`]: string[]; [x: `tls.client.x509.subject.locality.${number}`]: string[]; [x: `tls.client.x509.subject.organizational_unit.${number}`]: string[]; [x: `tls.client.x509.subject.state_or_province.${number}`]: string[]; [x: `tls.client.x509.alternative_names.${number}`]: string[]; [x: `tls.client.certificate_chain.${number}`]: string[]; [x: `tls.client.supported_ciphers.${number}`]: string[]; [x: `tls.server.x509.issuer.organization.${number}`]: string[]; [x: `tls.server.x509.issuer.common_name.${number}`]: string[]; [x: `tls.server.x509.issuer.country.${number}`]: string[]; [x: `tls.server.x509.issuer.locality.${number}`]: string[]; [x: `tls.server.x509.issuer.organizational_unit.${number}`]: string[]; [x: `tls.server.x509.issuer.state_or_province.${number}`]: string[]; [x: `tls.server.x509.subject.organization.${number}`]: string[]; [x: `tls.server.x509.subject.common_name.${number}`]: string[]; [x: `tls.server.x509.subject.country.${number}`]: string[]; [x: `tls.server.x509.subject.locality.${number}`]: string[]; [x: `tls.server.x509.subject.organizational_unit.${number}`]: string[]; [x: `tls.server.x509.subject.state_or_province.${number}`]: string[]; [x: `tls.server.x509.alternative_names.${number}`]: string[]; [x: `tls.server.certificate_chain.${number}`]: string[]; [x: `vulnerability.category.${number}`]: string[]; } & ", + "BasicFields", + " & { tags?: string[] | undefined; kibana?: string[] | undefined; \"@timestamp\"?: string[] | undefined; \"event.action\"?: string[] | undefined; \"kibana.alert.rule.parameters\"?: string[] | undefined; \"kibana.alert.rule.rule_type_id\"?: string[] | undefined; \"kibana.alert.rule.consumer\"?: string[] | undefined; \"kibana.alert.rule.producer\"?: string[] | undefined; \"kibana.space_ids\"?: string[] | undefined; \"kibana.alert.uuid\"?: string[] | undefined; \"kibana.alert.instance.id\"?: string[] | undefined; \"kibana.alert.start\"?: string[] | undefined; \"kibana.alert.end\"?: string[] | undefined; \"kibana.alert.duration.us\"?: string[] | undefined; \"kibana.alert.severity\"?: string[] | undefined; \"kibana.alert.status\"?: string[] | undefined; \"kibana.version\"?: string[] | undefined; \"ecs.version\"?: string[] | undefined; \"kibana.alert.risk_score\"?: string[] | undefined; \"kibana.alert.workflow_status\"?: string[] | undefined; \"kibana.alert.workflow_user\"?: string[] | undefined; \"kibana.alert.workflow_reason\"?: string[] | undefined; \"kibana.alert.system_status\"?: string[] | undefined; \"kibana.alert.action_group\"?: string[] | undefined; \"kibana.alert.reason\"?: string[] | undefined; \"kibana.alert.rule.author\"?: string[] | undefined; \"kibana.alert.rule.category\"?: string[] | undefined; \"kibana.alert.rule.uuid\"?: string[] | undefined; \"kibana.alert.rule.created_at\"?: string[] | undefined; \"kibana.alert.rule.created_by\"?: string[] | undefined; \"kibana.alert.rule.description\"?: string[] | undefined; \"kibana.alert.rule.enabled\"?: string[] | undefined; \"kibana.alert.rule.execution.uuid\"?: string[] | undefined; \"kibana.alert.rule.from\"?: string[] | undefined; \"kibana.alert.rule.interval\"?: string[] | undefined; \"kibana.alert.rule.license\"?: string[] | undefined; \"kibana.alert.rule.name\"?: string[] | undefined; \"kibana.alert.rule.note\"?: string[] | undefined; \"kibana.alert.rule.references\"?: string[] | undefined; \"kibana.alert.rule.rule_id\"?: string[] | undefined; \"kibana.alert.rule.rule_name_override\"?: string[] | undefined; \"kibana.alert.rule.tags\"?: string[] | undefined; \"kibana.alert.rule.to\"?: string[] | undefined; \"kibana.alert.rule.type\"?: string[] | undefined; \"kibana.alert.rule.updated_at\"?: string[] | undefined; \"kibana.alert.rule.updated_by\"?: string[] | undefined; \"kibana.alert.rule.version\"?: string[] | undefined; \"event.kind\"?: string[] | undefined; \"event.module\"?: string[] | undefined; \"kibana.alert.evaluation.threshold\"?: string[] | undefined; \"kibana.alert.evaluation.value\"?: string[] | undefined; \"kibana.alert.building_block_type\"?: string[] | undefined; \"kibana.alert.rule.exceptions_list\"?: string[] | undefined; \"kibana.alert.rule.namespace\"?: string[] | undefined; \"kibana.alert\"?: string[] | undefined; \"kibana.alert.rule\"?: string[] | undefined; }" ], "path": "x-pack/plugins/triggers_actions_ui/public/types.ts", "deprecated": false @@ -1952,25 +1999,6 @@ "path": "x-pack/plugins/triggers_actions_ui/public/types.ts", "deprecated": false }, - { - "parentPluginId": "triggersActionsUi", - "id": "def-public.AlertsTableProps.bulkActions", - "type": "Object", - "tags": [], - "label": "bulkActions", - "description": [], - "signature": [ - { - "pluginId": "triggersActionsUi", - "scope": "public", - "docId": "kibTriggersActionsUiPluginApi", - "section": "def-public.BulkActionsObjectProp", - "text": "BulkActionsObjectProp" - } - ], - "path": "x-pack/plugins/triggers_actions_ui/public/types.ts", - "deprecated": false - }, { "parentPluginId": "triggersActionsUi", "id": "def-public.AlertsTableProps.deletedEventIds", @@ -2047,16 +2075,6 @@ "path": "x-pack/plugins/triggers_actions_ui/public/types.ts", "deprecated": false }, - { - "parentPluginId": "triggersActionsUi", - "id": "def-public.AlertsTableProps.showCheckboxes", - "type": "boolean", - "tags": [], - "label": "showCheckboxes", - "description": [], - "path": "x-pack/plugins/triggers_actions_ui/public/types.ts", - "deprecated": false - }, { "parentPluginId": "triggersActionsUi", "id": "def-public.AlertsTableProps.showExpandToDetails", @@ -2396,58 +2414,6 @@ ], "initialIsOpen": false }, - { - "parentPluginId": "triggersActionsUi", - "id": "def-public.BulkActionsObjectProp", - "type": "Interface", - "tags": [], - "label": "BulkActionsObjectProp", - "description": [], - "path": "x-pack/plugins/triggers_actions_ui/public/types.ts", - "deprecated": false, - "children": [ - { - "parentPluginId": "triggersActionsUi", - "id": "def-public.BulkActionsObjectProp.alertStatusActions", - "type": "CompoundType", - "tags": [], - "label": "alertStatusActions", - "description": [], - "signature": [ - "boolean | undefined" - ], - "path": "x-pack/plugins/triggers_actions_ui/public/types.ts", - "deprecated": false - }, - { - "parentPluginId": "triggersActionsUi", - "id": "def-public.BulkActionsObjectProp.onAlertStatusActionSuccess", - "type": "Uncategorized", - "tags": [], - "label": "onAlertStatusActionSuccess", - "description": [], - "signature": [ - "void | undefined" - ], - "path": "x-pack/plugins/triggers_actions_ui/public/types.ts", - "deprecated": false - }, - { - "parentPluginId": "triggersActionsUi", - "id": "def-public.BulkActionsObjectProp.onAlertStatusActionFailure", - "type": "Uncategorized", - "tags": [], - "label": "onAlertStatusActionFailure", - "description": [], - "signature": [ - "void | undefined" - ], - "path": "x-pack/plugins/triggers_actions_ui/public/types.ts", - "deprecated": false - } - ], - "initialIsOpen": false - }, { "parentPluginId": "triggersActionsUi", "id": "def-public.Comparator", @@ -4436,8 +4402,8 @@ "pluginId": "alerting", "scope": "common", "docId": "kibAlertingPluginApi", - "section": "def-common.IExecutionLogWithErrorsResult", - "text": "IExecutionLogWithErrorsResult" + "section": "def-common.IExecutionLogResult", + "text": "IExecutionLogResult" }, ">) | undefined; } & Pick<", "ComponentOpts", diff --git a/api_docs/triggers_actions_ui.mdx b/api_docs/triggers_actions_ui.mdx index e5b8b3b89a473..ab9062aef1710 100644 --- a/api_docs/triggers_actions_ui.mdx +++ b/api_docs/triggers_actions_ui.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/triggersActionsUi title: "triggersActionsUi" image: https://source.unsplash.com/400x175/?github summary: API docs for the triggersActionsUi plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'triggersActionsUi'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- @@ -18,7 +18,7 @@ Contact [Response Ops](https://github.com/orgs/elastic/teams/response-ops) for q | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 424 | 0 | 403 | 41 | +| 420 | 0 | 399 | 42 | ## Client diff --git a/api_docs/ui_actions.mdx b/api_docs/ui_actions.mdx index 810bf7786a23c..31775949773ac 100644 --- a/api_docs/ui_actions.mdx +++ b/api_docs/ui_actions.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/uiActions title: "uiActions" image: https://source.unsplash.com/400x175/?github summary: API docs for the uiActions plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uiActions'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/ui_actions_enhanced.mdx b/api_docs/ui_actions_enhanced.mdx index 5e06184da804a..32387f565d3b4 100644 --- a/api_docs/ui_actions_enhanced.mdx +++ b/api_docs/ui_actions_enhanced.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/uiActionsEnhanced title: "uiActionsEnhanced" image: https://source.unsplash.com/400x175/?github summary: API docs for the uiActionsEnhanced plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uiActionsEnhanced'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/unified_search.mdx b/api_docs/unified_search.mdx index fe1c1e34d9084..9a63519fa57cb 100644 --- a/api_docs/unified_search.mdx +++ b/api_docs/unified_search.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/unifiedSearch title: "unifiedSearch" image: https://source.unsplash.com/400x175/?github summary: API docs for the unifiedSearch plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedSearch'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/unified_search_autocomplete.mdx b/api_docs/unified_search_autocomplete.mdx index 09913e9f81170..5070d9de44d78 100644 --- a/api_docs/unified_search_autocomplete.mdx +++ b/api_docs/unified_search_autocomplete.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/unifiedSearch-autocomplete title: "unifiedSearch.autocomplete" image: https://source.unsplash.com/400x175/?github summary: API docs for the unifiedSearch.autocomplete plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedSearch.autocomplete'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/url_forwarding.mdx b/api_docs/url_forwarding.mdx index bba044756a3e5..e81d0d6ff12f6 100644 --- a/api_docs/url_forwarding.mdx +++ b/api_docs/url_forwarding.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/urlForwarding title: "urlForwarding" image: https://source.unsplash.com/400x175/?github summary: API docs for the urlForwarding plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'urlForwarding'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/usage_collection.devdocs.json b/api_docs/usage_collection.devdocs.json index 15be4b7419387..f0311a525f3f4 100644 --- a/api_docs/usage_collection.devdocs.json +++ b/api_docs/usage_collection.devdocs.json @@ -360,7 +360,9 @@ "TransportRequestOptions", " | undefined): Promise<", "SearchResponse", - ">; }; eql: ", + ">; }; cluster: ", + "default", + "; eql: ", "default", "; create: { (this: That, params: ", "CreateRequest", @@ -592,9 +594,7 @@ "TransportRequestOptions", " | undefined): Promise<", "ClearScrollResponse", - ">; }; cluster: ", - "default", - "; count: { (this: That, params?: ", + ">; }; count: { (this: That, params?: ", "CountRequest", " | ", "CountRequest", diff --git a/api_docs/usage_collection.mdx b/api_docs/usage_collection.mdx index 8b5951511ec66..e2b8b431277b2 100644 --- a/api_docs/usage_collection.mdx +++ b/api_docs/usage_collection.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/usageCollection title: "usageCollection" image: https://source.unsplash.com/400x175/?github summary: API docs for the usageCollection plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'usageCollection'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/ux.mdx b/api_docs/ux.mdx index 19591e87ac33b..41f8f07ec0bb0 100644 --- a/api_docs/ux.mdx +++ b/api_docs/ux.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/ux title: "ux" image: https://source.unsplash.com/400x175/?github summary: API docs for the ux plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ux'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/vis_default_editor.mdx b/api_docs/vis_default_editor.mdx index c4589d09ebe34..f32881a729064 100644 --- a/api_docs/vis_default_editor.mdx +++ b/api_docs/vis_default_editor.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/visDefaultEditor title: "visDefaultEditor" image: https://source.unsplash.com/400x175/?github summary: API docs for the visDefaultEditor plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visDefaultEditor'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/vis_type_gauge.mdx b/api_docs/vis_type_gauge.mdx index 03dc8680146f9..f4138181c2392 100644 --- a/api_docs/vis_type_gauge.mdx +++ b/api_docs/vis_type_gauge.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/visTypeGauge title: "visTypeGauge" image: https://source.unsplash.com/400x175/?github summary: API docs for the visTypeGauge plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeGauge'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/vis_type_heatmap.mdx b/api_docs/vis_type_heatmap.mdx index badaca88ade08..58b9056b20e22 100644 --- a/api_docs/vis_type_heatmap.mdx +++ b/api_docs/vis_type_heatmap.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/visTypeHeatmap title: "visTypeHeatmap" image: https://source.unsplash.com/400x175/?github summary: API docs for the visTypeHeatmap plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeHeatmap'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/vis_type_pie.mdx b/api_docs/vis_type_pie.mdx index 0e9ed563204de..9aa0d06dcdb73 100644 --- a/api_docs/vis_type_pie.mdx +++ b/api_docs/vis_type_pie.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/visTypePie title: "visTypePie" image: https://source.unsplash.com/400x175/?github summary: API docs for the visTypePie plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypePie'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/vis_type_table.mdx b/api_docs/vis_type_table.mdx index 55863cf2dbfbc..6f719edc75a7a 100644 --- a/api_docs/vis_type_table.mdx +++ b/api_docs/vis_type_table.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/visTypeTable title: "visTypeTable" image: https://source.unsplash.com/400x175/?github summary: API docs for the visTypeTable plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeTable'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/vis_type_timelion.mdx b/api_docs/vis_type_timelion.mdx index 163f83446d7f2..7e4d6c02f93eb 100644 --- a/api_docs/vis_type_timelion.mdx +++ b/api_docs/vis_type_timelion.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/visTypeTimelion title: "visTypeTimelion" image: https://source.unsplash.com/400x175/?github summary: API docs for the visTypeTimelion plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeTimelion'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/vis_type_timeseries.mdx b/api_docs/vis_type_timeseries.mdx index f2bf1be662080..7b83ffcc71974 100644 --- a/api_docs/vis_type_timeseries.mdx +++ b/api_docs/vis_type_timeseries.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/visTypeTimeseries title: "visTypeTimeseries" image: https://source.unsplash.com/400x175/?github summary: API docs for the visTypeTimeseries plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeTimeseries'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/vis_type_vega.mdx b/api_docs/vis_type_vega.mdx index 4b0ec1cd90ea5..d71121e566d73 100644 --- a/api_docs/vis_type_vega.mdx +++ b/api_docs/vis_type_vega.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/visTypeVega title: "visTypeVega" image: https://source.unsplash.com/400x175/?github summary: API docs for the visTypeVega plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeVega'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/vis_type_vislib.mdx b/api_docs/vis_type_vislib.mdx index 4d3fd2c027564..4f637e3b3db09 100644 --- a/api_docs/vis_type_vislib.mdx +++ b/api_docs/vis_type_vislib.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/visTypeVislib title: "visTypeVislib" image: https://source.unsplash.com/400x175/?github summary: API docs for the visTypeVislib plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeVislib'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/vis_type_xy.mdx b/api_docs/vis_type_xy.mdx index 706d4b035a156..85cdc093b14bb 100644 --- a/api_docs/vis_type_xy.mdx +++ b/api_docs/vis_type_xy.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/visTypeXy title: "visTypeXy" image: https://source.unsplash.com/400x175/?github summary: API docs for the visTypeXy plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeXy'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/api_docs/visualizations.mdx b/api_docs/visualizations.mdx index 0e5e93c410bc3..a04ddfc4bb41d 100644 --- a/api_docs/visualizations.mdx +++ b/api_docs/visualizations.mdx @@ -4,7 +4,7 @@ slug: /kibana-dev-docs/api/visualizations title: "visualizations" image: https://source.unsplash.com/400x175/?github summary: API docs for the visualizations plugin -date: 2022-07-21 +date: 2022-07-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visualizations'] warning: This document is auto-generated and is meant to be viewed inside our experimental, new docs system. Reach out in #docs-engineering for more info. --- diff --git a/dev_docs/key_concepts/anatomy_of_a_plugin.mdx b/dev_docs/key_concepts/anatomy_of_a_plugin.mdx index 4c082fc3bf1db..f99c41ff18d07 100644 --- a/dev_docs/key_concepts/anatomy_of_a_plugin.mdx +++ b/dev_docs/key_concepts/anatomy_of_a_plugin.mdx @@ -122,7 +122,7 @@ If you are developing in TypeScript (which we recommend), you will need to add a core capabilities as an argument. It should return an instance of its plugin class for Kibana to load. ```ts -import type { PluginInitializerContext } from 'kibana/server'; +import type { PluginInitializerContext } from '@kbn/core/server'; import { DemoPlugin } from './plugin'; export function plugin(initializerContext: PluginInitializerContext) { @@ -156,7 +156,7 @@ Using the non-`type` variation will increase the bundle size unnecessarily and m point, but all plugins at Elastic should be consistent in this way. ```ts -import type { Plugin, PluginInitializerContext, CoreSetup, CoreStart } from 'kibana/server'; +import type { Plugin, PluginInitializerContext, CoreSetup, CoreStart } from '@kbn/core/server'; export class DemoPlugin implements Plugin { constructor(initializerContext: PluginInitializerContext) {} @@ -184,7 +184,7 @@ export class DemoPlugin implements Plugin { `server/plugin.ts` is the server-side plugin definition. The shape of this plugin is the same as it’s client-side counter-part: ```ts -import type { Plugin, PluginInitializerContext, CoreSetup, CoreStart } from 'kibana/server'; +import type { Plugin, PluginInitializerContext, CoreSetup, CoreStart } from '@kbn/core/server'; export class DemoPlugin implements Plugin { constructor(initializerContext: PluginInitializerContext) {} @@ -240,7 +240,7 @@ For example, the core http service exposes a function createRouter to all plugin a plugin just accesses it off of the first argument: ```ts -import type { CoreSetup } from 'kibana/server'; +import type { CoreSetup } from '@kbn/core/server'; export class DemoPlugin { public setup(core: CoreSetup) { @@ -260,7 +260,7 @@ dependency in it’s kibana.json manifest file. ** foobar plugin.ts: ** ```ts -import type { Plugin } from 'kibana/server'; +import type { Plugin } from '@kbn/core/server'; // [1] export interface FoobarPluginSetup { getFoo(): string; @@ -306,7 +306,7 @@ export class MyPlugin implements Plugin { With that specified in the plugin manifest, the appropriate interfaces are then available via the second argument of setup and/or start: ```ts -import type { CoreSetup, CoreStart } from 'kibana/server'; +import type { CoreSetup, CoreStart } from '@kbn/core/server'; import type { FoobarPluginSetup, FoobarPluginStart } from '../../foobar/server'; // [1] diff --git a/dev_docs/key_concepts/performance.mdx b/dev_docs/key_concepts/performance.mdx index 5d955c789ddeb..c57630f508dcd 100644 --- a/dev_docs/key_concepts/performance.mdx +++ b/dev_docs/key_concepts/performance.mdx @@ -33,7 +33,7 @@ some heavy-weight libraries that will also be removed from the initial plugin bundle, therefore, reducing its size by a significant amount. ```ts -import type { Plugin, CoreSetup, AppMountParameters } from 'kibana/public'; +import type { Plugin, CoreSetup, AppMountParameters } from '@kbn/core/public'; export class MyPlugin implements Plugin { setup(core: CoreSetup, plugins: SetupDeps) { core.application.register({ diff --git a/dev_docs/tutorials/advanced_settings.mdx b/dev_docs/tutorials/advanced_settings.mdx index 1ca925e24f54a..b0c12ad5e5edd 100644 --- a/dev_docs/tutorials/advanced_settings.mdx +++ b/dev_docs/tutorials/advanced_settings.mdx @@ -54,7 +54,7 @@ The following is a basic example for using the `uiSettings` service: **src/plugins/charts/public/plugin.ts** ```ts -import { Plugin, CoreSetup } from 'kibana/public'; +import { Plugin, CoreSetup } from '@kbn/core/public'; import { ExpressionsSetup } from '../../expressions/public'; import { palette, systemPalette } from '../common'; @@ -132,7 +132,7 @@ The example also shows how plugins can leverage the optional deprecation paramet ```ts import { i18n } from '@kbn/i18n'; import { schema } from '@kbn/config-schema'; -import { CoreSetup, Plugin } from 'kibana/server'; +import { CoreSetup, Plugin } from '@kbn/core/server'; import { COLOR_MAPPING_SETTING, LEGACY_TIME_AXIS, palette, systemPalette } from '../common'; import { ExpressionsServerSetup } from '../../expressions/server'; @@ -192,7 +192,7 @@ For example, changing the time filter refresh interval triggers a prompt in the ```ts import { i18n } from '@kbn/i18n'; import { schema } from '@kbn/config-schema'; -import type { DocLinksServiceSetup, UiSettingsParams } from 'kibana/server'; +import type { DocLinksServiceSetup, UiSettingsParams } from '@kbn/core/server'; import { DEFAULT_QUERY_LANGUAGE, UI_SETTINGS } from '../common'; export function getUiSettings( @@ -231,7 +231,7 @@ For example, in 7.9.0, `siem` as renamed to `securitySolution`, and in 8.0.0, `t **src/core/server/ui_settings/saved_objects/migrations.ts** ```ts -import { SavedObjectUnsanitizedDoc, SavedObjectSanitizedDoc } from 'kibana/server'; +import { SavedObjectUnsanitizedDoc, SavedObjectSanitizedDoc } from '@kbn/core/server'; export const migrations = { '7.9.0': (doc: SavedObjectUnsanitizedDoc): SavedObjectSanitizedDoc => ({ diff --git a/dev_docs/tutorials/data/search.mdx b/dev_docs/tutorials/data/search.mdx index ab5c3f29ea1be..d422eb811b60b 100644 --- a/dev_docs/tutorials/data/search.mdx +++ b/dev_docs/tutorials/data/search.mdx @@ -18,7 +18,7 @@ However, the recommended and easiest way to search Elasticsearch is by using the Here is a basic example for using the `data.search` service from a custom plugin: ```ts -import { CoreStart, Plugin } from 'kibana/public'; +import { CoreStart, Plugin } from '@kbn/core/public'; import { DataPublicPluginStart, isCompleteResponse, isErrorResponse } from import { DataPublicPluginStart, isCompleteResponse, isErrorResponse } from '../../src/plugins/data'; export interface MyPluginStartDependencies { @@ -189,7 +189,7 @@ export const mySearchStrategyProvider = ( ```ts // ./myPlugin/server/plugin.ts -import type { CoreSetup, CoreStart, Plugin } from 'kibana/server'; +import type { CoreSetup, CoreStart, Plugin } from '@kbn/core/server'; import { mySearchStrategyProvider } from './my_strategy'; diff --git a/dev_docs/tutorials/endpoints.mdx b/dev_docs/tutorials/endpoints.mdx index f6367580420db..ab7aeda0e5693 100644 --- a/dev_docs/tutorials/endpoints.mdx +++ b/dev_docs/tutorials/endpoints.mdx @@ -63,7 +63,7 @@ the request. The following snippet demonstrate how to create a basic `GET` endpoint on the `/api/my_plugin/get_object` path: ```ts -import type { CoreSetup, Plugin } from 'kibana/server'; +import type { CoreSetup, Plugin } from '@kbn/core/server'; export class MyPlugin implements Plugin { public setup(core: CoreSetup) { @@ -86,7 +86,7 @@ export class MyPlugin implements Plugin { consuming the endpoint from the client-side using core's `http` service would then look like: ```ts -import { HttpStart } from 'kibana/public'; +import { HttpStart } from '@kbn/core/public'; interface ResponseType { result: string; @@ -105,7 +105,7 @@ of the route definition. ```ts import { schema } from '@kbn/config-schema'; -import type { CoreSetup, Plugin } from 'kibana/server'; +import type { CoreSetup, Plugin } from '@kbn/core/server'; export class MyPlugin implements Plugin { public setup(core: CoreSetup) { @@ -135,7 +135,7 @@ export class MyPlugin implements Plugin { consuming the endpoint from the client-side using core's `http` service would then look like: ```ts -import { HttpStart } from 'kibana/public'; +import { HttpStart } from '@kbn/core/public'; import { MyObjectType } from '../common/types'; async function fetchData(http: HttpStart, id: string) { @@ -150,7 +150,7 @@ must be provided when registering a `post` handler that will access the payload. ```ts import { schema } from '@kbn/config-schema'; -import type { CoreSetup, Plugin } from 'kibana/server'; +import type { CoreSetup, Plugin } from '@kbn/core/server'; export class MyPlugin implements Plugin { public setup(core: CoreSetup) { @@ -182,7 +182,7 @@ export class MyPlugin implements Plugin { consuming the endpoint from the client-side using core's `http` service would then look like: ```ts -import { HttpStart } from 'kibana/public'; +import { HttpStart } from '@kbn/core/public'; interface ResponseType { updated: boolean; @@ -207,7 +207,7 @@ option of the route definition to be accessible from the handler. ```ts import { schema } from '@kbn/config-schema'; -import type { CoreSetup, Plugin } from 'kibana/server'; +import type { CoreSetup, Plugin } from '@kbn/core/server'; export class MyPlugin implements Plugin { public setup(core: CoreSetup) { @@ -236,7 +236,7 @@ export class MyPlugin implements Plugin { consuming the endpoint from the client-side using core's `http` service would then look like: ```ts -import { HttpStart } from 'kibana/public'; +import { HttpStart } from '@kbn/core/public'; import { MyObjectType } from '../common/types'; interface ResponseType { @@ -264,7 +264,7 @@ All APIs of the `response` parameter of the handler accept a `headers` property to define headers to attach to the response. ```ts -import type { CoreSetup, Plugin } from 'kibana/server'; +import type { CoreSetup, Plugin } from '@kbn/core/server'; export class MyPlugin implements Plugin { public setup(core: CoreSetup) { @@ -300,7 +300,7 @@ However, some of the less commonly used return codes don't have such helpers. In and/or `response.customError` APIs should be used. ```ts -import type { CoreSetup, Plugin } from 'kibana/server'; +import type { CoreSetup, Plugin } from '@kbn/core/server'; export class MyPlugin implements Plugin { public setup(core: CoreSetup) { @@ -332,7 +332,7 @@ These observables can either be used directly, or be used to control an `AbortCo ```ts import { schema } from '@kbn/config-schema'; -import type { CoreSetup, Plugin } from 'kibana/server'; +import type { CoreSetup, Plugin } from '@kbn/core/server'; export class MyPlugin implements Plugin { public setup(core: CoreSetup) { @@ -371,7 +371,7 @@ and will return a `401 - Unauthorized` otherwise. It is possible to disable this requirement using the `authRequired` option of the route. ```ts -import type { CoreSetup, Plugin } from 'kibana/server'; +import type { CoreSetup, Plugin } from '@kbn/core/server'; export class MyPlugin implements Plugin { public setup(core: CoreSetup) { @@ -407,7 +407,7 @@ be achieved by using the `url` and `route` properties of the `request` parameter request.url / request.route ```ts -import type { CoreSetup, Plugin } from 'kibana/server'; +import type { CoreSetup, Plugin } from '@kbn/core/server'; export class MyPlugin implements Plugin { public setup(core: CoreSetup) { diff --git a/dev_docs/tutorials/testing_plugins.mdx b/dev_docs/tutorials/testing_plugins.mdx index 044d610aa3489..b43fa19927cc4 100644 --- a/dev_docs/tutorials/testing_plugins.mdx +++ b/dev_docs/tutorials/testing_plugins.mdx @@ -590,7 +590,7 @@ Objects client: ```typescript // src/plugins/myplugin/server/lib/short_url_lookup.ts import crypto from 'crypto'; -import { SavedObjectsClientContract } from 'kibana/server'; +import { SavedObjectsClientContract } from '@kbn/core/server'; export const shortUrlLookup = { generateUrlId(url: string, savedObjectsClient: SavedObjectsClientContract) { @@ -1025,7 +1025,7 @@ data. ```typescript // src/plugins/myplugin/public/plugin.ts import { METRIC_TYPE } from '@kbn/analytics'; -import { CoreSetup, CoreStart, Plugin } from 'kibana/public'; +import { CoreSetup, CoreStart, Plugin } from '@kbn/core/public'; import { DataPublicPluginSetup, DataPublicPluginStart } from '../../data/public'; import { UsageCollectionSetup } from '../../usage_collection/public'; import { SuggestionsService } from './suggestions'; diff --git a/docs/api/machine-learning/ml_apis_v2_defs.asciidoc b/docs/api/machine-learning/ml_apis_v2_defs.asciidoc new file mode 100644 index 0000000000000..691557bfb9634 --- /dev/null +++ b/docs/api/machine-learning/ml_apis_v2_defs.asciidoc @@ -0,0 +1,240 @@ +[[Machine_learning_APIs-definitions]] +== Definitions + +* <> +* <> +* <> +* <> +* <> +* <> + +[[MLSyncResponse]] +=== `MLSyncResponse` + +The sync machine learning saved objects API returns this list of machine learning saved objects that required synchronization. + + +==== Properties + +`datafeedsAdded` (++map[string,++<>++]++):: +If a saved object for an anomaly detection job is missing a datafeed identifier, it is added when you run the sync machine learning saved objects API. + + +`datafeedsRemoved` (++map[string,++<>++]++):: +If a saved object for an anomaly detection job references a datafeed that no longer exists, it is deleted when you run the sync machine learning saved objects API. + + +`savedObjectsCreated` (<>):: +If saved objects are missing for machine learning jobs or trained models, they are created when you run the sync machine learning saved objects API. + + +`savedObjectsDeleted` (<>):: +If saved objects exist for machine learning jobs or trained models that no longer exist, they are deleted when you run the sync machine learning saved objects API. + + +==== Example + +[source,json] +-------- +{ + "datafeedsAdded" : { + "some_property" : { + "success" : true + } + }, + "datafeedsRemoved" : { + "some_property" : { + "success" : true + } + }, + "savedObjectsCreated" : { + "anomaly-detector" : { + "some_property" : { + "success" : true + } + }, + "data-frame-analytics" : { + "some_property" : { + "success" : true + } + }, + "trained-model" : { + "some_property" : { + "success" : true + } + } + }, + "savedObjectsDeleted" : { + "anomaly-detector" : { + "some_property" : { + "success" : true + } + }, + "data-frame-analytics" : { + "some_property" : { + "success" : true + } + }, + "trained-model" : { + "some_property" : { + "success" : true + } + } + } +} + +-------- + +[[MLSyncResponse-Datafeeds]] +=== `MLSyncResponse-Datafeeds` + +The sync machine learning saved objects API response contains this object when there are datafeeds affected by the synchronization. There is an object for each relevant datafeed, which contains the synchronization status. + + +==== Properties + +`success` (+boolean+):: +The success or failure of the synchronization. + + +==== Example + +[source,json] +-------- +{ + "success" : true +} + +-------- + +[[MLSyncResponse-Jobs]] +=== `MLSyncResponse-Jobs` + +The sync machine learning saved objects API response contains this object when there are machine learning jobs affected by the synchronization. There is an object for each relevant job, which contains the synchronization status. + + +==== Properties + +`success` (+boolean+):: +The success or failure of the synchronization. + + +==== Example + +[source,json] +-------- +{ + "success" : true +} + +-------- + +[[MLSyncResponse-Models]] +=== `MLSyncResponse-Models` + +The sync machine learning saved objects API response contains this object when there are trained models affected by the synchronization. There is an object for each relevant trained model, which contains the synchronization status. + + +==== Properties + +`success` (+boolean+):: +The success or failure of the synchronization. + + +==== Example + +[source,json] +-------- +{ + "success" : true +} + +-------- + +[[MLSyncResponse-SavedObjectsCreated]] +=== `MLSyncResponse-SavedObjectsCreated` + +If saved objects are missing for machine learning jobs or trained models, they are created when you run the sync machine learning saved objects API. + + +==== Properties + +`anomaly-detector` (++map[string,++<>++]++):: +This object is present if there are anomaly detection jobs affected by the synchronization. + + +`data-frame-analytics` (++map[string,++<>++]++):: +This object is present if there are data frame analytics jobs affected by the synchronization. + + +`trained-model` (++map[string,++<>++]++):: +This object is present if there are trained models affected by the synchronization. + + +==== Example + +[source,json] +-------- +{ + "anomaly-detector" : { + "some_property" : { + "success" : true + } + }, + "data-frame-analytics" : { + "some_property" : { + "success" : true + } + }, + "trained-model" : { + "some_property" : { + "success" : true + } + } +} + +-------- + +[[MLSyncResponse-SavedObjectsDeleted]] +=== `MLSyncResponse-SavedObjectsDeleted` + +If saved objects exist for machine learning jobs or trained models that no longer exist, they are deleted when you run the sync machine learning saved objects API. + + +==== Properties + +`anomaly-detector` (++map[string,++<>++]++):: +This object is present if there are anomaly detection jobs affected by the synchronization. + + +`data-frame-analytics` (++map[string,++<>++]++):: +This object is present if there are data frame analytics jobs affected by the synchronization. + + +`trained-model` (++map[string,++<>++]++):: +This object is present if there are trained models affected by the synchronization. + + +==== Example + +[source,json] +-------- +{ + "anomaly-detector" : { + "some_property" : { + "success" : true + } + }, + "data-frame-analytics" : { + "some_property" : { + "success" : true + } + }, + "trained-model" : { + "some_property" : { + "success" : true + } + } +} + +-------- diff --git a/docs/api/machine-learning/ml_apis_v2_docs.asciidoc b/docs/api/machine-learning/ml_apis_v2_docs.asciidoc new file mode 100644 index 0000000000000..5bf8a3b8fc36b --- /dev/null +++ b/docs/api/machine-learning/ml_apis_v2_docs.asciidoc @@ -0,0 +1,86 @@ +[[Machine_learning_APIs]] +== Machine learning APIs + +* <> +* <> + +[[ml-sync-default]] +=== Sync machine learning saved objects in the default space + +Synchronizes Kibana saved objects for machine learning jobs and trained models in the default space. You must have `all` privileges for the *Machine Learning* feature in the *Analytics* section of the Kibana feature privileges. This API runs automatically when you start Kibana and periodically thereafter. + + +==== Request + +`GET /api/ml/saved_objects/sync` + +==== Query parameters + +[options="header"] +|========== +|Name |Type |Required |Description +|`simulate` |+boolean+; default: ++false++ |N |When true, simulates the synchronization by returning only the list actions that would be performed. + +|========== +==== Responses + +`200`:: ++ +-- +(<>) + +Indicates a successful call. + +-- + +==== Request example + +[source,json] +-------- +curl -XGET https://localhost:5601/api/ml/saved_objects/sync \ +-u USER:PASSWORD +-------- +[[ml-sync]] +=== Sync machine learning saved objects + +Synchronizes Kibana saved objects for machine learning jobs and trained models. You must have `all` privileges for the *Machine Learning* feature in the *Analytics* section of the Kibana feature privileges. This API runs automatically when you start Kibana and periodically thereafter. + + +==== Request + +`GET /s/{spaceId}/api/ml/saved_objects/sync` + +==== Path parameters + +[options="header"] +|========== +|Name |Type |Required |Description +|`spaceId` |+string+ |Y |An identifier for the space. + +|========== +==== Query parameters + +[options="header"] +|========== +|Name |Type |Required |Description +|`simulate` |+boolean+; default: ++false++ |N |When true, simulates the synchronization by returning only the list actions that would be performed. + +|========== +==== Responses + +`200`:: ++ +-- +(<>) + +Indicates a successful call. + +-- + +==== Request example + +[source,json] +-------- +curl -XGET https://localhost:5601/s/{spaceId}/api/ml/saved_objects/sync \ +-u USER:PASSWORD +-------- \ No newline at end of file diff --git a/docs/api/machine-learning/sync.asciidoc b/docs/api/machine-learning/sync.asciidoc deleted file mode 100644 index 798c04908bdd5..0000000000000 --- a/docs/api/machine-learning/sync.asciidoc +++ /dev/null @@ -1,89 +0,0 @@ -[[machine-learning-api-sync]] -=== Sync {ml} saved objects API -++++ -Sync {ml} saved objects -++++ - -Synchronizes {kib} saved objects for {ml} jobs and trained models. - -[[machine-learning-api-sync-request]] -==== {api-request-title} - -`GET :/api/ml/saved_objects/sync` - -`GET :/s//api/ml/saved_objects/sync` - -[[machine-learning-api-sync-prereq]] -==== {api-prereq-title} - -You must have `all` privileges for the *Machine Learning* feature in the *Analytics* section of the -<>. - -[[machine-learning-api-sync-desc]] -==== {api-description-title} - -This API runs automatically when you start {kib} and periodically thereafter. - -[[machine-learning-api-sync-path-params]] -==== {api-path-parms-title} - -`space_id`:: -(Optional, string) An identifier for the space. If `space_id` is not provided in -the URL the default space is used. - -[[machine-learning-api-sync-query-params]] -==== {api-query-parms-title} - -`simulate`:: -(Optional, boolean) When `true`, simulates the synchronization by only returning -the list actions that _would_ be performed. - -[[machine-learning-api-sync-response-body]] -==== {api-response-body-title} - -`datafeedsAdded`:: -(array) If a saved object for an {anomaly-job} is missing a {dfeed} identifier, -it is added. This list contains the {dfeed} identifiers and indicates whether -the synchronization was successful. - -`datafeedsRemoved`:: -(array) If a saved object for an anomaly detection job references a datafeed -that no longer exists, it is deleted. This list contains the {dfeed} identifiers -and indicates whether the synchronization was successful. - -`savedObjectsCreated`:: -(array) If saved objects are missing for {ml} jobs or trained models, they are -created. This list contains the job and model identifiers and indicates whether -the synchronization was successful. - -`savedObjectsDeleted`:: -(array) If saved objects exist for {ml} jobs or trained models that no longer -exist, they are deleted. This list contains the job and model identifiers and -indicates whether the synchronization was successful. - -[[machine-learning-api-sync-codes]] -==== {api-response-codes-title} - -`200`:: - Indicates a successful call. - -[[machine-learning-api-sync-example]] -==== {api-examples-title} - -Retrieve the list of {ml} saved objects that require synchronization: - -[source,sh] --------------------------------------------------- -GET api/ml/saved_objects/sync?simulate=true --------------------------------------------------- -// KIBANA - -If there are two jobs that need to be synchronized, for example, the API returns -the following response: - -[source,sh] --------------------------------------------------- -{"savedObjectsCreated":{"anomaly_detector":{"myjob1":{"success":true},"myjob2":{"success":true}}},"savedObjectsDeleted":{},"datafeedsAdded":{},"datafeedsRemoved":{}} --------------------------------------------------- - -To perform the synchronization, re-run the API and omit the `simulate` parameter. \ No newline at end of file diff --git a/docs/developer/architecture/core/application_service.asciidoc b/docs/developer/architecture/core/application_service.asciidoc index ba3c6bbed72be..2aa50ebafad8d 100644 --- a/docs/developer/architecture/core/application_service.asciidoc +++ b/docs/developer/architecture/core/application_service.asciidoc @@ -6,7 +6,7 @@ NOTE: The Application service is only available client side. [source,typescript] ---- -import { AppMountParameters, CoreSetup, Plugin, DEFAULT_APP_CATEGORIES } from 'kibana/public'; +import { AppMountParameters, CoreSetup, Plugin, DEFAULT_APP_CATEGORIES } from '@kbn/core/public'; export class MyPlugin implements Plugin { public setup(core: CoreSetup) { diff --git a/docs/developer/architecture/core/configuration-service.asciidoc b/docs/developer/architecture/core/configuration-service.asciidoc index 031135c7b790f..b78414486e3c3 100644 --- a/docs/developer/architecture/core/configuration-service.asciidoc +++ b/docs/developer/architecture/core/configuration-service.asciidoc @@ -38,7 +38,7 @@ export type MyPluginConfigType = TypeOf; *my_plugin/server/index.ts* [source,typescript] ---- -import type { PluginInitializerContext } from 'kibana/server'; +import type { PluginInitializerContext } from '@kbn/core/server'; export class MyPlugin { constructor(initializerContext: PluginInitializerContext) { this.config$ = initializerContext.config.create(); @@ -57,7 +57,7 @@ allow-list property. [source,typescript] ---- import { schema, TypeOf } from '@kbn/config-schema'; -import type { PluginConfigDescriptor } from 'kibana/server'; +import type { PluginConfigDescriptor } from '@kbn/core/server'; const configSchema = schema.object({ secret: schema.string({ defaultValue: 'Only on server' }), @@ -115,7 +115,7 @@ configuration root. [source,typescript] ---- import { schema, TypeOf } from '@kbn/config-schema'; -import type { PluginConfigDescriptor } from 'kibana/server'; +import type { PluginConfigDescriptor } from '@kbn/core/server'; const configSchema = schema.object({ newProperty: schema.string({ defaultValue: 'Some string' }), diff --git a/docs/developer/architecture/core/elasticsearch-service.asciidoc b/docs/developer/architecture/core/elasticsearch-service.asciidoc index 55632c0117938..b65c8859d50dc 100644 --- a/docs/developer/architecture/core/elasticsearch-service.asciidoc +++ b/docs/developer/architecture/core/elasticsearch-service.asciidoc @@ -14,7 +14,7 @@ See <> and <>. [source,typescript] ---- -import { CoreStart, Plugin } from 'kibana/public'; +import { CoreStart, Plugin } from '@kbn/core/public'; export class MyPlugin implements Plugin { public start(core: CoreStart) { diff --git a/docs/developer/architecture/core/http-service.asciidoc b/docs/developer/architecture/core/http-service.asciidoc index 45468d618dd09..6cc171aa7969a 100644 --- a/docs/developer/architecture/core/http-service.asciidoc +++ b/docs/developer/architecture/core/http-service.asciidoc @@ -17,7 +17,7 @@ See {kib-repo}blob/{branch}/docs/development/core/server/kibana-plugin-core-serv [source,typescript] ---- import { schema } from '@kbn/config-schema'; -import type { CoreSetup, Plugin } from 'kibana/server'; +import type { CoreSetup, Plugin } from '@kbn/core/server'; export class MyPlugin implements Plugin { public setup(core: CoreSetup) { @@ -54,7 +54,7 @@ The client-side HttpService is a preconfigured wrapper around `window.fetch` tha [source,typescript] ---- -import { CoreStart } from 'kibana/public'; +import { CoreStart } from '@kbn/core/public'; interface ResponseType {…}; interface MyPluginData {…}; async function fetchData(core: CoreStart) { diff --git a/docs/developer/architecture/core/index.asciidoc b/docs/developer/architecture/core/index.asciidoc index 6c70205c3590d..b03e98ffbb57d 100644 --- a/docs/developer/architecture/core/index.asciidoc +++ b/docs/developer/architecture/core/index.asciidoc @@ -8,7 +8,7 @@ These API's are injected into your plugin's lifecycle methods and may be invoked [source,typescript] ---- -import type { PluginInitializerContext, CoreSetup, CoreStart } from 'kibana/server'; +import type { PluginInitializerContext, CoreSetup, CoreStart } from '@kbn/core/server'; export class MyPlugin { constructor(initializerContext: PluginInitializerContext) {} diff --git a/docs/developer/architecture/core/logging-service.asciidoc b/docs/developer/architecture/core/logging-service.asciidoc index 79d8c6d197e10..a4d5a12ff64e7 100644 --- a/docs/developer/architecture/core/logging-service.asciidoc +++ b/docs/developer/architecture/core/logging-service.asciidoc @@ -6,7 +6,7 @@ NOTE: The Logging service is only available server side. [source,typescript] ---- -import type { PluginInitializerContext, CoreSetup, Plugin, Logger } from 'kibana/server'; +import type { PluginInitializerContext, CoreSetup, Plugin, Logger } from '@kbn/core/server'; export class MyPlugin implements Plugin { private readonly logger: Logger; diff --git a/docs/developer/architecture/core/patterns-scoped-services.asciidoc b/docs/developer/architecture/core/patterns-scoped-services.asciidoc index d4618684fc7e4..bfd8b42dbb951 100644 --- a/docs/developer/architecture/core/patterns-scoped-services.asciidoc +++ b/docs/developer/architecture/core/patterns-scoped-services.asciidoc @@ -35,7 +35,7 @@ the request handler context: [source,typescript] ---- -import type { CoreSetup, RequestHandlerContext, IScopedClusterClient } from 'kibana/server'; +import type { CoreSetup, RequestHandlerContext, IScopedClusterClient } from '@kbn/core/server'; interface MyRequestHandlerContext extends RequestHandlerContext { myPlugin: { diff --git a/docs/developer/architecture/core/uisettings-service.asciidoc b/docs/developer/architecture/core/uisettings-service.asciidoc index 32a0058476df8..2d24465b69c32 100644 --- a/docs/developer/architecture/core/uisettings-service.asciidoc +++ b/docs/developer/architecture/core/uisettings-service.asciidoc @@ -82,7 +82,7 @@ The following example shows how to {kib-repo}blob/{branch}/docs/development/core [source,typescript] ---- import { schema } from '@kbn/config-schema'; -import type { CoreSetup,Plugin } from 'kibana/server'; +import type { CoreSetup,Plugin } from '@kbn/core/server'; export class MyPlugin implements Plugin { public setup(core: CoreSetup) { diff --git a/docs/developer/architecture/kibana-platform-plugin-api.asciidoc b/docs/developer/architecture/kibana-platform-plugin-api.asciidoc index 9cf60cda76f75..af3dfa8647656 100644 --- a/docs/developer/architecture/kibana-platform-plugin-api.asciidoc +++ b/docs/developer/architecture/kibana-platform-plugin-api.asciidoc @@ -57,7 +57,7 @@ It should return an instance of its plugin class for [source,typescript] ---- -import type { PluginInitializerContext } from 'kibana/server'; +import type { PluginInitializerContext } from '@kbn/core/server'; import { MyPlugin } from './plugin'; export function plugin(initializerContext: PluginInitializerContext) { @@ -73,7 +73,7 @@ for first-party Elastic plugins]. [source,typescript] ---- -import type { Plugin, PluginInitializerContext, CoreSetup, CoreStart } from 'kibana/server'; +import type { Plugin, PluginInitializerContext, CoreSetup, CoreStart } from '@kbn/core/server'; export class MyPlugin implements Plugin { constructor(initializerContext: PluginInitializerContext) {} @@ -99,7 +99,7 @@ entry-point: [source,typescript] ---- -import type { PluginInitializerContext } from 'kibana/server'; +import type { PluginInitializerContext } from '@kbn/core/server'; import { MyPlugin } from './plugin'; export function plugin(initializerContext: PluginInitializerContext) { @@ -112,7 +112,7 @@ shape of this plugin is the same as it’s client-side counter-part: [source,typescript] ---- -import type { Plugin, PluginInitializerContext, CoreSetup, CoreStart } from 'kibana/server'; +import type { Plugin, PluginInitializerContext, CoreSetup, CoreStart } from '@kbn/core/server'; export class MyPlugin implements Plugin { constructor(initializerContext: PluginInitializerContext) {} @@ -190,7 +190,7 @@ an HTTP route handler, a plugin just accesses it off of the first argument: [source, typescript] ---- -import type { CoreSetup } from 'kibana/server'; +import type { CoreSetup } from '@kbn/core/server'; export class MyPlugin { public setup(core: CoreSetup) { @@ -252,7 +252,7 @@ encouraged to expose types for their plugin interfaces. [source, typescript] ---- -import type { Plugin } from 'kibana/server'; +import type { Plugin } from '@kbn/core/server'; export interface FoobarPluginSetup { <1> getFoo(): string; } @@ -305,7 +305,7 @@ are then available via the second argument of `setup` and/or `start`: [source,typescript] ---- -import type { CoreSetup, CoreStart } from 'kibana/server'; +import type { CoreSetup, CoreStart } from '@kbn/core/server'; import type { FoobarPluginSetup, FoobarPluginStart } from '../../foobar/server'; interface DemoSetupPlugins { <1> diff --git a/docs/developer/best-practices/performance.asciidoc b/docs/developer/best-practices/performance.asciidoc index 5d7bee2d58e6e..05489a36f9c7b 100644 --- a/docs/developer/best-practices/performance.asciidoc +++ b/docs/developer/best-practices/performance.asciidoc @@ -24,7 +24,7 @@ plugin bundle, therefore, reducing its size by a significant amount. [source,typescript] ---- -import type { Plugin, CoreSetup, AppMountParameters } from 'kibana/public'; +import type { Plugin, CoreSetup, AppMountParameters } from '@kbn/core/public'; export class MyPlugin implements Plugin { setup(core: CoreSetup, plugins: SetupDeps) { core.application.register({ diff --git a/docs/developer/plugin/migrating-legacy-plugins-examples.asciidoc b/docs/developer/plugin/migrating-legacy-plugins-examples.asciidoc index e7468c60a2ebc..b674d084a76ca 100644 --- a/docs/developer/plugin/migrating-legacy-plugins-examples.asciidoc +++ b/docs/developer/plugin/migrating-legacy-plugins-examples.asciidoc @@ -60,7 +60,7 @@ in the _constructor_ of the plugin: *plugins/my_plugin/(public|server)/index.ts* [source,typescript] ---- -import type { PluginInitializerContext } from 'kibana/server'; +import type { PluginInitializerContext } from '@kbn/core/server'; import { MyPlugin } from './plugin'; export function plugin(initializerContext: PluginInitializerContext) { @@ -71,7 +71,7 @@ export function plugin(initializerContext: PluginInitializerContext) { *plugins/my_plugin/(public|server)/plugin.ts* [source,typescript] ---- -import { CoreSetup, Logger, Plugin, PluginInitializerContext, PluginName } from 'kibana/server'; +import { CoreSetup, Logger, Plugin, PluginInitializerContext, PluginName } from '@kbn/core/server'; import type { MyPluginConfig } from './config'; export class MyPlugin implements Plugin { @@ -118,7 +118,7 @@ same name in `plugins/demoplugin` with the following files: [source,typescript] ---- import { schema, TypeOf } from '@kbn/config-schema'; -import type { PluginInitializerContext } from 'kibana/server'; +import type { PluginInitializerContext } from '@kbn/core/server'; import { DemoPlugin } from './plugin'; export const config = { @@ -136,7 +136,7 @@ export { DemoPluginSetup } from './plugin'; *plugins/demoplugin/server/plugin.ts* [source,typescript] ---- -import type { PluginInitializerContext, Plugin, CoreSetup } from 'kibana/server'; +import type { PluginInitializerContext, Plugin, CoreSetup } from '@kbn/core/server'; import type { DemoPluginConfig } from '.'; export interface DemoPluginSetup {}; @@ -205,7 +205,7 @@ to the {kib} platform format: [source,typescript] ---- import { schema } from '@kbn/config-schema'; -import type { CoreSetup } from 'kibana/server'; +import type { CoreSetup } from '@kbn/core/server'; export class DemoPlugin { public setup(core: CoreSetup) { @@ -239,7 +239,7 @@ migration is complete: [source,typescript] ---- import { schema } from '@kbn/config-schema'; -import { CoreSetup } from 'kibana/server'; +import { CoreSetup } from '@kbn/core/server'; import Boom from '@hapi/boom'; export class DemoPlugin { @@ -706,7 +706,7 @@ First type: *plugins/demoplugin/server/saved_objects/first_type.ts* [source,typescript] ---- -import type { SavedObjectsType } from 'kibana/server'; +import type { SavedObjectsType } from '@kbn/core/server'; export const firstType: SavedObjectsType = { name: 'first-type', @@ -744,7 +744,7 @@ Second type: *plugins/demoplugin/server/saved_objects/second_type.ts* [source,typescript] ---- -import type { SavedObjectsType } from 'kibana/server'; +import type { SavedObjectsType } from '@kbn/core/server'; export const secondType: SavedObjectsType = { name: 'second-type', @@ -979,7 +979,7 @@ Legacy Elasticsearch library until the additional announcements. [source,typescript] ---- // Kibana provides a few typings for internal purposes -import type { SearchResponse } from 'kibana/server'; +import type { SearchResponse } from '@kbn/core/server'; type SearchSource = {...}; type SearchBody = SearchResponse; const { body } = await client.search(...); diff --git a/docs/developer/plugin/testing-kibana-plugin.asciidoc b/docs/developer/plugin/testing-kibana-plugin.asciidoc index 6e856d2e2578a..7757f47df0c42 100644 --- a/docs/developer/plugin/testing-kibana-plugin.asciidoc +++ b/docs/developer/plugin/testing-kibana-plugin.asciidoc @@ -11,7 +11,7 @@ plugins always rely on valid public contracts: *my_plugin/server/plugin.test.ts* [source,typescript] ---- -import { configServiceMock } from 'kibana/server/mocks'; +import { configServiceMock } from '@kbn/core/server/mocks'; const configService = configServiceMock.create(); configService.atPath.mockReturnValue(config$); @@ -24,7 +24,7 @@ Or if you need to get the whole core `setup` or `start` contracts: *my_plugin/server/plugin.test.ts* [source,typescript] ---- -import { coreMock } from 'kibana/public/mocks'; +import { coreMock } from '@kbn/core/public/mocks'; const coreSetup = coreMock.createSetup(); coreSetup.uiSettings.get.mockImplementation((key: string) => { diff --git a/docs/management/action-types.asciidoc b/docs/management/action-types.asciidoc index b2bf5f2bbe308..d85c03f240287 100644 --- a/docs/management/action-types.asciidoc +++ b/docs/management/action-types.asciidoc @@ -58,6 +58,10 @@ a| <> a| <> | Send a request to a web service. + +a| <> + +| Send actionable alerts to on-call xMatters resources. |=== [NOTE] diff --git a/docs/redirects.asciidoc b/docs/redirects.asciidoc index 934ebfc3e4b08..6ea58760538cb 100644 --- a/docs/redirects.asciidoc +++ b/docs/redirects.asciidoc @@ -415,3 +415,13 @@ This page has been deleted. Refer to <>. == Advanced Osquery This page has been deleted. Refer to <>. + +[role="exclude",id="machine-learning-api-sync"] +== Sync machine learning saved objects API + +This page has been deleted. Refer to <> and <>. + +[role="exclude",id="machine-learning-api"] +== Machine learning APIs + +This page has been deleted. Refer to <>. \ No newline at end of file diff --git a/docs/setup/upgrade/resolving-migration-failures.asciidoc b/docs/setup/upgrade/resolving-migration-failures.asciidoc index 0af9fafa36d77..3d3a80fb423ca 100644 --- a/docs/setup/upgrade/resolving-migration-failures.asciidoc +++ b/docs/setup/upgrade/resolving-migration-failures.asciidoc @@ -177,7 +177,7 @@ If the cluster exceeded the low watermark for disk usage, the output should cont -------------------------------------------- "The node is above the low watermark cluster setting [cluster.routing.allocation.disk.watermark.low=85%], using more disk space than the maximum allowed [85.0%], actual free: [11.692661332965082%]" -------------------------------------------- -Refer to the {es} guide for how to {ref}/fix-common-cluster-issues.html[fix common cluster issues]. +Refer to the {es} guide for how to {ref}/disk-usage-exceeded.html[fix common cluster issues]. If routing allocation is the issue, the `_cluster/allocation/explain` API will return an entry similar to this: diff --git a/docs/user/api.asciidoc b/docs/user/api.asciidoc index 0cfd4620b7cb5..2d967ed956b19 100644 --- a/docs/user/api.asciidoc +++ b/docs/user/api.asciidoc @@ -100,7 +100,8 @@ include::{kib-repo-dir}/api/actions-and-connectors.asciidoc[] include::{kib-repo-dir}/api/cases.asciidoc[] include::{kib-repo-dir}/api/dashboard-api.asciidoc[] include::{kib-repo-dir}/api/logstash-configuration-management.asciidoc[] -include::{kib-repo-dir}/api/machine-learning.asciidoc[] +include::{kib-repo-dir}/api/machine-learning/ml_apis_v2_docs.asciidoc[] +include::{kib-repo-dir}/api/machine-learning/ml_apis_v2_defs.asciidoc[leveloffset=+1] include::{kib-repo-dir}/api/short-urls.asciidoc[] include::{kib-repo-dir}/api/task-manager/health.asciidoc[] include::{kib-repo-dir}/api/upgrade-assistant.asciidoc[] diff --git a/examples/data_view_field_editor_example/public/app.tsx b/examples/data_view_field_editor_example/public/app.tsx index 0a5b98ee41a04..846ff0b290fb4 100644 --- a/examples/data_view_field_editor_example/public/app.tsx +++ b/examples/data_view_field_editor_example/public/app.tsx @@ -6,23 +6,28 @@ * Side Public License, v 1. */ -import React, { useState } from 'react'; -import ReactDOM from 'react-dom'; import { + DefaultItemAction, + EuiButton, + EuiCheckbox, + EuiFlexGroup, + EuiFlexItem, + EuiInMemoryTable, EuiPage, - EuiPageHeader, EuiPageBody, EuiPageContent, EuiPageContentBody, - EuiButton, - EuiInMemoryTable, + EuiPageHeader, EuiText, - DefaultItemAction, + useGeneratedHtmlId, } from '@elastic/eui'; import { AppMountParameters } from '@kbn/core/public'; import { DataPublicPluginStart } from '@kbn/data-plugin/public'; -import type { DataView, DataViewField } from '@kbn/data-views-plugin/public'; import { IndexPatternFieldEditorStart } from '@kbn/data-view-field-editor-plugin/public'; +import type { DataView } from '@kbn/data-views-plugin/public'; +import { DataViewField } from '@kbn/data-views-plugin/public'; +import React, { useState } from 'react'; +import ReactDOM from 'react-dom'; interface Props { dataView?: DataView; @@ -33,6 +38,8 @@ const DataViewFieldEditorExample = ({ dataView, dataViewFieldEditor }: Props) => const [fields, setFields] = useState( dataView?.fields.getAll().filter((f) => !f.scripted) || [] ); + const [preconfigured, setPreconfigured] = useState(false); + const refreshFields = () => setFields(dataView?.fields.getAll().filter((f) => !f.scripted) || []); const columns = [ { @@ -75,22 +82,42 @@ const DataViewFieldEditorExample = ({ dataView, dataViewFieldEditor }: Props) => }, ]; + const preconfigureId = useGeneratedHtmlId({ prefix: 'usePreconfigured' }); const content = dataView ? ( <> Data view: {dataView.title} -
- - dataViewFieldEditor.openEditor({ - ctx: { dataView }, - onSave: refreshFields, - }) - } - data-test-subj="addField" - > - Add field - -
+ + + + dataViewFieldEditor.openEditor({ + ctx: { dataView }, + onSave: refreshFields, + fieldToCreate: preconfigured + ? { + name: 'demotestfield', + type: 'boolean', + script: { source: 'emit(true)' }, // optional + customLabel: 'cool demo test field', // optional + format: { id: 'boolean' }, // optional + } + : undefined, + }) + } + data-test-subj="addField" + > + Add field + + + + setPreconfigured(!preconfigured)} + /> + + items={fields} columns={columns} diff --git a/package.json b/package.json index e3ffa2b78d269..f680bfa092c0a 100644 --- a/package.json +++ b/package.json @@ -103,7 +103,7 @@ "@elastic/apm-rum": "^5.12.0", "@elastic/apm-rum-react": "^1.4.2", "@elastic/apm-synthtrace": "link:bazel-bin/packages/elastic-apm-synthtrace", - "@elastic/charts": "46.13.0", + "@elastic/charts": "47.0.0", "@elastic/datemath": "5.0.3", "@elastic/elasticsearch": "npm:@elastic/elasticsearch-canary@8.3.0-canary.1", "@elastic/ems-client": "8.3.3", @@ -525,7 +525,7 @@ "uuid": "3.3.2", "vega": "^5.22.1", "vega-interpreter": "^1.0.4", - "vega-lite": "^5.2.0", + "vega-lite": "^5.3.0", "vega-schema-url-parser": "^2.2.0", "vega-spec-injector": "^0.0.2", "vega-tooltip": "^0.28.0", @@ -677,7 +677,6 @@ "@types/express": "^4.17.13", "@types/extract-zip": "^1.6.2", "@types/faker": "^5.1.5", - "@types/fancy-log": "^1.3.1", "@types/fetch-mock": "^7.3.1", "@types/file-saver": "^2.0.0", "@types/flot": "^0.0.31", @@ -1027,7 +1026,8 @@ "copy-webpack-plugin": "^6.0.2", "cpy": "^8.1.1", "css-loader": "^3.4.2", - "cssnano": "^4.1.11", + "cssnano": "^5.1.12", + "cssnano-preset-default": "^5.2.12", "csstype": "^3.0.2", "cypress": "^9.6.1", "cypress-axe": "^0.14.0", @@ -1069,7 +1069,6 @@ "expect": "^28.1.1", "expose-loader": "^0.7.5", "faker": "^5.1.0", - "fancy-log": "^1.3.2", "fetch-mock": "^7.3.9", "file-loader": "^4.2.0", "form-data": "^4.0.0", diff --git a/packages/kbn-alerts/src/hooks/use_get_alerts_permissions/index.ts b/packages/kbn-alerts/src/hooks/use_get_alerts_permissions/index.ts index 2f2c0967c32f2..dc9e3f8ccee57 100644 --- a/packages/kbn-alerts/src/hooks/use_get_alerts_permissions/index.ts +++ b/packages/kbn-alerts/src/hooks/use_get_alerts_permissions/index.ts @@ -9,7 +9,7 @@ import { useEffect, useState } from 'react'; // TODO: I have to use any here for now, but once this is available below, we should use the correct types, https://github.com/elastic/kibana/issues/100715 -// import { Capabilities } from 'kibana/public'; +// import { Capabilities } from '@kbn/core/public'; type Capabilities = any; export interface UseGetUserAlertsPermissionsProps { crud: boolean; diff --git a/packages/kbn-bazel-runner/src/bazel_runner.js b/packages/kbn-bazel-runner/src/bazel_runner.js index 257c7e695b312..78d91e7ae4799 100644 --- a/packages/kbn-bazel-runner/src/bazel_runner.js +++ b/packages/kbn-bazel-runner/src/bazel_runner.js @@ -58,7 +58,7 @@ function once(emitter, event) { * @param {import('./types').BazelRunOptions | undefined} options */ async function runBazelRunner(runner, args, options = undefined) { - const proc = ChildProcess.spawn(runner, args, { + const proc = ChildProcess.spawn(runner, options?.quiet ? [...args, '--color=no'] : args, { env: { ...process.env, ...options?.env, @@ -101,6 +101,15 @@ async function runBazelRunner(runner, args, options = undefined) { }), ]), ]); + + if (process.env.CI) { + // on CI it's useful to reduce the logging output, but we still want to see basic info from Bazel so continue to log the INFO: lines from bazel + for (const line of buffer) { + if (line.startsWith('INFO:') && !line.startsWith('INFO: From ')) { + console.log(options?.logPrefix ? `${options.logPrefix} ${line}` : line); + } + } + } } /** diff --git a/packages/kbn-eslint-plugin-eslint/rules/module_migration.js b/packages/kbn-eslint-plugin-eslint/rules/module_migration.js index 04fbbfd35a565..e34e17a2587ae 100644 --- a/packages/kbn-eslint-plugin-eslint/rules/module_migration.js +++ b/packages/kbn-eslint-plugin-eslint/rules/module_migration.js @@ -12,7 +12,8 @@ const KIBANA_ROOT = findKibanaRoot(); function checkModuleNameNode(context, mappings, node, desc = 'Imported') { const mapping = mappings.find( - (mapping) => mapping.from === node.value || node.value.startsWith(`${mapping.from}/`) + (mapping) => + mapping.from === node.value || (!mapping.exact && node.value.startsWith(`${mapping.from}/`)) ); if (!mapping) { @@ -85,6 +86,10 @@ module.exports = { exclude: { type: 'array', }, + exact: { + type: 'boolean', + default: false, + }, }, anyOf: [ { diff --git a/packages/kbn-eslint-plugin-eslint/rules/module_migration.test.js b/packages/kbn-eslint-plugin-eslint/rules/module_migration.test.js index 2ecaf283133e7..7e8372f21350a 100644 --- a/packages/kbn-eslint-plugin-eslint/rules/module_migration.test.js +++ b/packages/kbn-eslint-plugin-eslint/rules/module_migration.test.js @@ -37,6 +37,21 @@ ruleTester.run('@kbn/eslint/module-migration', rule, { ], ], }, + + { + code: dedent` + import "foo/bar" + `, + options: [ + [ + { + from: 'foo', + to: 'bar', + exact: true, + }, + ], + ], + }, ], invalid: [ @@ -148,5 +163,31 @@ ruleTester.run('@kbn/eslint/module-migration', rule, { import '../../common/foo' `, }, + + { + code: dedent` + import 'foo' + import 'foo/bar' + `, + options: [ + [ + { + from: 'foo', + to: 'bar', + exact: true, + }, + ], + ], + errors: [ + { + line: 1, + message: 'Imported module "foo" should be "bar"', + }, + ], + output: dedent` + import 'bar' + import 'foo/bar' + `, + }, ], }); diff --git a/packages/kbn-optimizer/postcss.config.js b/packages/kbn-optimizer/postcss.config.js index 32b49a1017559..9097a77cd7a87 100644 --- a/packages/kbn-optimizer/postcss.config.js +++ b/packages/kbn-optimizer/postcss.config.js @@ -6,6 +6,15 @@ * Side Public License, v 1. */ +const autoprefixer = require('autoprefixer'); +const cssnano = require('cssnano'); +const preset = require('cssnano-preset-default'); + module.exports = { - plugins: [require('autoprefixer')()], + plugins: [ + autoprefixer(), + cssnano({ + preset: preset({ discardComments: false }), + }), + ], }; diff --git a/packages/kbn-optimizer/src/integration_tests/__snapshots__/basic_optimization.test.ts.snap b/packages/kbn-optimizer/src/integration_tests/__snapshots__/basic_optimization.test.ts.snap index 52a183bc04b45..49d77b7882f4a 100644 --- a/packages/kbn-optimizer/src/integration_tests/__snapshots__/basic_optimization.test.ts.snap +++ b/packages/kbn-optimizer/src/integration_tests/__snapshots__/basic_optimization.test.ts.snap @@ -234,7 +234,7 @@ exports[`prepares assets for distribution: bar bundle 1`] = ` }; })(), i = []; - function c(e) { + function a(e) { for (var n = -1, t = 0; t < i.length; t++) if (i[t].identifier === e) { n = t; @@ -242,15 +242,15 @@ exports[`prepares assets for distribution: bar bundle 1`] = ` } return n; } - function a(e, n) { + function c(e, n) { for (var t = {}, r = [], o = 0; o < e.length; o++) { - var a = e[o], - u = n.base ? a[0] + n.base : a[0], + var c = e[o], + u = n.base ? c[0] + n.base : c[0], s = t[u] || 0, f = \\"\\".concat(u, \\" \\").concat(s); t[u] = s + 1; - var l = c(f), - d = { css: a[1], media: a[2], sourceMap: a[3] }; + var l = a(f), + d = { css: c[1], media: c[2], sourceMap: c[3] }; -1 !== l ? (i[l].references++, i[l].updater(d)) : i.push({ identifier: f, updater: v(d, n), references: 1 }), @@ -273,12 +273,12 @@ exports[`prepares assets for distribution: bar bundle 1`] = ` ) e.insert(n); else { - var c = o(e.insert || \\"head\\"); - if (!c) + var a = o(e.insert || \\"head\\"); + if (!a) throw new Error( \\"Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.\\" ); - c.appendChild(n); + a.appendChild(n); } return n; } @@ -297,9 +297,9 @@ exports[`prepares assets for distribution: bar bundle 1`] = ` if (e.styleSheet) e.styleSheet.cssText = f(n, o); else { var i = document.createTextNode(o), - c = e.childNodes; - c[n] && e.removeChild(c[n]), - c.length ? e.insertBefore(i, c[n]) : e.appendChild(i); + a = e.childNodes; + a[n] && e.removeChild(a[n]), + a.length ? e.insertBefore(i, a[n]) : e.appendChild(i); } } function d(e, n, t) { @@ -362,18 +362,18 @@ exports[`prepares assets for distribution: bar bundle 1`] = ` (void 0 === r && (r = Boolean(window && document && document.all && !window.atob)), r)); - var t = a((e = e || []), n); + var t = c((e = e || []), n); return function (e) { if ( ((e = e || []), \\"[object Array]\\" === Object.prototype.toString.call(e)) ) { for (var r = 0; r < t.length; r++) { - var o = c(t[r]); + var o = a(t[r]); i[o].references--; } - for (var u = a(e, n), s = 0; s < t.length; s++) { - var f = c(t[s]); + for (var u = c(e, n), s = 0; s < t.length; s++) { + var f = a(t[s]); 0 === i[f].references && (i[f].updater(), i.splice(f, 1)); } t = u; @@ -393,23 +393,23 @@ exports[`prepares assets for distribution: bar bundle 1`] = ` r, o, i = e[1] || \\"\\", - c = e[3]; - if (!c) return i; + a = e[3]; + if (!a) return i; if (n && \\"function\\" == typeof btoa) { - var a = - ((t = c), + var c = + ((t = a), (r = btoa(unescape(encodeURIComponent(JSON.stringify(t))))), (o = \\"sourceMappingURL=data:application/json;charset=utf-8;base64,\\".concat( r )), \\"/*# \\".concat(o, \\" */\\")), - u = c.sources.map(function (e) { + u = a.sources.map(function (e) { return \\"/*# sourceURL=\\" - .concat(c.sourceRoot || \\"\\") + .concat(a.sourceRoot || \\"\\") .concat(e, \\" */\\"); }); - return [i].concat(u).concat([a]).join(\\"\\\\n\\"); + return [i].concat(u).concat([c]).join(\\"\\\\n\\"); } return [i].join(\\"\\\\n\\"); })(n, e); @@ -421,11 +421,11 @@ exports[`prepares assets for distribution: bar bundle 1`] = ` var o = {}; if (r) for (var i = 0; i < this.length; i++) { - var c = this[i][0]; - null != c && (o[c] = !0); + var a = this[i][0]; + null != a && (o[a] = !0); } - for (var a = 0; a < e.length; a++) { - var u = [].concat(e[a]); + for (var c = 0; c < e.length; c++) { + var u = [].concat(e[c]); (r && o[u[0]]) || (t && (u[2] @@ -465,11 +465,7 @@ exports[`prepares assets for distribution: bar bundle 1`] = ` r(o, { insert: \\"head\\", singleton: !1 }), (e.exports = o.locals || {}); }, function (e, n, t) { - (n = t(1)(!1)).push([ - e.i, - \\"p{background-color:rebeccapurple}body{width:12}\\\\n\\", - \\"\\", - ]), + (n = t(1)(!1)).push([e.i, \\"p{background-color:#639}body{width:12}\\", \\"\\"]), (e.exports = n); }, function (e, n, t) { @@ -480,11 +476,7 @@ exports[`prepares assets for distribution: bar bundle 1`] = ` r(o, { insert: \\"head\\", singleton: !1 }), (e.exports = o.locals || {}); }, function (e, n, t) { - (n = t(1)(!1)).push([ - e.i, - \\"p{background-color:rebeccapurple}body{width:13}\\\\n\\", - \\"\\", - ]), + (n = t(1)(!1)).push([e.i, \\"p{background-color:#639}body{width:13}\\", \\"\\"]), (e.exports = n); }, function (e, n, t) { @@ -503,7 +495,7 @@ exports[`prepares assets for distribution: bar bundle 1`] = ` r(o, { insert: \\"head\\", singleton: !1 }), (e.exports = o.locals || {}); }, function (e, n, t) { - (n = t(1)(!1)).push([e.i, \\"body{color:green}\\\\n\\", \\"\\"]), (e.exports = n); + (n = t(1)(!1)).push([e.i, \\"body{color:green}\\", \\"\\"]), (e.exports = n); }, function (e, n, t) { var r = t(0), @@ -513,7 +505,7 @@ exports[`prepares assets for distribution: bar bundle 1`] = ` r(o, { insert: \\"head\\", singleton: !1 }), (e.exports = o.locals || {}); }, function (e, n, t) { - (n = t(1)(!1)).push([e.i, \\"body{color:green}\\\\n\\", \\"\\"]), (e.exports = n); + (n = t(1)(!1)).push([e.i, \\"body{color:green}\\", \\"\\"]), (e.exports = n); }, function (e, n, t) { \\"use strict\\"; diff --git a/packages/kbn-optimizer/src/worker/webpack.config.ts b/packages/kbn-optimizer/src/worker/webpack.config.ts index 13e342356a2bc..ccc99a8a42671 100644 --- a/packages/kbn-optimizer/src/worker/webpack.config.ts +++ b/packages/kbn-optimizer/src/worker/webpack.config.ts @@ -144,6 +144,15 @@ export function getWebpackConfig(bundle: Bundle, bundleRefs: BundleRefs, worker: sourceMap: !worker.dist, }, }, + { + loader: 'postcss-loader', + options: { + sourceMap: !worker.dist, + postcssOptions: { + config: require.resolve('@kbn/optimizer/postcss.config.js'), + }, + }, + }, ], }, { diff --git a/packages/kbn-securitysolution-autocomplete/src/field_value_lists/index.tsx b/packages/kbn-securitysolution-autocomplete/src/field_value_lists/index.tsx index 64432b1480df3..2d87c3523a839 100644 --- a/packages/kbn-securitysolution-autocomplete/src/field_value_lists/index.tsx +++ b/packages/kbn-securitysolution-autocomplete/src/field_value_lists/index.tsx @@ -16,7 +16,7 @@ import { filterFieldToList } from '../filter_field_to_list'; import { getGenericComboBoxProps } from '../get_generic_combo_box_props'; // TODO: I have to use any here for now, but once this is available below, we should use the correct types, https://github.com/elastic/kibana/issues/100715 -// import { HttpStart } from 'kibana/public'; +// import { HttpStart } from '@kbn/core/public'; type HttpStart = any; import * as i18n from '../translations'; diff --git a/packages/kbn-securitysolution-io-ts-alerting-types/src/type/index.ts b/packages/kbn-securitysolution-io-ts-alerting-types/src/type/index.ts index 0e74037878992..ee9b410746da0 100644 --- a/packages/kbn-securitysolution-io-ts-alerting-types/src/type/index.ts +++ b/packages/kbn-securitysolution-io-ts-alerting-types/src/type/index.ts @@ -15,6 +15,7 @@ export const type = t.keyof({ saved_query: null, threshold: null, threat_match: null, + new_terms: null, }); export type Type = t.TypeOf; diff --git a/packages/kbn-securitysolution-io-ts-types/src/index.ts b/packages/kbn-securitysolution-io-ts-types/src/index.ts index 0bb99e4c766e7..01f9b32ca31af 100644 --- a/packages/kbn-securitysolution-io-ts-types/src/index.ts +++ b/packages/kbn-securitysolution-io-ts-types/src/index.ts @@ -18,6 +18,7 @@ export * from './empty_string_array'; export * from './enumeration'; export * from './iso_date_string'; export * from './import_query_schema'; +export * from './limited_size_array'; export * from './non_empty_array'; export * from './non_empty_or_nullable_string_array'; export * from './non_empty_string_array'; diff --git a/packages/kbn-securitysolution-io-ts-types/src/limited_size_array/index.test.ts b/packages/kbn-securitysolution-io-ts-types/src/limited_size_array/index.test.ts new file mode 100644 index 0000000000000..72982fe54e241 --- /dev/null +++ b/packages/kbn-securitysolution-io-ts-types/src/limited_size_array/index.test.ts @@ -0,0 +1,112 @@ +/* + * 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 * as t from 'io-ts'; + +import { pipe } from 'fp-ts/lib/pipeable'; +import { left } from 'fp-ts/lib/Either'; +import { LimitedSizeArray } from '.'; +import { foldLeftRight, getPaths } from '@kbn/securitysolution-io-ts-utils'; + +const testSchema = t.keyof({ + valid: true, + also_valid: true, +}); +type TestSchema = t.TypeOf; + +const limitedSizeArraySchema = LimitedSizeArray({ + codec: testSchema, + minSize: 1, + maxSize: 2, + name: 'TestSchemaArray', +}); + +describe('limited size array', () => { + test('it should generate the correct name for limited size array', () => { + const newTestSchema = LimitedSizeArray({ codec: testSchema }); + expect(newTestSchema.name).toEqual('LimitedSizeArray<"valid" | "also_valid">'); + }); + + test('it should use a supplied name override', () => { + const newTestSchema = LimitedSizeArray({ codec: testSchema, name: 'someName' }); + expect(newTestSchema.name).toEqual('someName'); + }); + + test('it should not validate an array smaller than min size', () => { + const payload: string[] = []; + const decoded = limitedSizeArraySchema.decode(payload); + const message = pipe(decoded, foldLeftRight); + + expect(getPaths(left(message.errors))).toEqual([ + 'Array size (0) is out of bounds: min: 1, max: 2', + ]); + expect(message.schema).toEqual({}); + }); + + test('it should validate an array of testSchema that is within min and max size', () => { + const payload: TestSchema[] = ['valid']; + const decoded = limitedSizeArraySchema.decode(payload); + const message = pipe(decoded, foldLeftRight); + + expect(getPaths(left(message.errors))).toEqual([]); + expect(message.schema).toEqual(payload); + }); + + test('it should validate an array of valid testSchema strings that is within min and max size', () => { + const payload: TestSchema[] = ['valid', 'also_valid']; + const decoded = limitedSizeArraySchema.decode(payload); + const message = pipe(decoded, foldLeftRight); + + expect(getPaths(left(message.errors))).toEqual([]); + expect(message.schema).toEqual(payload); + }); + + test('it should not validate an array bigger than max size', () => { + const payload: TestSchema[] = ['valid', 'also_valid', 'also_valid']; + const decoded = limitedSizeArraySchema.decode(payload); + const message = pipe(decoded, foldLeftRight); + + expect(getPaths(left(message.errors))).toEqual([ + 'Array size (3) is out of bounds: min: 1, max: 2', + ]); + expect(message.schema).toEqual({}); + }); + + test('it should not validate an array with a number', () => { + const payload = ['valid', 123]; + const decoded = limitedSizeArraySchema.decode(payload); + const message = pipe(decoded, foldLeftRight); + + expect(getPaths(left(message.errors))).toEqual([ + 'Invalid value "123" supplied to "TestSchemaArray"', + ]); + expect(message.schema).toEqual({}); + }); + + test('it should not validate an array with an invalid string', () => { + const payload = ['valid', 'invalid']; + const decoded = limitedSizeArraySchema.decode(payload); + const message = pipe(decoded, foldLeftRight); + + expect(getPaths(left(message.errors))).toEqual([ + 'Invalid value "invalid" supplied to "TestSchemaArray"', + ]); + expect(message.schema).toEqual({}); + }); + + test('it should not validate a null value', () => { + const payload = null; + const decoded = limitedSizeArraySchema.decode(payload); + const message = pipe(decoded, foldLeftRight); + + expect(getPaths(left(message.errors))).toEqual([ + 'Invalid value "null" supplied to "TestSchemaArray"', + ]); + expect(message.schema).toEqual({}); + }); +}); diff --git a/packages/kbn-securitysolution-io-ts-types/src/limited_size_array/index.ts b/packages/kbn-securitysolution-io-ts-types/src/limited_size_array/index.ts new file mode 100644 index 0000000000000..54d0aa9dfe2fc --- /dev/null +++ b/packages/kbn-securitysolution-io-ts-types/src/limited_size_array/index.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 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 * as t from 'io-ts'; +import { Either } from 'fp-ts/lib/Either'; + +export const LimitedSizeArray = ({ + codec, + minSize, + maxSize, + name = `LimitedSizeArray<${codec.name}>`, +}: { + codec: C; + minSize?: number; + maxSize?: number; + name?: string; +}) => { + const arrType = t.array(codec); + type ArrType = t.TypeOf; + return new t.Type( + name, + arrType.is, + (input, context): Either => { + if ( + Array.isArray(input) && + ((minSize && input.length < minSize) || (maxSize && input.length > maxSize)) + ) { + return t.failure( + input, + context, + `Array size (${input.length}) is out of bounds: min: ${ + minSize ?? 'not specified' + }, max: ${maxSize ?? 'not specified'}` + ); + } else { + return arrType.validate(input, context); + } + }, + t.identity + ); +}; diff --git a/packages/kbn-securitysolution-rules/src/rule_type_constants.ts b/packages/kbn-securitysolution-rules/src/rule_type_constants.ts index baf355897b7b5..b97c71caaefe5 100644 --- a/packages/kbn-securitysolution-rules/src/rule_type_constants.ts +++ b/packages/kbn-securitysolution-rules/src/rule_type_constants.ts @@ -21,3 +21,4 @@ export const ML_RULE_TYPE_ID = `${RULE_TYPE_PREFIX}.mlRule` as const; export const QUERY_RULE_TYPE_ID = `${RULE_TYPE_PREFIX}.queryRule` as const; export const SAVED_QUERY_RULE_TYPE_ID = `${RULE_TYPE_PREFIX}.savedQueryRule` as const; export const THRESHOLD_RULE_TYPE_ID = `${RULE_TYPE_PREFIX}.thresholdRule` as const; +export const NEW_TERMS_RULE_TYPE_ID = `${RULE_TYPE_PREFIX}.newTermsRule` as const; diff --git a/packages/kbn-securitysolution-rules/src/rule_type_mappings.ts b/packages/kbn-securitysolution-rules/src/rule_type_mappings.ts index 6036c6418e20c..d7919ae013eca 100644 --- a/packages/kbn-securitysolution-rules/src/rule_type_mappings.ts +++ b/packages/kbn-securitysolution-rules/src/rule_type_mappings.ts @@ -10,6 +10,7 @@ import { EQL_RULE_TYPE_ID, INDICATOR_RULE_TYPE_ID, ML_RULE_TYPE_ID, + NEW_TERMS_RULE_TYPE_ID, QUERY_RULE_TYPE_ID, SAVED_QUERY_RULE_TYPE_ID, THRESHOLD_RULE_TYPE_ID, @@ -25,6 +26,7 @@ export const ruleTypeMappings = { saved_query: SAVED_QUERY_RULE_TYPE_ID, threat_match: INDICATOR_RULE_TYPE_ID, threshold: THRESHOLD_RULE_TYPE_ID, + new_terms: NEW_TERMS_RULE_TYPE_ID, }; type RuleTypeMappings = typeof ruleTypeMappings; diff --git a/src/core/server/plugins/types.ts b/src/core/server/plugins/types.ts index a07eff177108e..d41be740018a7 100644 --- a/src/core/server/plugins/types.ts +++ b/src/core/server/plugins/types.ts @@ -61,7 +61,7 @@ export type ExposedToBrowserDescriptor = { * ```typescript * // my_plugin/server/index.ts * import { schema, TypeOf } from '@kbn/config-schema'; - * import { PluginConfigDescriptor } from 'kibana/server'; + * import { PluginConfigDescriptor } from '@kbn/core/server'; * * const configSchema = schema.object({ * secret: schema.string({ defaultValue: 'Only on server' }), diff --git a/src/dev/build/tasks/generate_packages_optimized_assets.ts b/src/dev/build/tasks/generate_packages_optimized_assets.ts index 8469a769d8c0b..d1a8ec6d20824 100644 --- a/src/dev/build/tasks/generate_packages_optimized_assets.ts +++ b/src/dev/build/tasks/generate_packages_optimized_assets.ts @@ -44,12 +44,8 @@ async function optimizeAssets(log: ToolingLog, assetDir: string) { log.debug('Minify CSS'); await asyncPipeline( vfs.src(['**/*.css'], { cwd: assetDir }), - gulpPostCSS([ - // eslint-disable-next-line @typescript-eslint/no-var-requires - require('cssnano')({ - preset: ['default', { discardComments: false }], - }), - ]), + // eslint-disable-next-line @typescript-eslint/no-var-requires + gulpPostCSS(require('@kbn/optimizer/postcss.config.js').plugins), vfs.dest(assetDir) ); diff --git a/src/plugins/chart_expressions/expression_xy/public/components/tooltip/tooltip.test.tsx b/src/plugins/chart_expressions/expression_xy/public/components/tooltip/tooltip.test.tsx index 389c6c7571b24..26c1c7ff785a2 100644 --- a/src/plugins/chart_expressions/expression_xy/public/components/tooltip/tooltip.test.tsx +++ b/src/plugins/chart_expressions/expression_xy/public/components/tooltip/tooltip.test.tsx @@ -32,6 +32,7 @@ const getSeriesIdentifier = ({ seriesSplitAccessors: Map; }): XYChartSeriesIdentifier => ({ specId: generateSeriesId({ layerId, xAccessor }, splitAccessors, yAccessor), + xAccessor: xAccessor ?? 'x', yAccessor: yAccessor ?? 'a', splitAccessors: seriesSplitAccessors, seriesKeys: [], diff --git a/src/plugins/chart_expressions/expression_xy/public/components/xy_chart.test.tsx b/src/plugins/chart_expressions/expression_xy/public/components/xy_chart.test.tsx index d09eedfaaf7b7..4de0f274697b0 100644 --- a/src/plugins/chart_expressions/expression_xy/public/components/xy_chart.test.tsx +++ b/src/plugins/chart_expressions/expression_xy/public/components/xy_chart.test.tsx @@ -1896,6 +1896,7 @@ describe('XYChart component', () => { seriesKeys: [], key: '', specId: 'a', + xAccessor: '', yAccessor: '', splitAccessors: new Map(), }; diff --git a/src/plugins/console/public/application/models/legacy_core_editor/mode/worker/worker.js b/src/plugins/console/public/application/models/legacy_core_editor/mode/worker/worker.js index 35faba08d8739..c7938437164f7 100644 --- a/src/plugins/console/public/application/models/legacy_core_editor/mode/worker/worker.js +++ b/src/plugins/console/public/application/models/legacy_core_editor/mode/worker/worker.js @@ -1950,8 +1950,8 @@ ace.define( uffff; if (ch === '"') { - let c = '""'; - if (text.substring(at, c.length) === c) { + // If the current and the next characters are equal to "", empty string or start of triple quoted strings + if (peek(0) === '"' && peek(1) === '"') { // literal next('"'); next('"'); diff --git a/src/plugins/console/server/lib/proxy_request.test.ts b/src/plugins/console/server/lib/proxy_request.test.ts index 98c63d9685c87..a5b60895d68ce 100644 --- a/src/plugins/console/server/lib/proxy_request.test.ts +++ b/src/plugins/console/server/lib/proxy_request.test.ts @@ -6,11 +6,12 @@ * Side Public License, v 1. */ -import http, { ClientRequest } from 'http'; +import http, { ClientRequest, OutgoingHttpHeaders } from 'http'; import * as sinon from 'sinon'; import { proxyRequest } from './proxy_request'; import { URL } from 'url'; import { fail } from 'assert'; +import { toURL } from './utils'; describe(`Console's send request`, () => { let sandbox: sinon.SinonSandbox; @@ -29,6 +30,25 @@ describe(`Console's send request`, () => { fakeRequest = null as any; }); + const sendProxyRequest = async ({ + headers = {}, + uri = new URL('http://noone.nowhere.none'), + timeout = 3000, + }: { + headers?: OutgoingHttpHeaders; + uri?: URL; + timeout?: number; + }) => { + return await proxyRequest({ + agent: null as any, + headers, + method: 'get', + payload: null as any, + uri, + timeout, + }); + }; + it('correctly implements timeout and abort mechanism', async () => { fakeRequest = { destroy: sinon.stub(), @@ -36,14 +56,7 @@ describe(`Console's send request`, () => { once() {}, } as any; try { - await proxyRequest({ - agent: null as any, - headers: {}, - method: 'get', - payload: null as any, - timeout: 0, // immediately timeout - uri: new URL('http://noone.nowhere.none'), - }); + await sendProxyRequest({ timeout: 0 }); // immediately timeout fail('Should not reach here!'); } catch (e) { expect(e.message).toEqual('Client request timeout'); @@ -63,16 +76,9 @@ describe(`Console's send request`, () => { } as any; // Don't set a host header this time - const result1 = await proxyRequest({ - agent: null as any, - headers: {}, - method: 'get', - payload: null as any, - timeout: 30000, - uri: new URL('http://noone.nowhere.none'), - }); + const defaultResult = await sendProxyRequest({}); - expect(result1).toEqual('done'); + expect(defaultResult).toEqual('done'); const [httpRequestOptions1] = stub.firstCall.args; @@ -83,16 +89,9 @@ describe(`Console's send request`, () => { }); // Set a host header - const result2 = await proxyRequest({ - agent: null as any, - headers: { Host: 'myhost' }, - method: 'get', - payload: null as any, - timeout: 30000, - uri: new URL('http://noone.nowhere.none'), - }); + const resultWithHostHeader = await sendProxyRequest({ headers: { Host: 'myhost' } }); - expect(result2).toEqual('done'); + expect(resultWithHostHeader).toEqual('done'); const [httpRequestOptions2] = stub.secondCall.args; expect((httpRequestOptions2 as any).headers).toEqual({ @@ -102,7 +101,7 @@ describe(`Console's send request`, () => { }); }); - describe('with percent-encoded uri pathname', () => { + describe('with request path', () => { beforeEach(() => { fakeRequest = { abort: sinon.stub(), @@ -115,39 +114,42 @@ describe(`Console's send request`, () => { } as any; }); - it('should decode percent-encoded uri pathname and encode it correctly', async () => { - const uri = new URL( - `http://noone.nowhere.none/%{[@metadata][beat]}-%{[@metadata][version]}-2020.08.23` - ); - const result = await proxyRequest({ - agent: null as any, - headers: {}, - method: 'get', - payload: null as any, - timeout: 30000, - uri, + const verifyRequestPath = async ({ + initialPath, + expectedPath, + }: { + initialPath: string; + expectedPath: string; + uri?: URL; + }) => { + const result = await sendProxyRequest({ + uri: toURL('http://noone.nowhere.none', initialPath), }); - expect(result).toEqual('done'); const [httpRequestOptions] = stub.firstCall.args; - expect((httpRequestOptions as any).path).toEqual( - '/%25%7B%5B%40metadata%5D%5Bbeat%5D%7D-%25%7B%5B%40metadata%5D%5Bversion%5D%7D-2020.08.23' - ); + expect((httpRequestOptions as any).path).toEqual(expectedPath); + }; + + it('should correctly encode invalid URL characters included in path', async () => { + await verifyRequestPath({ + initialPath: '%{[@metadata][beat]}-%{[@metadata][version]}-2020.08.23', + expectedPath: + '/%25%7B%5B%40metadata%5D%5Bbeat%5D%7D-%25%7B%5B%40metadata%5D%5Bversion%5D%7D-2020.08.23?pretty=true', + }); }); - it('should issue request with date-math format', async () => { - const result = await proxyRequest({ - agent: null as any, - headers: {}, - method: 'get', - payload: null as any, - timeout: 30000, - uri: new URL(`http://noone.nowhere.none/%3Cmy-index-%7Bnow%2Fd%7D%3E`), + it('should not encode the path if it is encoded', async () => { + await verifyRequestPath({ + initialPath: '%3Cmy-index-%7Bnow%2Fd%7D%3E', + expectedPath: '/%3Cmy-index-%7Bnow%2Fd%7D%3E?pretty=true', }); + }); - expect(result).toEqual('done'); - const [httpRequestOptions] = stub.firstCall.args; - expect((httpRequestOptions as any).path).toEqual('/%3Cmy-index-%7Bnow%2Fd%7D%3E'); + it('should correctly encode path with query params', async () => { + await verifyRequestPath({ + initialPath: '_index/.test?q=something&v=something', + expectedPath: '/_index/.test?q=something&v=something&pretty=true', + }); }); }); }); diff --git a/src/plugins/console/server/lib/proxy_request.ts b/src/plugins/console/server/lib/proxy_request.ts index 4a8839d1d8583..875345be52055 100644 --- a/src/plugins/console/server/lib/proxy_request.ts +++ b/src/plugins/console/server/lib/proxy_request.ts @@ -11,8 +11,7 @@ import https from 'https'; import net from 'net'; import stream from 'stream'; import Boom from '@hapi/boom'; -import { URL, URLSearchParams } from 'url'; -import { trimStart } from 'lodash'; +import { URL } from 'url'; interface Args { method: 'get' | 'post' | 'put' | 'delete' | 'patch' | 'head'; @@ -31,22 +30,6 @@ interface Args { const sanitizeHostname = (hostName: string): string => hostName.trim().replace(/^\[/, '').replace(/\]$/, ''); -/** - * Node URL percent-encodes any invalid characters in the pathname which results a 400 bad request error. - * We need to decode the percent-encoded pathname, and encode it correctly with encodeURIComponent - */ - -const encodePathname = (pathname: string) => { - const decodedPath = new URLSearchParams(`path=${pathname}`).get('path') ?? ''; - - // Skip if it is valid - if (pathname === decodedPath) { - return pathname; - } - - return `/${encodeURIComponent(trimStart(decodedPath, '/'))}`; -}; - // We use a modified version of Hapi's Wreck because Hapi, Axios, and Superagent don't support GET requests // with bodies, but ES APIs do. Similarly with DELETE requests with bodies. Another library, `request` // diverged too much from current behaviour. @@ -59,9 +42,9 @@ export const proxyRequest = ({ payload, rejectUnauthorized, }: Args) => { - const { hostname, port, protocol, pathname, search } = uri; + const { hostname, port, protocol, search, pathname } = uri; const client = uri.protocol === 'https:' ? https : http; - const encodedPath = encodePathname(pathname); + let resolved = false; let resolve: (res: http.IncomingMessage) => void; @@ -84,7 +67,7 @@ export const proxyRequest = ({ host: sanitizeHostname(hostname), port: port === '' ? undefined : parseInt(port, 10), protocol, - path: `${encodedPath}${search || ''}`, + path: `${pathname}${search || ''}`, headers: { ...finalUserHeaders, 'content-type': 'application/json', diff --git a/src/plugins/console/server/lib/utils/encode_path.test.ts b/src/plugins/console/server/lib/utils/encode_path.test.ts new file mode 100644 index 0000000000000..07c7108e9d2cf --- /dev/null +++ b/src/plugins/console/server/lib/utils/encode_path.test.ts @@ -0,0 +1,37 @@ +/* + * 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 { encodePath } from './encode_path'; + +describe('encodePath', () => { + const tests = [ + { + description: 'encodes invalid URL characters', + source: '/%{[@metadata][beat]}-%{[@metadata][version]}-2020.08.23', + assert: + '/%25%7B%5B%40metadata%5D%5Bbeat%5D%7D-%25%7B%5B%40metadata%5D%5Bversion%5D%7D-2020.08.23', + }, + { + description: 'ignores encoded characters', + source: '/my-index/_doc/this%2Fis%2Fa%2Fdoc', + assert: '/my-index/_doc/this%2Fis%2Fa%2Fdoc', + }, + { + description: 'ignores slashes between', + source: '_index/test/.test', + assert: '_index/test/.test', + }, + ]; + + tests.forEach(({ description, source, assert }) => { + test(description, () => { + const result = encodePath(source); + expect(result).toEqual(assert); + }); + }); +}); diff --git a/src/plugins/console/server/lib/utils/encode_path.ts b/src/plugins/console/server/lib/utils/encode_path.ts new file mode 100644 index 0000000000000..273c60d3f66e4 --- /dev/null +++ b/src/plugins/console/server/lib/utils/encode_path.ts @@ -0,0 +1,28 @@ +/* + * 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 { URLSearchParams } from 'url'; +import { trimStart } from 'lodash'; + +export const encodePath = (path: string) => { + const decodedPath = new URLSearchParams(`path=${path}`).get('path') ?? ''; + // Take the initial path and compare it with the decoded path. + // If the result is not the same, the path is encoded. + const isEncoded = trimStart(path, '/') !== trimStart(decodedPath, '/'); + + // Return the initial path if it is already encoded + if (isEncoded) { + return path; + } + + // Encode every component except slashes + return path + .split('/') + .map((component) => encodeURIComponent(component)) + .join('/'); +}; diff --git a/src/core/index.ts b/src/plugins/console/server/lib/utils/index.ts similarity index 78% rename from src/core/index.ts rename to src/plugins/console/server/lib/utils/index.ts index 2dad5167d5524..0da3e36b575e3 100644 --- a/src/core/index.ts +++ b/src/plugins/console/server/lib/utils/index.ts @@ -6,7 +6,5 @@ * Side Public License, v 1. */ -import * as Public from './public'; -import * as Server from './server'; - -export { Public, Server }; +export { encodePath } from './encode_path'; +export { toURL } from './to_url'; diff --git a/src/plugins/console/server/lib/utils/to_url.test.ts b/src/plugins/console/server/lib/utils/to_url.test.ts new file mode 100644 index 0000000000000..a28e6822fe7a0 --- /dev/null +++ b/src/plugins/console/server/lib/utils/to_url.test.ts @@ -0,0 +1,38 @@ +/* + * 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 { toURL } from './to_url'; + +describe('toURL', () => { + it('should replace + sign in query params with %2b', () => { + const urlResult = toURL( + 'http://nowhere.none', + 'test/?q=create_date:[2020-05-10T08:00:00.000+08:00 TO *]' + ); + expect(urlResult.search).toEqual( + '?q=create_date%3A%5B2020-05-10T08%3A00%3A00.000%2B08%3A00+TO+*%5D&pretty=true' + ); + }); + + describe('with a path without the "pretty" search param', () => { + it('should append the "pretty" search param', () => { + const urlResult = toURL('http://nowhere.none', 'test'); + expect(urlResult.href).toEqual('http://nowhere.none/test?pretty=true'); + }); + }); + + it('should handle encoding pathname', () => { + const urlResult = toURL( + 'http://nowhere.none', + '/%{[@metadata][beat]}-%{[@metadata][version]}-2020.08.23' + ); + expect(urlResult.pathname).toEqual( + '/%25%7B%5B%40metadata%5D%5Bbeat%5D%7D-%25%7B%5B%40metadata%5D%5Bversion%5D%7D-2020.08.23' + ); + }); +}); diff --git a/src/plugins/console/server/lib/utils/to_url.ts b/src/plugins/console/server/lib/utils/to_url.ts new file mode 100644 index 0000000000000..a3ca956faa33c --- /dev/null +++ b/src/plugins/console/server/lib/utils/to_url.ts @@ -0,0 +1,34 @@ +/* + * 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 { URL } from 'url'; +import { trimEnd, trimStart } from 'lodash'; +import { encodePath } from './encode_path'; + +export function toURL(base: string, path: string) { + const [pathname, query = ''] = path.split('?'); + + // if there is a '+' sign in query e.g. ?q=create_date:[2020-05-10T08:00:00.000+08:00 TO *] + // node url encodes it as a whitespace which results in a faulty request + // we need to replace '+' with '%2b' to encode it correctly + if (/\+/g.test(query)) { + path = `${pathname}?${query.replace(/\+/g, '%2b')}`; + } + const urlResult = new URL(`${trimEnd(base, '/')}/${trimStart(path, '/')}`); + // Appending pretty here to have Elasticsearch do the JSON formatting, as doing + // in JS can lead to data loss (7.0 will get munged into 7, thus losing indication of + // measurement precision) + if (!urlResult.searchParams.get('pretty')) { + urlResult.searchParams.append('pretty', 'true'); + } + + // Node URL percent-encodes any invalid characters in url, which results in a bad request in some cases. E.g. urls with % character + // To fix this, we set the pathname to the correctly encoded path here + urlResult.pathname = encodePath(pathname); + return urlResult; +} diff --git a/src/plugins/console/server/routes/api/console/proxy/create_handler.ts b/src/plugins/console/server/routes/api/console/proxy/create_handler.ts index 1fc22ca685cc5..eddefc86fcbd2 100644 --- a/src/plugins/console/server/routes/api/console/proxy/create_handler.ts +++ b/src/plugins/console/server/routes/api/console/proxy/create_handler.ts @@ -7,8 +7,7 @@ */ import { Agent, IncomingMessage } from 'http'; -import * as url from 'url'; -import { pick, trimStart, trimEnd } from 'lodash'; +import { pick } from 'lodash'; import { SemVer } from 'semver'; import { KibanaRequest, RequestHandler } from '@kbn/core/server'; @@ -27,25 +26,7 @@ import { import { RouteDependencies } from '../../..'; import { Body, Query } from './validation_config'; - -function toURL(base: string, path: string) { - const [p, query = ''] = path.split('?'); - - // if there is a '+' sign in query e.g. ?q=create_date:[2020-05-10T08:00:00.000+08:00 TO *] - // node url encodes it as a whitespace which results in a faulty request - // we need to replace '+' with '%2b' to encode it correctly - if (/\+/g.test(query)) { - path = `${p}?${query.replace(/\+/g, '%2b')}`; - } - const urlResult = new url.URL(`${trimEnd(base, '/')}/${trimStart(path, '/')}`); - // Appending pretty here to have Elasticsearch do the JSON formatting, as doing - // in JS can lead to data loss (7.0 will get munged into 7, thus losing indication of - // measurement precision) - if (!urlResult.searchParams.get('pretty')) { - urlResult.searchParams.append('pretty', 'true'); - } - return urlResult; -} +import { toURL } from '../../../../lib/utils'; function filterHeaders(originalHeaders: object, headersToKeep: string[]): object { const normalizeHeader = function (header: string) { diff --git a/src/plugins/console/server/routes/api/console/proxy/query_string.test.ts b/src/plugins/console/server/routes/api/console/proxy/query_string.test.ts index fbdc53bc5383b..b60c7e97ec5a2 100644 --- a/src/plugins/console/server/routes/api/console/proxy/query_string.test.ts +++ b/src/plugins/console/server/routes/api/console/proxy/query_string.test.ts @@ -43,7 +43,7 @@ describe('Console Proxy Route', () => { await request('GET', 'http://evil.com/test'); expect(proxyRequestMock.mock.calls.length).toBe(1); const [[args]] = (requestModule.proxyRequest as jest.Mock).mock.calls; - expect(args.uri.href).toBe('http://localhost:9200/http://evil.com/test?pretty=true'); + expect(args.uri.href).toBe('http://localhost:9200/http%3A//evil.com/test?pretty=true'); }); }); describe('starts with a slash', () => { diff --git a/src/plugins/data/common/search/aggs/agg_types.ts b/src/plugins/data/common/search/aggs/agg_types.ts index 396ca49edaf4f..43e3df6100a75 100644 --- a/src/plugins/data/common/search/aggs/agg_types.ts +++ b/src/plugins/data/common/search/aggs/agg_types.ts @@ -36,6 +36,7 @@ export const getAggTypes = () => ({ { name: METRIC_TYPES.MAX, fn: metrics.getMaxMetricAgg }, { name: METRIC_TYPES.STD_DEV, fn: metrics.getStdDeviationMetricAgg }, { name: METRIC_TYPES.CARDINALITY, fn: metrics.getCardinalityMetricAgg }, + { name: METRIC_TYPES.VALUE_COUNT, fn: metrics.getValueCountMetricAgg }, { name: METRIC_TYPES.PERCENTILES, fn: metrics.getPercentilesMetricAgg }, { name: METRIC_TYPES.PERCENTILE_RANKS, fn: metrics.getPercentileRanksMetricAgg }, { name: METRIC_TYPES.TOP_HITS, fn: metrics.getTopHitMetricAgg }, @@ -97,6 +98,7 @@ export const getAggTypesFunctions = () => [ metrics.aggBucketSum, metrics.aggFilteredMetric, metrics.aggCardinality, + metrics.aggValueCount, metrics.aggCount, metrics.aggCumulativeSum, metrics.aggDerivative, diff --git a/src/plugins/data/common/search/aggs/aggs_service.test.ts b/src/plugins/data/common/search/aggs/aggs_service.test.ts index ee40a1d76d1aa..f0425e460ae0f 100644 --- a/src/plugins/data/common/search/aggs/aggs_service.test.ts +++ b/src/plugins/data/common/search/aggs/aggs_service.test.ts @@ -84,6 +84,7 @@ describe('Aggs service', () => { "max", "std_dev", "cardinality", + "value_count", "percentiles", "percentile_ranks", "top_hits", @@ -136,6 +137,7 @@ describe('Aggs service', () => { "max", "std_dev", "cardinality", + "value_count", "percentiles", "percentile_ranks", "top_hits", diff --git a/src/plugins/data/common/search/aggs/metrics/index.ts b/src/plugins/data/common/search/aggs/metrics/index.ts index 55af141b8fcb7..492f76ccd3a08 100644 --- a/src/plugins/data/common/search/aggs/metrics/index.ts +++ b/src/plugins/data/common/search/aggs/metrics/index.ts @@ -20,6 +20,8 @@ export * from './filtered_metric_fn'; export * from './filtered_metric'; export * from './cardinality_fn'; export * from './cardinality'; +export * from './value_count_fn'; +export * from './value_count'; export * from './count'; export * from './count_fn'; export * from './cumulative_sum_fn'; diff --git a/src/plugins/data/common/search/aggs/metrics/metric_agg_type.ts b/src/plugins/data/common/search/aggs/metrics/metric_agg_type.ts index 59bbe377ba28a..6af5e18b0709e 100644 --- a/src/plugins/data/common/search/aggs/metrics/metric_agg_type.ts +++ b/src/plugins/data/common/search/aggs/metrics/metric_agg_type.ts @@ -77,9 +77,11 @@ export class MetricAggType { // Metric types where an empty set equals `zero` - const isSettableToZero = [METRIC_TYPES.CARDINALITY, METRIC_TYPES.SUM].includes( - agg.type.name as METRIC_TYPES - ); + const isSettableToZero = [ + METRIC_TYPES.CARDINALITY, + METRIC_TYPES.VALUE_COUNT, + METRIC_TYPES.SUM, + ].includes(agg.type.name as METRIC_TYPES); // Return proper values when no buckets are present // `Count` handles empty sets properly diff --git a/src/plugins/data/common/search/aggs/metrics/metric_agg_types.ts b/src/plugins/data/common/search/aggs/metrics/metric_agg_types.ts index 4174808892a16..151f18110a301 100644 --- a/src/plugins/data/common/search/aggs/metrics/metric_agg_types.ts +++ b/src/plugins/data/common/search/aggs/metrics/metric_agg_types.ts @@ -10,6 +10,7 @@ export enum METRIC_TYPES { AVG = 'avg', FILTERED_METRIC = 'filtered_metric', CARDINALITY = 'cardinality', + VALUE_COUNT = 'value_count', AVG_BUCKET = 'avg_bucket', MAX_BUCKET = 'max_bucket', MIN_BUCKET = 'min_bucket', diff --git a/src/plugins/data/common/search/aggs/metrics/value_count.ts b/src/plugins/data/common/search/aggs/metrics/value_count.ts new file mode 100644 index 0000000000000..c5cea76c88bb5 --- /dev/null +++ b/src/plugins/data/common/search/aggs/metrics/value_count.ts @@ -0,0 +1,48 @@ +/* + * 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 { i18n } from '@kbn/i18n'; +import { aggValueCountFnName } from './value_count_fn'; +import { MetricAggType, IMetricAggConfig } from './metric_agg_type'; +import { METRIC_TYPES } from './metric_agg_types'; +import { BaseAggParams } from '../types'; + +const valueCountTitle = i18n.translate('data.search.aggs.metrics.valueCountTitle', { + defaultMessage: 'Value Count', +}); + +export interface AggParamsValueCount extends BaseAggParams { + field: string; + emptyAsNull?: boolean; +} + +export const getValueCountMetricAgg = () => + new MetricAggType({ + name: METRIC_TYPES.VALUE_COUNT, + valueType: 'number', + expressionName: aggValueCountFnName, + title: valueCountTitle, + enableEmptyAsNull: true, + makeLabel(aggConfig: IMetricAggConfig) { + return i18n.translate('data.search.aggs.metrics.valueCountLabel', { + defaultMessage: 'Value count of {field}', + values: { field: aggConfig.getFieldDisplayName() }, + }); + }, + getSerializedFormat(agg) { + return { + id: 'number', + }; + }, + params: [ + { + name: 'field', + type: 'field', + }, + ], + }); diff --git a/src/plugins/data/common/search/aggs/metrics/value_count_fn.test.ts b/src/plugins/data/common/search/aggs/metrics/value_count_fn.test.ts new file mode 100644 index 0000000000000..db590244659fa --- /dev/null +++ b/src/plugins/data/common/search/aggs/metrics/value_count_fn.test.ts @@ -0,0 +1,49 @@ +/* + * 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 { functionWrapper } from '../test_helpers'; +import { aggValueCount } from './value_count_fn'; + +describe('agg_expression_functions', () => { + describe('aggValueCount', () => { + const fn = functionWrapper(aggValueCount()); + + test('required args are provided', () => { + const actual = fn({ + field: 'machine.os.keyword', + }); + expect(actual).toMatchInlineSnapshot(` + Object { + "type": "agg_type", + "value": Object { + "enabled": true, + "id": undefined, + "params": Object { + "customLabel": undefined, + "emptyAsNull": undefined, + "field": "machine.os.keyword", + "json": undefined, + "timeShift": undefined, + }, + "schema": undefined, + "type": "value_count", + }, + } + `); + }); + + test('correctly parses json string argument', () => { + const actual = fn({ + field: 'machine.os.keyword', + json: '{ "foo": true }', + }); + + expect(actual.value.params.json).toEqual('{ "foo": true }'); + }); + }); +}); diff --git a/src/plugins/data/common/search/aggs/metrics/value_count_fn.ts b/src/plugins/data/common/search/aggs/metrics/value_count_fn.ts new file mode 100644 index 0000000000000..3acf2da345d27 --- /dev/null +++ b/src/plugins/data/common/search/aggs/metrics/value_count_fn.ts @@ -0,0 +1,101 @@ +/* + * 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 { i18n } from '@kbn/i18n'; +import { ExpressionFunctionDefinition } from '@kbn/expressions-plugin/common'; +import { AggExpressionType, AggExpressionFunctionArgs, METRIC_TYPES } from '..'; + +export const aggValueCountFnName = 'aggValueCount'; + +type Input = any; +type AggArgs = AggExpressionFunctionArgs; +type Output = AggExpressionType; +type FunctionDefinition = ExpressionFunctionDefinition< + typeof aggValueCountFnName, + Input, + AggArgs, + Output +>; + +export const aggValueCount = (): FunctionDefinition => ({ + name: aggValueCountFnName, + help: i18n.translate('data.search.aggs.function.metrics.valueCount.help', { + defaultMessage: 'Generates a serialized agg config for a value count agg', + }), + type: 'agg_type', + args: { + id: { + types: ['string'], + help: i18n.translate('data.search.aggs.metrics.value_count.id.help', { + defaultMessage: 'ID for this aggregation', + }), + }, + enabled: { + types: ['boolean'], + default: true, + help: i18n.translate('data.search.aggs.metrics.value_count.enabled.help', { + defaultMessage: 'Specifies whether this aggregation should be enabled', + }), + }, + schema: { + types: ['string'], + help: i18n.translate('data.search.aggs.metrics.value_count.schema.help', { + defaultMessage: 'Schema to use for this aggregation', + }), + }, + field: { + types: ['string'], + required: true, + help: i18n.translate('data.search.aggs.metrics.value_count.field.help', { + defaultMessage: 'Field to use for this aggregation', + }), + }, + json: { + types: ['string'], + help: i18n.translate('data.search.aggs.metrics.value_count.json.help', { + defaultMessage: 'Advanced json to include when the agg is sent to Elasticsearch', + }), + }, + customLabel: { + types: ['string'], + help: i18n.translate('data.search.aggs.metrics.value_count.customLabel.help', { + defaultMessage: 'Represents a custom label for this aggregation', + }), + }, + timeShift: { + types: ['string'], + help: i18n.translate('data.search.aggs.metrics.timeShift.help', { + defaultMessage: + 'Shift the time range for the metric by a set time, for example 1h or 7d. "previous" will use the closest time range from the date histogram or time range filter.', + }), + }, + emptyAsNull: { + types: ['boolean'], + help: i18n.translate('data.search.aggs.metrics.emptyAsNull.help', { + defaultMessage: + 'If set to true, a missing value is treated as null in the resulting data table. If set to false, a "zero" is filled in', + }), + }, + }, + fn: (input, args) => { + const { id, enabled, schema, ...rest } = args; + + return { + type: 'agg_type', + value: { + id, + enabled, + schema, + type: METRIC_TYPES.VALUE_COUNT, + params: { + ...rest, + }, + }, + }; + }, +}); diff --git a/src/plugins/data/common/search/aggs/types.ts b/src/plugins/data/common/search/aggs/types.ts index 7e72365f06af0..16fac531fad94 100644 --- a/src/plugins/data/common/search/aggs/types.ts +++ b/src/plugins/data/common/search/aggs/types.ts @@ -15,6 +15,7 @@ import { aggBucketMin, aggBucketSum, aggCardinality, + aggValueCount, AggConfigs, AggConfigSerialized, aggCount, @@ -41,6 +42,7 @@ import { AggParamsBucketSum, AggParamsFilteredMetric, AggParamsCardinality, + AggParamsValueCount, AggParamsCumulativeSum, AggParamsDateHistogram, AggParamsDateRange, @@ -174,6 +176,7 @@ export interface AggParamsMapping { [METRIC_TYPES.AVG]: AggParamsAvg; [METRIC_TYPES.CARDINALITY]: AggParamsCardinality; [METRIC_TYPES.COUNT]: AggParamsCount; + [METRIC_TYPES.VALUE_COUNT]: AggParamsValueCount; [METRIC_TYPES.GEO_BOUNDS]: AggParamsGeoBounds; [METRIC_TYPES.GEO_CENTROID]: AggParamsGeoCentroid; [METRIC_TYPES.MAX]: AggParamsMax; @@ -222,6 +225,7 @@ export interface AggFunctionsMapping { aggBucketSum: ReturnType; aggFilteredMetric: ReturnType; aggCardinality: ReturnType; + aggValueCount: ReturnType; aggCount: ReturnType; aggCumulativeSum: ReturnType; aggDerivative: ReturnType; diff --git a/src/plugins/data/public/search/aggs/aggs_service.test.ts b/src/plugins/data/public/search/aggs/aggs_service.test.ts index 40cc3590a32e2..0c8067df5c7f7 100644 --- a/src/plugins/data/public/search/aggs/aggs_service.test.ts +++ b/src/plugins/data/public/search/aggs/aggs_service.test.ts @@ -53,7 +53,7 @@ describe('AggsService - public', () => { service.setup(setupDeps); const start = service.start(startDeps); expect(start.types.getAll().buckets.length).toBe(16); - expect(start.types.getAll().metrics.length).toBe(25); + expect(start.types.getAll().metrics.length).toBe(26); }); test('registers custom agg types', () => { @@ -70,7 +70,7 @@ describe('AggsService - public', () => { const start = service.start(startDeps); expect(start.types.getAll().buckets.length).toBe(17); expect(start.types.getAll().buckets.some(({ name }) => name === 'foo')).toBe(true); - expect(start.types.getAll().metrics.length).toBe(26); + expect(start.types.getAll().metrics.length).toBe(27); expect(start.types.getAll().metrics.some(({ name }) => name === 'bar')).toBe(true); }); }); diff --git a/src/plugins/data_view_field_editor/__jest__/client_integration/field_editor.test.tsx b/src/plugins/data_view_field_editor/__jest__/client_integration/field_editor.test.tsx index 1ba108492e7f9..521d7aff8f976 100644 --- a/src/plugins/data_view_field_editor/__jest__/client_integration/field_editor.test.tsx +++ b/src/plugins/data_view_field_editor/__jest__/client_integration/field_editor.test.tsx @@ -98,7 +98,7 @@ describe('', () => { test('should accept a defaultValue and onChange prop to forward the form state', async () => { const field = { name: 'foo', - type: 'date', + type: 'date' as const, script: { source: 'emit("hello")' }, }; diff --git a/src/plugins/data_view_field_editor/__jest__/client_integration/field_editor_flyout_content.helpers.ts b/src/plugins/data_view_field_editor/__jest__/client_integration/field_editor_flyout_content.helpers.ts index c3816b0bfb8c3..e54a854cbb962 100644 --- a/src/plugins/data_view_field_editor/__jest__/client_integration/field_editor_flyout_content.helpers.ts +++ b/src/plugins/data_view_field_editor/__jest__/client_integration/field_editor_flyout_content.helpers.ts @@ -34,7 +34,7 @@ export const setup = async (props?: Partial, deps?: Partial) => // Setup testbed await act(async () => { - testBed = await registerTestBed(WithFieldEditorDependencies(FieldEditorFlyoutContent, deps), { + testBed = registerTestBed(WithFieldEditorDependencies(FieldEditorFlyoutContent, deps), { memoryRouter: { wrapComponent: false, }, diff --git a/src/plugins/data_view_field_editor/__jest__/client_integration/field_editor_flyout_content.test.ts b/src/plugins/data_view_field_editor/__jest__/client_integration/field_editor_flyout_content.test.ts index a3ae323a1c3db..63eca247cca6f 100644 --- a/src/plugins/data_view_field_editor/__jest__/client_integration/field_editor_flyout_content.test.ts +++ b/src/plugins/data_view_field_editor/__jest__/client_integration/field_editor_flyout_content.test.ts @@ -36,16 +36,16 @@ describe('', () => { expect(find('flyoutTitle').text()).toBe('Create field'); }); - test('should allow a field to be provided', async () => { + test('should allow an existing field to be provided', async () => { const field = { name: 'foo', - type: 'ip', + type: 'ip' as const, script: { source: 'emit("hello world")', }, }; - const { find } = await setup({ field }); + const { find } = await setup({ fieldToEdit: field }); expect(find('flyoutTitle').text()).toBe(`Edit field 'foo'`); expect(find('nameField.input').props().value).toBe(field.name); @@ -53,15 +53,32 @@ describe('', () => { expect(find('scriptField').props().value).toBe(field.script.source); }); + test('should allow a new field to be created with initial configuration', async () => { + const fieldToCreate = { + name: 'demotestfield', + type: 'boolean' as const, + script: { source: 'emit(true)' }, + customLabel: 'cool demo test field', + format: { id: 'boolean' }, + }; + + const { find } = await setup({ fieldToCreate }); + + expect(find('flyoutTitle').text()).toBe(`Create field`); + expect(find('nameField.input').props().value).toBe(fieldToCreate.name); + expect(find('typeField').props().value).toBe(fieldToCreate.type); + expect(find('scriptField').props().value).toBe(fieldToCreate.script.source); + }); + test('should accept an "onSave" prop', async () => { const field = { name: 'foo', - type: 'date', + type: 'date' as const, script: { source: 'test=123' }, }; const onSave: jest.Mock = jest.fn(); - const { find, actions } = await setup({ onSave, field }); + const { find, actions } = await setup({ onSave, fieldToEdit: field }); await act(async () => { find('fieldSaveButton').simulate('click'); diff --git a/src/plugins/data_view_field_editor/__jest__/client_integration/field_editor_flyout_preview.helpers.ts b/src/plugins/data_view_field_editor/__jest__/client_integration/field_editor_flyout_preview.helpers.ts index 9df7de5f65d62..31d243fa699d9 100644 --- a/src/plugins/data_view_field_editor/__jest__/client_integration/field_editor_flyout_preview.helpers.ts +++ b/src/plugins/data_view_field_editor/__jest__/client_integration/field_editor_flyout_preview.helpers.ts @@ -164,7 +164,7 @@ export const setup = async (props?: Partial, deps?: Partial) => // Setup testbed await act(async () => { - testBed = await registerTestBed(WithFieldEditorDependencies(FieldEditorFlyoutContent, deps), { + testBed = registerTestBed(WithFieldEditorDependencies(FieldEditorFlyoutContent, deps), { memoryRouter: { wrapComponent: false, }, diff --git a/src/plugins/data_view_field_editor/__jest__/client_integration/field_editor_flyout_preview.test.ts b/src/plugins/data_view_field_editor/__jest__/client_integration/field_editor_flyout_preview.test.ts index 3efece9d6286f..5dd0045ab5d68 100644 --- a/src/plugins/data_view_field_editor/__jest__/client_integration/field_editor_flyout_preview.test.ts +++ b/src/plugins/data_view_field_editor/__jest__/client_integration/field_editor_flyout_preview.test.ts @@ -216,7 +216,7 @@ describe('Field editor Preview panel', () => { test('should **not** display an empty prompt editing a document with a script', async () => { const field = { name: 'foo', - type: 'ip', + type: 'ip' as const, script: { source: 'emit("hello world")', }, @@ -225,7 +225,7 @@ describe('Field editor Preview panel', () => { // We open the editor with a field to edit the empty prompt should not be there // as we have a script and we'll load the preview. await act(async () => { - testBed = await setup({ field }); + testBed = await setup({ fieldToEdit: field }); }); const { exists, component } = testBed; @@ -237,7 +237,7 @@ describe('Field editor Preview panel', () => { test('should **not** display an empty prompt editing a document with format defined', async () => { const field = { name: 'foo', - type: 'ip', + type: 'ip' as const, format: { id: 'upper', params: {}, @@ -245,7 +245,7 @@ describe('Field editor Preview panel', () => { }; await act(async () => { - testBed = await setup({ field }); + testBed = await setup({ fieldToEdit: field }); }); const { exists, component } = testBed; diff --git a/src/plugins/data_view_field_editor/public/components/field_editor/field_editor.tsx b/src/plugins/data_view_field_editor/public/components/field_editor/field_editor.tsx index 0185e1ba1c3f9..47b871196be03 100644 --- a/src/plugins/data_view_field_editor/public/components/field_editor/field_editor.tsx +++ b/src/plugins/data_view_field_editor/public/components/field_editor/field_editor.tsx @@ -64,7 +64,7 @@ export interface FieldFormInternal extends Omit } export interface Props { - /** Optional field to edit */ + /** Optional field to edit or preselected field to create */ field?: Field; /** Handler to receive state changes updates */ onChange?: (state: FieldEditorFormState) => void; diff --git a/src/plugins/data_view_field_editor/public/components/field_editor/form_fields/format_field.tsx b/src/plugins/data_view_field_editor/public/components/field_editor/form_fields/format_field.tsx index c584a59eda8d1..d90d7ef6cdf68 100644 --- a/src/plugins/data_view_field_editor/public/components/field_editor/form_fields/format_field.tsx +++ b/src/plugins/data_view_field_editor/public/components/field_editor/form_fields/format_field.tsx @@ -5,14 +5,14 @@ * in compliance with, at your election, the Elastic License 2.0 or the Server * Side Public License, v 1. */ -import React, { useState, useEffect, useRef } from 'react'; -import { EuiCallOut, EuiSpacer } from '@elastic/eui'; -import { UseField, useFormData, ES_FIELD_TYPES, useFormContext } from '../../../shared_imports'; +import { EuiCallOut, EuiSpacer } from '@elastic/eui'; +import { SerializedFieldFormat } from '@kbn/field-formats-plugin/common'; +import React, { useEffect, useRef, useState } from 'react'; +import { ES_FIELD_TYPES, UseField, useFormContext, useFormData } from '../../../shared_imports'; import { useFieldEditorContext } from '../../field_editor_context'; import { FormatSelectEditor } from '../../field_format_editor'; import type { FieldFormInternal } from '../field_editor'; -import type { FieldFormatConfig } from '../../../types'; export const FormatField = () => { const { dataView, uiSettings, fieldFormats, fieldFormatEditors } = useFieldEditorContext(); @@ -44,7 +44,7 @@ export const FormatField = () => { }, [type, getFields]); return ( - path="format"> + path="format"> {({ setValue, errors, value }) => { return ( <> diff --git a/src/plugins/data_view_field_editor/public/components/field_editor_flyout_content.tsx b/src/plugins/data_view_field_editor/public/components/field_editor_flyout_content.tsx index 765fb23502972..9968838919513 100644 --- a/src/plugins/data_view_field_editor/public/components/field_editor_flyout_content.tsx +++ b/src/plugins/data_view_field_editor/public/components/field_editor_flyout_content.tsx @@ -6,25 +6,24 @@ * Side Public License, v 1. */ -import React, { useState, useCallback, useEffect, useRef } from 'react'; -import { i18n } from '@kbn/i18n'; -import { FormattedMessage } from '@kbn/i18n-react'; import { - EuiTitle, + EuiButton, + EuiButtonEmpty, EuiFlexGroup, EuiFlexItem, - EuiButtonEmpty, - EuiButton, EuiText, + EuiTitle, } from '@elastic/eui'; - -import type { Field } from '../types'; +import { i18n } from '@kbn/i18n'; +import { FormattedMessage } from '@kbn/i18n-react'; +import React, { useCallback, useEffect, useRef, useState } from 'react'; import { euiFlyoutClassname } from '../constants'; -import { FlyoutPanels } from './flyout_panels'; -import { useFieldEditorContext } from './field_editor_context'; +import type { Field } from '../types'; +import { ModifiedFieldModal, SaveFieldTypeOrNameChangedModal } from './confirm_modals'; import { FieldEditor, FieldEditorFormState } from './field_editor/field_editor'; +import { useFieldEditorContext } from './field_editor_context'; +import { FlyoutPanels } from './flyout_panels'; import { FieldPreview, useFieldPreviewContext } from './preview'; -import { ModifiedFieldModal, SaveFieldTypeOrNameChangedModal } from './confirm_modals'; const i18nTexts = { cancelButtonLabel: i18n.translate('indexPatternFieldEditor.editor.flyoutCancelButtonLabel', { @@ -50,7 +49,9 @@ export interface Props { */ onCancel: () => void; /** Optional field to process */ - field?: Field; + fieldToEdit?: Field; + /** Optional preselected configuration for new field */ + fieldToCreate?: Field; isSavingField: boolean; /** Handler to call when the component mounts. * We will pass "up" data that the parent component might need @@ -59,14 +60,15 @@ export interface Props { } const FieldEditorFlyoutContentComponent = ({ - field, + fieldToEdit, + fieldToCreate, onSave, onCancel, isSavingField, onMounted, }: Props) => { const isMounted = useRef(false); - const isEditingExistingField = !!field; + const isEditingExistingField = !!fieldToEdit; const { dataView } = useFieldEditorContext(); const { panel: { isVisible: isPanelVisible }, @@ -75,9 +77,9 @@ const FieldEditorFlyoutContentComponent = ({ const [formState, setFormState] = useState({ isSubmitted: false, isSubmitting: false, - isValid: field ? true : undefined, - submit: field - ? async () => ({ isValid: true, data: field }) + isValid: fieldToEdit ? true : undefined, + submit: fieldToEdit + ? async () => ({ isValid: true, data: fieldToEdit }) : async () => ({ isValid: false, data: {} as Field }), }); @@ -106,8 +108,8 @@ const FieldEditorFlyoutContentComponent = ({ } if (isValid) { - const nameChange = field?.name !== data.name; - const typeChange = field?.type !== data.type; + const nameChange = fieldToEdit?.name !== data.name; + const typeChange = fieldToEdit?.type !== data.type; if (isEditingExistingField && (nameChange || typeChange)) { setModalVisibility({ @@ -118,7 +120,7 @@ const FieldEditorFlyoutContentComponent = ({ onSave(data); } } - }, [onSave, submit, field, isEditingExistingField]); + }, [onSave, submit, fieldToEdit, isEditingExistingField]); const onClickCancel = useCallback(() => { const canClose = canCloseValidator(); @@ -132,7 +134,7 @@ const FieldEditorFlyoutContentComponent = ({ if (modalVisibility.confirmChangeNameOrType) { return ( { const { data } = await submit(); onSave(data); @@ -196,12 +198,12 @@ const FieldEditorFlyoutContentComponent = ({

- {field ? ( + {fieldToEdit ? ( ) : ( @@ -226,7 +228,7 @@ const FieldEditorFlyoutContentComponent = ({ diff --git a/src/plugins/data_view_field_editor/public/components/field_editor_flyout_content_container.tsx b/src/plugins/data_view_field_editor/public/components/field_editor_flyout_content_container.tsx index 35bf9b3cc6b36..6696cf1e48b55 100644 --- a/src/plugins/data_view_field_editor/public/components/field_editor_flyout_content_container.tsx +++ b/src/plugins/data_view_field_editor/public/components/field_editor_flyout_content_container.tsx @@ -43,7 +43,9 @@ export interface Props { /** The Kibana field type of the field to create or edit (default: "runtime") */ fieldTypeToProcess: InternalFieldType; /** Optional field to edit */ - field?: DataViewField; + fieldToEdit?: DataViewField; + /** Optional initial configuration for new field */ + fieldToCreate?: Field; /** Services */ dataViews: DataViewsPublicPluginStart; notifications: NotificationsStart; @@ -64,7 +66,8 @@ export interface Props { */ export const FieldEditorFlyoutContentContainer = ({ - field, + fieldToEdit, + fieldToCreate, onSave, onCancel, onMounted, @@ -80,7 +83,6 @@ export const FieldEditorFlyoutContentContainer = ({ fieldFormats, uiSettings, }: Props) => { - const fieldToEdit = deserializeField(dataView, field); const [isSaving, setIsSaving] = useState(false); const { fields } = dataView; @@ -92,7 +94,7 @@ export const FieldEditorFlyoutContentContainer = ({ fields .filter((fld) => { - const isFieldBeingEdited = field?.name === fld.name; + const isFieldBeingEdited = fieldToEdit?.name === fld.name; return !isFieldBeingEdited && fld.isMapped; }) .forEach((fld) => { @@ -103,7 +105,7 @@ export const FieldEditorFlyoutContentContainer = ({ }); return existing; - }, [fields, field]); + }, [fields, fieldToEdit]); const services = useMemo( () => ({ @@ -126,8 +128,8 @@ export const FieldEditorFlyoutContentContainer = ({ // eslint-disable-next-line no-empty } catch {} // rename an existing runtime field - if (field?.name && field.name !== updatedField.name) { - dataView.removeRuntimeField(field.name); + if (fieldToEdit?.name && fieldToEdit.name !== updatedField.name) { + dataView.removeRuntimeField(fieldToEdit.name); } dataView.addRuntimeField(updatedField.name, { @@ -184,7 +186,15 @@ export const FieldEditorFlyoutContentContainer = ({ setIsSaving(false); } }, - [onSave, dataView, dataViews, notifications, fieldTypeToProcess, field?.name, usageCollection] + [ + onSave, + dataView, + dataViews, + notifications, + fieldTypeToProcess, + fieldToEdit?.name, + usageCollection, + ] ); return ( @@ -204,7 +214,8 @@ export const FieldEditorFlyoutContentContainer = ({ onSave={saveField} onCancel={onCancel} onMounted={onMounted} - field={fieldToEdit} + fieldToCreate={fieldToCreate} + fieldToEdit={deserializeField(dataView, fieldToEdit)} isSavingField={isSaving} /> diff --git a/src/plugins/data_view_field_editor/public/components/field_format_editor/field_format_editor.tsx b/src/plugins/data_view_field_editor/public/components/field_format_editor/field_format_editor.tsx index ac080ed0ed797..de90fcb73abe7 100644 --- a/src/plugins/data_view_field_editor/public/components/field_format_editor/field_format_editor.tsx +++ b/src/plugins/data_view_field_editor/public/components/field_format_editor/field_format_editor.tsx @@ -10,14 +10,17 @@ import { EuiCode, EuiFormRow, EuiSelect } from '@elastic/eui'; import { CoreStart } from '@kbn/core/public'; import { ES_FIELD_TYPES, KBN_FIELD_TYPES } from '@kbn/data-plugin/public'; import { DataView } from '@kbn/data-views-plugin/public'; -import type { FieldFormatInstanceType, FieldFormatParams } from '@kbn/field-formats-plugin/common'; +import type { + FieldFormatInstanceType, + FieldFormatParams, + SerializedFieldFormat, +} from '@kbn/field-formats-plugin/common'; import { FieldFormatsStart } from '@kbn/field-formats-plugin/public'; import { castEsToKbnFieldTypeName } from '@kbn/field-types'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; import React, { PureComponent } from 'react'; import { FormatEditorServiceStart } from '../../service'; -import { FieldFormatConfig } from '../../types'; import { FormatEditor } from './format_editor'; export interface FormatSelectEditorProps { @@ -26,9 +29,9 @@ export interface FormatSelectEditorProps { fieldFormatEditors: FormatEditorServiceStart['fieldFormatEditors']; fieldFormats: FieldFormatsStart; uiSettings: CoreStart['uiSettings']; - onChange: (change?: FieldFormatConfig) => void; + onChange: (change?: SerializedFieldFormat) => void; onError: (error?: string) => void; - value?: FieldFormatConfig; + value?: SerializedFieldFormat; } interface FieldTypeFormat { diff --git a/src/plugins/data_view_field_editor/public/components/preview/types.ts b/src/plugins/data_view_field_editor/public/components/preview/types.ts index d7c0a5867efd6..761c1db2094da 100644 --- a/src/plugins/data_view_field_editor/public/components/preview/types.ts +++ b/src/plugins/data_view_field_editor/public/components/preview/types.ts @@ -5,10 +5,11 @@ * in compliance with, at your election, the Elastic License 2.0 or the Server * Side Public License, v 1. */ -import React from 'react'; -import type { RuntimeType, RuntimeField } from '../../shared_imports'; -import type { FieldFormatConfig, RuntimeFieldPainlessError } from '../../types'; +import { SerializedFieldFormat } from '@kbn/field-formats-plugin/common'; +import React from 'react'; +import type { RuntimeField, RuntimeType } from '../../shared_imports'; +import type { RuntimeFieldPainlessError } from '../../types'; export type From = 'cluster' | 'custom'; @@ -54,7 +55,7 @@ export interface Params { index: string | null; type: RuntimeType | null; script: Required['script'] | null; - format: FieldFormatConfig | null; + format: SerializedFieldFormat | null; document: { [key: string]: unknown } | null; } diff --git a/src/plugins/data_view_field_editor/public/index.ts b/src/plugins/data_view_field_editor/public/index.ts index 981cde8ca73c0..7f76210c2c6f0 100644 --- a/src/plugins/data_view_field_editor/public/index.ts +++ b/src/plugins/data_view_field_editor/public/index.ts @@ -21,6 +21,7 @@ import { IndexPatternFieldEditorPlugin } from './plugin'; export type { + Field, PluginSetup as IndexPatternFieldEditorSetup, PluginStart as IndexPatternFieldEditorStart, } from './types'; diff --git a/src/plugins/data_view_field_editor/public/lib/serialization.ts b/src/plugins/data_view_field_editor/public/lib/serialization.ts index 833fe331203c2..82051eef17663 100644 --- a/src/plugins/data_view_field_editor/public/lib/serialization.ts +++ b/src/plugins/data_view_field_editor/public/lib/serialization.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ import { monaco } from '@kbn/monaco'; -import { DataViewField, DataView } from '../shared_imports'; +import { DataViewField, DataView, RuntimeType } from '../shared_imports'; import type { Field, RuntimeFieldPainlessError } from '../types'; export const deserializeField = (dataView: DataView, field?: DataViewField): Field | undefined => { @@ -16,7 +16,7 @@ export const deserializeField = (dataView: DataView, field?: DataViewField): Fie return { name: field.name, - type: field?.esTypes ? field.esTypes[0] : 'keyword', + type: field?.esTypes ? (field.esTypes[0] as RuntimeType) : ('keyword' as const), script: field.runtimeField ? field.runtimeField.script : undefined, customLabel: field.customLabel, popularity: field.count, diff --git a/src/plugins/data_view_field_editor/public/open_editor.tsx b/src/plugins/data_view_field_editor/public/open_editor.tsx index f6355b0e70e0e..d938ae52642b7 100644 --- a/src/plugins/data_view_field_editor/public/open_editor.tsx +++ b/src/plugins/data_view_field_editor/public/open_editor.tsx @@ -6,33 +6,47 @@ * Side Public License, v 1. */ -import React from 'react'; import { CoreStart, OverlayRef } from '@kbn/core/public'; import { i18n } from '@kbn/i18n'; - -import { - createKibanaReactContext, - toMountPoint, - DataViewField, +import React from 'react'; +import { FieldEditorLoader } from './components/field_editor_loader'; +import { euiFlyoutClassname } from './constants'; +import type { ApiService } from './lib/api'; +import type { DataPublicPluginStart, DataView, - UsageCollectionStart, + DataViewField, DataViewsPublicPluginStart, FieldFormatsStart, RuntimeType, + UsageCollectionStart, } from './shared_imports'; +import { createKibanaReactContext, toMountPoint } from './shared_imports'; +import type { CloseEditor, Field, InternalFieldType, PluginStart } from './types'; -import type { PluginStart, InternalFieldType, CloseEditor } from './types'; -import type { ApiService } from './lib/api'; -import { euiFlyoutClassname } from './constants'; -import { FieldEditorLoader } from './components/field_editor_loader'; - +/** + * Options for opening the field editor + * @public + */ export interface OpenFieldEditorOptions { + /** + * context containing the data view the field belongs to + */ ctx: { dataView: DataView; }; + /** + * action to take after field is saved + */ onSave?: (field: DataViewField) => void; + /** + * field to edit, for existing field + */ fieldName?: string; + /** + * pre-selectable options for new field creation + */ + fieldToCreate?: Field; } interface Dependencies { @@ -75,7 +89,8 @@ export const getFieldEditorOpener = const openEditor = ({ onSave, - fieldName, + fieldName: fieldNameToEdit, + fieldToCreate, ctx: { dataView }, }: OpenFieldEditorOptions): CloseEditor => { const closeEditor = () => { @@ -93,24 +108,24 @@ export const getFieldEditorOpener = } }; - const field = fieldName ? dataView.getFieldByName(fieldName) : undefined; + const fieldToEdit = fieldNameToEdit ? dataView.getFieldByName(fieldNameToEdit) : undefined; - if (fieldName && !field) { + if (fieldNameToEdit && !fieldToEdit) { const err = i18n.translate('indexPatternFieldEditor.noSuchFieldName', { defaultMessage: "Field named '{fieldName}' not found on index pattern", - values: { fieldName }, + values: { fieldName: fieldNameToEdit }, }); notifications.toasts.addDanger(err); return closeEditor; } - const isNewRuntimeField = !fieldName; + const isNewRuntimeField = !fieldNameToEdit; const isExistingRuntimeField = - field && - field.runtimeField && - !field.isMapped && + fieldToEdit && + fieldToEdit.runtimeField && + !fieldToEdit.isMapped && // treat composite field instances as mapped fields for field editing purposes - field.runtimeField.type !== ('composite' as RuntimeType); + fieldToEdit.runtimeField.type !== ('composite' as RuntimeType); const fieldTypeToProcess: InternalFieldType = isNewRuntimeField || isExistingRuntimeField ? 'runtime' : 'concrete'; @@ -122,7 +137,8 @@ export const getFieldEditorOpener = onCancel={closeEditor} onMounted={onMounted} docLinks={docLinks} - field={field} + fieldToEdit={fieldToEdit} + fieldToCreate={fieldToCreate} fieldTypeToProcess={fieldTypeToProcess} dataView={dataView} search={search} @@ -150,7 +166,7 @@ export const getFieldEditorOpener = : i18n.translate('indexPatternFieldEditor.editField.flyoutAriaLabel', { defaultMessage: 'Edit {fieldName} field', values: { - fieldName, + fieldName: fieldNameToEdit, }, }), onClose: (flyout) => { diff --git a/src/plugins/data_view_field_editor/public/plugin.ts b/src/plugins/data_view_field_editor/public/plugin.ts index fe5b5d8390765..b95ad388bca7c 100644 --- a/src/plugins/data_view_field_editor/public/plugin.ts +++ b/src/plugins/data_view_field_editor/public/plugin.ts @@ -28,7 +28,7 @@ export class IndexPatternFieldEditorPlugin }; } - public start(core: CoreStart, plugins: StartPlugins) { + public start(core: CoreStart, plugins: StartPlugins): PluginStart { const { fieldFormatEditors } = this.formatEditorService.start(); const { http } = core; const { data, usageCollection, dataViews, fieldFormats } = plugins; diff --git a/src/plugins/data_view_field_editor/public/types.ts b/src/plugins/data_view_field_editor/public/types.ts index 504a97eb7f329..8ee47f20515a1 100644 --- a/src/plugins/data_view_field_editor/public/types.ts +++ b/src/plugins/data_view_field_editor/public/types.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import { SerializableRecord } from '@kbn/utility-types'; +import { FieldSpec } from '@kbn/data-views-plugin/public'; import { FunctionComponent } from 'react'; import { DeleteFieldProviderProps } from './components'; import { OpenFieldDeleteModalOptions } from './open_delete_modal'; @@ -21,11 +21,22 @@ import { UsageCollectionStart, } from './shared_imports'; +/** + * Public setup contract of data view field editor + * @public + */ export interface PluginSetup { fieldFormatEditors: FormatEditorServiceSetup['fieldFormatEditors']; } +/** + * Public start contract of data view field editor + * @public + */ export interface PluginStart { + /** + * method to open the data view field editor fly-out + */ openEditor(options: OpenFieldEditorOptions): () => void; openDeleteModal(options: OpenFieldDeleteModalOptions): () => void; fieldFormatEditors: FormatEditorServiceStart['fieldFormatEditors']; @@ -47,18 +58,35 @@ export interface StartPlugins { export type InternalFieldType = 'concrete' | 'runtime'; +/** + * The data model for the field editor + * @public + */ export interface Field { - name: string; - type: RuntimeField['type'] | string; + /** + * name / path used for the field + */ + name: FieldSpec['name']; + /** + * ES type + */ + type: RuntimeType; + /** + * source of the runtime field script + */ script?: RuntimeField['script']; - customLabel?: string; + /** + * custom label for display + */ + customLabel?: FieldSpec['customLabel']; + /** + * custom popularity + */ popularity?: number; - format?: FieldFormatConfig; -} - -export interface FieldFormatConfig { - id: string; - params?: SerializableRecord; + /** + * configuration of the field format + */ + format?: FieldSpec['format']; } export interface EsRuntimeField { diff --git a/src/plugins/discover/public/hooks/use_navigation_props.test.tsx b/src/plugins/discover/public/hooks/use_navigation_props.test.tsx index 26a3c8941ca0e..6057c57247734 100644 --- a/src/plugins/discover/public/hooks/use_navigation_props.test.tsx +++ b/src/plugins/discover/public/hooks/use_navigation_props.test.tsx @@ -9,12 +9,7 @@ import React, { ReactElement } from 'react'; import { renderHook } from '@testing-library/react-hooks'; import { createFilterManagerMock } from '@kbn/data-plugin/public/query/filter_manager/filter_manager.mock'; -import { - getContextHash, - HistoryState, - useNavigationProps, - UseNavigationProps, -} from './use_navigation_props'; +import { getContextHash, useNavigationProps, UseNavigationProps } from './use_navigation_props'; import { Router } from 'react-router-dom'; import { createMemoryHistory } from 'history'; import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public'; @@ -45,7 +40,7 @@ const getContextRoute = () => { }; const render = (withRouter = true, props?: Partial) => { - const history = createMemoryHistory({ + const history = createMemoryHistory({ initialEntries: ['/' + getSearch()], }); const wrapper = ({ children }: { children: ReactElement }) => ( @@ -66,8 +61,9 @@ describe('useNavigationProps', () => { // @ts-expect-error result.current.singleDocProps.onClick(); expect(history.location.pathname).toEqual(getSingeDocRoute()); - expect(history.location.search).toEqual(`?id=${defaultProps.rowId}`); - expect(history.location.state?.breadcrumb).toEqual(`#/${getSearch()}`); + expect(history.location.search).toEqual( + `?id=${defaultProps.rowId}&breadcrumb=${encodeURIComponent(`#/${getSearch()}`)}` + ); }); test('should provide valid breadcrumb for context page from main view', () => { @@ -77,9 +73,10 @@ describe('useNavigationProps', () => { result.current.surrDocsProps.onClick(); expect(history.location.pathname).toEqual(getContextRoute()); expect(history.location.search).toEqual( - `?${getContextHash(defaultProps.columns, filterManager)}` + `?${getContextHash(defaultProps.columns, filterManager)}&breadcrumb=${encodeURIComponent( + `#/${getSearch()}` + )}` ); - expect(history.location.state?.breadcrumb).toEqual(`#/${getSearch()}`); }); test('should create valid links to the context and single doc pages from embeddable', () => { diff --git a/src/plugins/discover/public/hooks/use_navigation_props.tsx b/src/plugins/discover/public/hooks/use_navigation_props.tsx index a62df3f09e2fe..c60b6c161015f 100644 --- a/src/plugins/discover/public/hooks/use_navigation_props.tsx +++ b/src/plugins/discover/public/hooks/use_navigation_props.tsx @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import { MouseEventHandler, useMemo, useRef } from 'react'; +import { MouseEventHandler, useMemo } from 'react'; import { useHistory, matchPath } from 'react-router-dom'; import type { Location } from 'history'; import { stringify } from 'query-string'; @@ -27,8 +27,6 @@ export interface UseNavigationProps { addBasePath: (url: string) => string; } -export type HistoryState = { breadcrumb?: string } | undefined; - export const getContextHash = (columns: string[], filterManager: FilterManager) => { const globalFilters = filterManager.getGlobalFilters(); const appFilters = filterManager.getAppFilters(); @@ -64,16 +62,12 @@ const getCurrentBreadcrumbs = ( return isContextRoute ? prevBreadcrumb : '#' + currentLocation.pathname + currentLocation.search; }; -export const useMainRouteBreadcrumb = () => { - // useRef needed to retrieve initial breadcrumb link from the push state without updates - const breadcrumb = useRef(); - const history = useHistory(); - - if (history.location.state?.breadcrumb) { - breadcrumb.current = history.location.state.breadcrumb; - } +const getCurrentBreadcrumb = (search: string | undefined) => + new URLSearchParams(search).get('breadcrumb') || undefined; - return breadcrumb.current; +export const useMainRouteBreadcrumb = () => { + const history = useHistory(); + return useMemo(() => getCurrentBreadcrumb(history.location.search), [history.location.search]); }; export const useNavigationProps = ({ @@ -84,10 +78,13 @@ export const useNavigationProps = ({ filterManager, addBasePath, }: UseNavigationProps) => { - const history = useHistory(); + const history = useHistory(); const currentLocation = useDiscoverServices().history().location; - const prevBreadcrumb = useRef(history?.location.state?.breadcrumb).current; + const prevBreadcrumb = useMemo( + () => getCurrentBreadcrumb(history?.location?.search), + [history?.location?.search] + ); const contextSearchHash = useMemo( () => getContextHash(columns, filterManager), [columns, filterManager] @@ -111,16 +108,16 @@ export const useNavigationProps = ({ path: '/context/:indexPatternId/:id', exact: true, }); + const currentBreadcrumb = encodeURIComponent( + getCurrentBreadcrumbs(!!isContextRoute, currentLocation, prevBreadcrumb) ?? '' + ); const onOpenSingleDoc: MouseEventHandler = (event) => { event?.preventDefault?.(); history.push({ pathname: `/doc/${indexPatternId}/${rowIndex}`, - search: `?id=${encodeURIComponent(rowId)}`, - state: { - breadcrumb: getCurrentBreadcrumbs(!!isContextRoute, currentLocation, prevBreadcrumb), - }, + search: `?id=${encodeURIComponent(rowId)}&breadcrumb=${currentBreadcrumb}`, }); }; @@ -131,16 +128,19 @@ export const useNavigationProps = ({ pathname: `/context/${encodeURIComponent(indexPatternId)}/${encodeURIComponent( String(rowId) )}`, - search: `?${contextSearchHash}`, - state: { - breadcrumb: getCurrentBreadcrumbs(!!isContextRoute, currentLocation, prevBreadcrumb), - }, + search: `?${contextSearchHash}&breadcrumb=${currentBreadcrumb}`, }); }; return { - singleDocProps: { onClick: onOpenSingleDoc, href: singleDocHref }, - surrDocsProps: { onClick: onOpenSurrDocs, href: surDocsHref }, + singleDocProps: { + onClick: onOpenSingleDoc, + href: `${singleDocHref}&breadcrumb=${currentBreadcrumb}`, + }, + surrDocsProps: { + onClick: onOpenSurrDocs, + href: `${surDocsHref}&breadcrumb=${currentBreadcrumb}`, + }, }; } diff --git a/test/examples/data_view_field_editor_example/data_view_field_editor_example.ts b/test/examples/data_view_field_editor_example/data_view_field_editor_example.ts index 389c877432493..0645fe3cd68ef 100644 --- a/test/examples/data_view_field_editor_example/data_view_field_editor_example.ts +++ b/test/examples/data_view_field_editor_example/data_view_field_editor_example.ts @@ -6,19 +6,41 @@ * Side Public License, v 1. */ +import expect from '@kbn/expect'; import { PluginFunctionalProviderContext } from '../../plugin_functional/services'; // eslint-disable-next-line import/no-default-export export default function ({ getService }: PluginFunctionalProviderContext) { const testSubjects = getService('testSubjects'); + const find = getService('find'); describe('', () => { it('finds a data view', async () => { await testSubjects.existOrFail('dataViewTitle'); }); + it('opens the field editor', async () => { await testSubjects.click('addField'); await testSubjects.existOrFail('flyoutTitle'); + await testSubjects.click('closeFlyoutButton'); + }); + + it('uses preconfigured options for a new field', async () => { + // find the checkbox label and click it - `testSubjects.setCheckbox()` is not working for our checkbox + const controlWrapper = await testSubjects.find('preconfiguredControlWrapper'); + const control = await find.descendantDisplayedByCssSelector('label', controlWrapper); + await control.click(); + + await testSubjects.click('addField'); + await testSubjects.existOrFail('flyoutTitle'); + + const nameField = await testSubjects.find('nameField'); + const nameInput = await find.descendantDisplayedByCssSelector( + '[data-test-subj=input]', + nameField + ); + + expect(await nameInput.getAttribute('value')).to.equal('demotestfield'); }); }); } diff --git a/test/functional/apps/console/_autocomplete.ts b/test/functional/apps/console/_autocomplete.ts index 85be77d9522a7..4145501babb58 100644 --- a/test/functional/apps/console/_autocomplete.ts +++ b/test/functional/apps/console/_autocomplete.ts @@ -22,7 +22,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { log.debug('navigateTo console'); await PageObjects.common.navigateToApp('console'); // Ensure that the text area can be interacted with - await PageObjects.console.dismissTutorial(); + await PageObjects.console.closeHelpIfExists(); await PageObjects.console.clearTextArea(); }); diff --git a/test/functional/apps/console/_console.ts b/test/functional/apps/console/_console.ts index 6e55c6d42f65e..0878442156ab7 100644 --- a/test/functional/apps/console/_console.ts +++ b/test/functional/apps/console/_console.ts @@ -126,6 +126,22 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); }); + describe('with query params', () => { + it('should issue a successful request', async () => { + await PageObjects.console.clearTextArea(); + await PageObjects.console.enterRequest( + '\n GET _cat/aliases?format=json&v=true&pretty=true' + ); + await PageObjects.console.clickPlay(); + await PageObjects.header.waitUntilLoadingHasFinished(); + + await retry.try(async () => { + const status = await PageObjects.console.getResponseStatus(); + expect(status).to.eql(200); + }); + }); + }); + describe('multiple requests output', () => { const sendMultipleRequests = async (requests: string[]) => { await asyncForEach(requests, async (request) => { @@ -158,32 +174,40 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); describe('with folded/unfolded lines in request body', () => { - const enterRequestWithBody = async () => { - await PageObjects.console.enterRequest(); - await PageObjects.console.pressEnter(); - await PageObjects.console.enterText('{\n\t\t"_source": []'); + const enterRequest = async () => { + await PageObjects.console.enterRequest('\nGET test/doc/1 \n{\n\t\t"_source": []'); + await PageObjects.console.clickPlay(); }; - it('should restore the state of folding/unfolding when navigating back to Console', async () => { + beforeEach(async () => { await PageObjects.console.clearTextArea(); - await enterRequestWithBody(); + }); + + it('should restore the state of folding/unfolding when navigating back to Console', async () => { + await enterRequest(); await PageObjects.console.clickFoldWidget(); await PageObjects.common.navigateToApp('home'); await PageObjects.header.waitUntilLoadingHasFinished(); await PageObjects.common.navigateToApp('console'); await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.console.dismissTutorial(); + await PageObjects.console.closeHelpIfExists(); expect(await PageObjects.console.hasFolds()).to.be(true); }); it('should restore the state of folding/unfolding when the page reloads', async () => { - await PageObjects.console.clearTextArea(); - await enterRequestWithBody(); + await enterRequest(); await PageObjects.console.clickFoldWidget(); await browser.refresh(); await PageObjects.header.waitUntilLoadingHasFinished(); expect(await PageObjects.console.hasFolds()).to.be(true); }); + + it('should not have folds by default', async () => { + await enterRequest(); + await browser.refresh(); + await PageObjects.header.waitUntilLoadingHasFinished(); + expect(await PageObjects.console.hasFolds()).to.be(false); + }); }); }); } diff --git a/test/functional/apps/console/_vector_tile.ts b/test/functional/apps/console/_vector_tile.ts index b02db523b95ac..3959877fdf685 100644 --- a/test/functional/apps/console/_vector_tile.ts +++ b/test/functional/apps/console/_vector_tile.ts @@ -22,7 +22,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await PageObjects.home.addSampleDataSet('logs'); await PageObjects.header.waitUntilLoadingHasFinished(); await PageObjects.common.navigateToApp('console'); - await PageObjects.console.dismissTutorial(); + await PageObjects.console.closeHelpIfExists(); await PageObjects.console.clearTextArea(); }); diff --git a/test/functional/apps/console/_xjson.ts b/test/functional/apps/console/_xjson.ts new file mode 100644 index 0000000000000..386cda8ef32ea --- /dev/null +++ b/test/functional/apps/console/_xjson.ts @@ -0,0 +1,50 @@ +/* + * 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 expect from '@kbn/expect'; +import { FtrProviderContext } from '../../ftr_provider_context'; + +export default ({ getService, getPageObjects }: FtrProviderContext) => { + const retry = getService('retry'); + const log = getService('log'); + const PageObjects = getPageObjects(['common', 'console', 'header']); + + describe("Console's XJSON features", function testXjson() { + this.tags('includeFirefox'); + before(async () => { + log.debug('navigateTo console'); + await PageObjects.common.navigateToApp('console'); + await retry.try(async () => { + await PageObjects.console.collapseHelp(); + }); + }); + + beforeEach(async () => { + await PageObjects.console.clearTextArea(); + }); + + describe('with triple quoted strings', () => { + it('should allow escaping quotation mark by wrapping it in triple quotes', async () => { + await PageObjects.console.enterRequest( + '\nPOST test/_doc/1 \n{\n "foo": """look "escaped" quotes"""' + ); + await PageObjects.console.clickPlay(); + await PageObjects.header.waitUntilLoadingHasFinished(); + expect(await PageObjects.console.hasErrorMarker()).to.be(false); + }); + }); + + describe('with invalid syntax', () => { + it('should trigger validation errors', async () => { + await PageObjects.console.enterRequest('\nGET test/doc/1 \n{\n "foo": \'\''); + expect(await PageObjects.console.hasInvalidSyntax()).to.be(true); + expect(await PageObjects.console.hasErrorMarker()).to.be(true); + }); + }); + }); +}; diff --git a/test/functional/apps/console/index.js b/test/functional/apps/console/index.js index 6222110ba489e..5e624f2d7ba81 100644 --- a/test/functional/apps/console/index.js +++ b/test/functional/apps/console/index.js @@ -22,6 +22,7 @@ export default function ({ getService, loadTestFile }) { loadTestFile(require.resolve('./_vector_tile')); loadTestFile(require.resolve('./_comments')); loadTestFile(require.resolve('./_variables')); + loadTestFile(require.resolve('./_xjson')); } }); } diff --git a/test/functional/apps/context/_context_navigation.ts b/test/functional/apps/context/_context_navigation.ts index 1bda70cc558ee..d87ef6275f3d3 100644 --- a/test/functional/apps/context/_context_navigation.ts +++ b/test/functional/apps/context/_context_navigation.ts @@ -86,5 +86,30 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { } ); }); + + it('should go back via breadcrumbs with preserved state after a page refresh', async function () { + await retry.waitFor( + 'user navigating to context and returning to discover via breadcrumbs', + async () => { + await dataGrid.clickRowToggle({ rowIndex: 0 }); + const rowActions = await dataGrid.getRowActions({ rowIndex: 0 }); + await rowActions[1].click(); + await PageObjects.context.waitUntilContextLoadingHasFinished(); + await browser.refresh(); + await PageObjects.context.waitUntilContextLoadingHasFinished(); + await find.clickByCssSelector(`[data-test-subj="breadcrumb first"]`); + await PageObjects.discover.waitForDocTableLoadingComplete(); + + for (const [columnName, value] of TEST_FILTER_COLUMN_NAMES) { + expect(await filterBar.hasFilter(columnName, value)).to.eql(true); + } + expect(await PageObjects.timePicker.getTimeConfigAsAbsoluteTimes()).to.eql({ + start: 'Sep 18, 2015 @ 06:31:44.000', + end: 'Sep 23, 2015 @ 18:31:44.000', + }); + return true; + } + ); + }); }); } diff --git a/test/functional/page_objects/console_page.ts b/test/functional/page_objects/console_page.ts index e242e70b966a1..d4079012bd51e 100644 --- a/test/functional/page_objects/console_page.ts +++ b/test/functional/page_objects/console_page.ts @@ -123,15 +123,6 @@ export class ConsolePageObject extends FtrService { return this.testSubjects.find('console-application'); } - public async dismissTutorial() { - try { - const closeButton = await this.testSubjects.find('help-close-button'); - await closeButton.click(); - } catch (e) { - // Ignore because it is probably not there. - } - } - // Prompt autocomplete window and provide a initial letter of properties to narrow down the results. E.g. 'b' = 'bool' public async promptAutocomplete(letter = 'b') { const textArea = await this.testSubjects.find('console-textarea'); @@ -238,21 +229,11 @@ export class ConsolePageObject extends FtrService { } public async hasInvalidSyntax() { - try { - const requestEditor = await this.getRequestEditor(); - return Boolean(await requestEditor.findByCssSelector('.ace_invalid')); - } catch (e) { - return false; - } + return await this.find.existsByCssSelector('.ace_invalid'); } public async hasErrorMarker() { - try { - const requestEditor = await this.getRequestEditor(); - return Boolean(await requestEditor.findByCssSelector('.ace_error')); - } catch (e) { - return false; - } + return await this.find.existsByCssSelector('.ace_error'); } public async clickFoldWidget() { @@ -261,13 +242,7 @@ export class ConsolePageObject extends FtrService { } public async hasFolds() { - try { - const requestEditor = await this.getRequestEditor(); - const folds = await requestEditor.findAllByCssSelector('.ace_fold'); - return folds.length > 0; - } catch (e) { - return false; - } + return await this.find.existsByCssSelector('.ace_fold'); } public async getResponseStatus() { @@ -275,4 +250,13 @@ export class ConsolePageObject extends FtrService { const text = await statusBadge.getVisibleText(); return text.replace(/[^\d.]+/, ''); } + + async closeHelpIfExists() { + await this.retry.try(async () => { + const helpPanelShown = await this.testSubjects.exists('help-close-button'); + if (helpPanelShown) { + await this.collapseHelp(); + } + }); + } } diff --git a/tsconfig.base.json b/tsconfig.base.json index 1c0c40e18f999..c1c1539e7b043 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -451,9 +451,6 @@ "@kbn/stack-management-usage-test-plugin/*": ["x-pack/test/usage_collection/plugins/stack_management_usage_test/*"], // END AUTOMATED PACKAGE LISTING // Allows for importing from `kibana` package for the exported types. - "kibana": ["./kibana"], - "kibana/public": ["src/core/public"], - "kibana/server": ["src/core/server"], "@emotion/core": ["typings/@emotion"], "resize-observer-polyfill": ["typings/resize-observer-polyfill"] }, diff --git a/x-pack/plugins/alerting/common/execution_log_types.ts b/x-pack/plugins/alerting/common/execution_log_types.ts index cdfc7601190dd..74f2d7a000e27 100644 --- a/x-pack/plugins/alerting/common/execution_log_types.ts +++ b/x-pack/plugins/alerting/common/execution_log_types.ts @@ -18,8 +18,18 @@ export const executionLogSortableColumns = [ 'num_new_alerts', ] as const; +export const actionErrorLogSortableColumns = [ + '@timestamp', + 'event.start', + 'event.end', + 'event.duration', + 'event.action', +]; + export type ExecutionLogSortFields = typeof executionLogSortableColumns[number]; +export type ActionErrorLogSortFields = typeof actionErrorLogSortableColumns[number]; + export interface IExecutionLog { id: string; timestamp: string; @@ -56,5 +66,3 @@ export interface IExecutionLogResult { total: number; data: IExecutionLog[]; } - -export type IExecutionLogWithErrorsResult = IExecutionLogResult & IExecutionErrorsResult; diff --git a/x-pack/plugins/alerting/server/authorization/alerting_authorization.ts b/x-pack/plugins/alerting/server/authorization/alerting_authorization.ts index bfa20cb2d00fe..0412678eca074 100644 --- a/x-pack/plugins/alerting/server/authorization/alerting_authorization.ts +++ b/x-pack/plugins/alerting/server/authorization/alerting_authorization.ts @@ -31,6 +31,7 @@ export enum ReadOperations { GetRuleState = 'getRuleState', GetAlertSummary = 'getAlertSummary', GetExecutionLog = 'getExecutionLog', + GetActionErrorLog = 'getActionErrorLog', Find = 'find', GetAuthorizedAlertsIndices = 'getAuthorizedAlertsIndices', } diff --git a/x-pack/plugins/alerting/server/lib/convert_es_sort_to_event_log_sort.test.ts b/x-pack/plugins/alerting/server/lib/convert_es_sort_to_event_log_sort.test.ts new file mode 100644 index 0000000000000..e14fdeb404525 --- /dev/null +++ b/x-pack/plugins/alerting/server/lib/convert_es_sort_to_event_log_sort.test.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 { convertEsSortToEventLogSort } from './convert_es_sort_to_event_log_sort'; + +describe('convertEsSortToEventLogSort', () => { + test('should throw when given invalid inputs', () => { + expect(() => { + convertEsSortToEventLogSort('should failed'); + }).toThrow('Invalid sort type - sort must contain sort field and sort order'); + + expect(() => { + convertEsSortToEventLogSort({}); + }).toThrow(`Invalid sort order type - sortOrder object must contain an 'order' property`); + + expect(() => { + convertEsSortToEventLogSort({ test: 'asc' }); + }).toThrow(`Invalid sort order type - sortOrder object must contain an 'order' property`); + }); + + test('should format ES sort into event logger sort', () => { + expect( + convertEsSortToEventLogSort({ + 'test-field': { + order: 'desc', + }, + }) + ).toEqual([ + { + sort_field: 'test-field', + sort_order: 'desc', + }, + ]); + + expect( + convertEsSortToEventLogSort([ + { + 'test-field-1': { + order: 'desc', + }, + }, + { + 'test-field-2': { + order: 'asc', + }, + }, + ]) + ).toEqual([ + { + sort_field: 'test-field-1', + sort_order: 'desc', + }, + { + sort_field: 'test-field-2', + sort_order: 'asc', + }, + ]); + }); +}); diff --git a/x-pack/plugins/alerting/server/lib/convert_es_sort_to_event_log_sort.ts b/x-pack/plugins/alerting/server/lib/convert_es_sort_to_event_log_sort.ts new file mode 100644 index 0000000000000..9adb2d0a21e69 --- /dev/null +++ b/x-pack/plugins/alerting/server/lib/convert_es_sort_to_event_log_sort.ts @@ -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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { + Sort, + FieldSort, + SortCombinations, +} from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; + +const getFormattedSort = (sort: SortCombinations) => { + if (typeof sort === 'string') { + throw Error(`Invalid sort type - sort must contain sort field and sort order`); + } + + const sortField = Object.keys(sort)[0]; + const sortOrder = sort[sortField] as FieldSort; + + if (!sortOrder || !sortOrder.order) { + throw Error(`Invalid sort order type - sortOrder object must contain an 'order' property`); + } + + return { + sort_field: sortField, + sort_order: sortOrder.order, + }; +}; + +/** + * This helper function converts esSort: + * + * { + * field: { + * order: 'asc' + * } + * } + * + * Into event logger sort: + * + * [{ + * sort_field: field, + * sort_order: 'asc', + * }] + */ + +export const convertEsSortToEventLogSort = (esSort: Sort) => { + if (!esSort) { + return; + } + if (!Array.isArray(esSort)) { + return [getFormattedSort(esSort)]; + } + return esSort.map((sort) => getFormattedSort(sort)); +}; diff --git a/x-pack/plugins/alerting/server/lib/index.ts b/x-pack/plugins/alerting/server/lib/index.ts index d221c2251d386..825a9863badbb 100644 --- a/x-pack/plugins/alerting/server/lib/index.ts +++ b/x-pack/plugins/alerting/server/lib/index.ts @@ -29,4 +29,5 @@ export { processAlerts } from './process_alerts'; export { createWrappedScopedClusterClientFactory } from './wrap_scoped_cluster_client'; export { isRuleSnoozed, getRuleSnoozeEndTime } from './is_rule_snoozed'; export { convertRuleIdsToKueryNode } from './convert_rule_ids_to_kuery_node'; +export { convertEsSortToEventLogSort } from './convert_es_sort_to_event_log_sort'; export * from './snooze'; diff --git a/x-pack/plugins/alerting/server/routes/get_action_error_log.test.ts b/x-pack/plugins/alerting/server/routes/get_action_error_log.test.ts new file mode 100644 index 0000000000000..414d2e8b54122 --- /dev/null +++ b/x-pack/plugins/alerting/server/routes/get_action_error_log.test.ts @@ -0,0 +1,119 @@ +/* + * 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 { getActionErrorLogRoute } from './get_action_error_log'; +import { httpServiceMock } from '@kbn/core/server/mocks'; +import { licenseStateMock } from '../lib/license_state.mock'; +import { mockHandlerArguments } from './_mock_handler_arguments'; +import { SavedObjectsErrorHelpers } from '@kbn/core/server'; +import { rulesClientMock } from '../rules_client.mock'; + +const rulesClient = rulesClientMock.create(); +jest.mock('../lib/license_api_access', () => ({ + verifyApiAccess: jest.fn(), +})); + +beforeEach(() => { + jest.resetAllMocks(); +}); + +describe('getActionErrorLogRoute', () => { + const dateString = new Date().toISOString(); + const mockResponse = { + totalErrors: 2, + errors: [ + { + id: '08d9b0f5-0b41-47c9-951f-a666b5788ddc', + timestamp: '2022-03-23T17:37:07.086Z', + type: 'actions', + message: + 'action execution failure: .server-log:9e67b8b0-9e2c-11ec-bd64-774ed95c43ef: s - an error occurred while running the action executor: something funky with the server log', + }, + { + id: 'c1c04f04-312e-4e23-8e36-e01eb4332ed6', + timestamp: '2022-03-23T17:23:05.249Z', + type: 'alerting', + message: `rule execution failure: example.always-firing:a348a740-9e2c-11ec-bd64-774ed95c43ef: 'test rule' - I am erroring in rule execution!!`, + }, + ], + }; + + it('gets action error log', async () => { + const licenseState = licenseStateMock.create(); + const router = httpServiceMock.createRouter(); + + getActionErrorLogRoute(router, licenseState); + + const [config, handler] = router.get.mock.calls[0]; + + expect(config.path).toMatchInlineSnapshot(`"/internal/alerting/rule/{id}/_action_error_log"`); + + rulesClient.getActionErrorLog.mockResolvedValue(mockResponse); + + const [context, req, res] = mockHandlerArguments( + { rulesClient }, + { + params: { + id: '1', + }, + query: { + date_start: dateString, + per_page: 10, + page: 1, + filter: 'message: "test"', + sort: [{ sort_field: '@timestamp', sort_order: 'asc' }], + }, + }, + ['ok'] + ); + + await handler(context, req, res); + + expect(rulesClient.getActionErrorLog).toHaveBeenCalledTimes(1); + expect(rulesClient.getActionErrorLog.mock.calls[0]).toEqual([ + { + dateStart: dateString, + dateEnd: undefined, + filter: 'message: "test"', + id: '1', + page: 1, + perPage: 10, + sort: [{ sort_field: '@timestamp', sort_order: 'asc' }], + }, + ]); + + expect(res.ok).toHaveBeenCalled(); + }); + + it('returns NOT-FOUND when rule and rule run is not found', async () => { + const licenseState = licenseStateMock.create(); + const router = httpServiceMock.createRouter(); + + getActionErrorLogRoute(router, licenseState); + + const [, handler] = router.get.mock.calls[0]; + + rulesClient.getActionErrorLog = jest + .fn() + .mockRejectedValueOnce(SavedObjectsErrorHelpers.createGenericNotFoundError('alert', '1')); + + const [context, req, res] = mockHandlerArguments( + { rulesClient }, + { + params: { + id: '1', + }, + query: {}, + }, + ['notFound'] + ); + + expect(handler(context, req, res)).rejects.toMatchInlineSnapshot( + `[Error: Saved object [alert/1] not found]` + ); + }); +}); diff --git a/x-pack/plugins/alerting/server/routes/get_action_error_log.ts b/x-pack/plugins/alerting/server/routes/get_action_error_log.ts new file mode 100644 index 0000000000000..c833b65e34bb0 --- /dev/null +++ b/x-pack/plugins/alerting/server/routes/get_action_error_log.ts @@ -0,0 +1,73 @@ +/* + * 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 { IRouter } from '@kbn/core/server'; +import { schema } from '@kbn/config-schema'; +import { ILicenseState } from '../lib'; +import { GetActionErrorLogByIdParams } from '../rules_client'; +import { RewriteRequestCase, verifyAccessAndContext } from './lib'; +import { AlertingRequestHandlerContext, INTERNAL_BASE_ALERTING_API_PATH } from '../types'; + +const paramSchema = schema.object({ + id: schema.string(), +}); + +const sortOrderSchema = schema.oneOf([schema.literal('asc'), schema.literal('desc')]); + +const sortFieldSchema = schema.oneOf([ + schema.object({ '@timestamp': schema.object({ order: sortOrderSchema }) }), + schema.object({ 'event.duration': schema.object({ order: sortOrderSchema }) }), +]); + +const sortFieldsSchema = schema.arrayOf(sortFieldSchema, { + defaultValue: [{ '@timestamp': { order: 'desc' } }], +}); + +const querySchema = schema.object({ + date_start: schema.string(), + date_end: schema.maybe(schema.string()), + filter: schema.maybe(schema.string()), + per_page: schema.number({ defaultValue: 10, min: 1 }), + page: schema.number({ defaultValue: 1, min: 1 }), + sort: sortFieldsSchema, +}); + +const rewriteReq: RewriteRequestCase = ({ + date_start: dateStart, + date_end: dateEnd, + per_page: perPage, + ...rest +}) => ({ + ...rest, + dateStart, + dateEnd, + perPage, +}); + +export const getActionErrorLogRoute = ( + router: IRouter, + licenseState: ILicenseState +) => { + router.get( + { + path: `${INTERNAL_BASE_ALERTING_API_PATH}/rule/{id}/_action_error_log`, + validate: { + params: paramSchema, + query: querySchema, + }, + }, + router.handleLegacyErrors( + verifyAccessAndContext(licenseState, async function (context, req, res) { + const rulesClient = (await context.alerting).getRulesClient(); + const { id } = req.params; + return res.ok({ + body: await rulesClient.getActionErrorLog(rewriteReq({ id, ...req.query })), + }); + }) + ) + ); +}; diff --git a/x-pack/plugins/alerting/server/routes/get_rule_execution_log.test.ts b/x-pack/plugins/alerting/server/routes/get_rule_execution_log.test.ts index 4a67404ab232e..5271cd7373697 100644 --- a/x-pack/plugins/alerting/server/routes/get_rule_execution_log.test.ts +++ b/x-pack/plugins/alerting/server/routes/get_rule_execution_log.test.ts @@ -11,7 +11,7 @@ import { licenseStateMock } from '../lib/license_state.mock'; import { mockHandlerArguments } from './_mock_handler_arguments'; import { SavedObjectsErrorHelpers } from '@kbn/core/server'; import { rulesClientMock } from '../rules_client.mock'; -import { IExecutionLogWithErrorsResult } from '../../common'; +import { IExecutionLogResult } from '../../common'; const rulesClient = rulesClientMock.create(); jest.mock('../lib/license_api_access', () => ({ @@ -24,7 +24,7 @@ beforeEach(() => { describe('getRuleExecutionLogRoute', () => { const dateString = new Date().toISOString(); - const mockedExecutionLogWithErrors: IExecutionLogWithErrorsResult = { + const mockedExecutionLog: IExecutionLogResult = { total: 374, data: [ { @@ -68,22 +68,6 @@ describe('getRuleExecutionLogRoute', () => { schedule_delay_ms: 3008, }, ], - totalErrors: 2, - errors: [ - { - id: '08d9b0f5-0b41-47c9-951f-a666b5788ddc', - timestamp: '2022-03-23T17:37:07.086Z', - type: 'actions', - message: - 'action execution failure: .server-log:9e67b8b0-9e2c-11ec-bd64-774ed95c43ef: s - an error occurred while running the action executor: something funky with the server log', - }, - { - id: 'c1c04f04-312e-4e23-8e36-e01eb4332ed6', - timestamp: '2022-03-23T17:23:05.249Z', - type: 'alerting', - message: `rule execution failure: example.always-firing:a348a740-9e2c-11ec-bd64-774ed95c43ef: 'test rule' - I am erroring in rule execution!!`, - }, - ], }; it('gets rule execution log', async () => { @@ -96,7 +80,7 @@ describe('getRuleExecutionLogRoute', () => { expect(config.path).toMatchInlineSnapshot(`"/internal/alerting/rule/{id}/_execution_log"`); - rulesClient.getExecutionLogForRule.mockResolvedValue(mockedExecutionLogWithErrors); + rulesClient.getExecutionLogForRule.mockResolvedValue(mockedExecutionLog); const [context, req, res] = mockHandlerArguments( { rulesClient }, diff --git a/x-pack/plugins/alerting/server/routes/index.ts b/x-pack/plugins/alerting/server/routes/index.ts index 2ef75ce269220..ef837a83ad9a4 100644 --- a/x-pack/plugins/alerting/server/routes/index.ts +++ b/x-pack/plugins/alerting/server/routes/index.ts @@ -21,6 +21,7 @@ import { enableRuleRoute } from './enable_rule'; import { findRulesRoute, findInternalRulesRoute } from './find_rules'; import { getRuleAlertSummaryRoute } from './get_rule_alert_summary'; import { getRuleExecutionLogRoute } from './get_rule_execution_log'; +import { getActionErrorLogRoute } from './get_action_error_log'; import { getRuleStateRoute } from './get_rule_state'; import { healthRoute } from './health'; import { resolveRuleRoute } from './resolve_rule'; @@ -58,6 +59,7 @@ export function defineRoutes(opts: RouteOptions) { findInternalRulesRoute(router, licenseState, usageCounter); getRuleAlertSummaryRoute(router, licenseState); getRuleExecutionLogRoute(router, licenseState); + getActionErrorLogRoute(router, licenseState); getRuleStateRoute(router, licenseState); healthRoute(router, licenseState, encryptedSavedObjects); ruleTypesRoute(router, licenseState); diff --git a/x-pack/plugins/alerting/server/rules_client.mock.ts b/x-pack/plugins/alerting/server/rules_client.mock.ts index e72f5840dbac6..9c504bba192cd 100644 --- a/x-pack/plugins/alerting/server/rules_client.mock.ts +++ b/x-pack/plugins/alerting/server/rules_client.mock.ts @@ -30,6 +30,7 @@ const createRulesClientMock = () => { listAlertTypes: jest.fn(), getAlertSummary: jest.fn(), getExecutionLogForRule: jest.fn(), + getActionErrorLog: jest.fn(), getSpaceId: jest.fn(), bulkEdit: jest.fn(), snooze: jest.fn(), diff --git a/x-pack/plugins/alerting/server/rules_client/audit_events.ts b/x-pack/plugins/alerting/server/rules_client/audit_events.ts index 0d722498f50aa..215e16f32f29a 100644 --- a/x-pack/plugins/alerting/server/rules_client/audit_events.ts +++ b/x-pack/plugins/alerting/server/rules_client/audit_events.ts @@ -25,6 +25,7 @@ export enum RuleAuditAction { AGGREGATE = 'rule_aggregate', BULK_EDIT = 'rule_bulk_edit', GET_EXECUTION_LOG = 'rule_get_execution_log', + GET_ACTION_ERROR_LOG = 'rule_get_action_error_log', SNOOZE = 'rule_snooze', UNSNOOZE = 'rule_unsnooze', } @@ -52,6 +53,11 @@ const eventVerbs: Record = { 'accessing execution log for', 'accessed execution log for', ], + rule_get_action_error_log: [ + 'access action error log for', + 'accessing action error log for', + 'accessed action error log for', + ], rule_snooze: ['snooze', 'snoozing', 'snoozed'], rule_unsnooze: ['unsnooze', 'unsnoozing', 'unsnoozed'], }; @@ -73,6 +79,7 @@ const eventTypes: Record = { rule_alert_unmute: 'change', rule_aggregate: 'access', rule_get_execution_log: 'access', + rule_get_action_error_log: 'access', rule_snooze: 'change', rule_unsnooze: 'change', }; diff --git a/x-pack/plugins/alerting/server/rules_client/rules_client.ts b/x-pack/plugins/alerting/server/rules_client/rules_client.ts index 4ffa39c797a53..c6a543a0b826e 100644 --- a/x-pack/plugins/alerting/server/rules_client/rules_client.ts +++ b/x-pack/plugins/alerting/server/rules_client/rules_client.ts @@ -65,6 +65,7 @@ import { validateMutatedRuleTypeParams, convertRuleIdsToKueryNode, getRuleSnoozeEndTime, + convertEsSortToEventLogSort, } from '../lib'; import { taskInstanceToAlertTaskInstance } from '../task_runner/alert_task_instance'; import { RegistryRuleType, UntypedNormalizedRuleType } from '../rule_type_registry'; @@ -107,7 +108,7 @@ import { formatExecutionLogResult, getExecutionLogAggregation, } from '../lib/get_execution_log_aggregation'; -import { IExecutionLogWithErrorsResult } from '../../common'; +import { IExecutionLogResult, IExecutionErrorsResult } from '../../common'; import { validateSnoozeStartDate } from '../lib/validate_snooze_date'; import { RuleMutedError } from '../lib/errors/rule_muted'; import { formatExecutionErrorsResult } from '../lib/format_execution_log_errors'; @@ -355,6 +356,16 @@ export interface GetExecutionLogByIdParams { sort: estypes.Sort; } +export interface GetActionErrorLogByIdParams { + id: string; + dateStart: string; + dateEnd?: string; + filter?: string; + page: number; + perPage: number; + sort: estypes.Sort; +} + interface ScheduleRuleOptions { id: string; consumer: string; @@ -790,7 +801,7 @@ export class RulesClient { page, perPage, sort, - }: GetExecutionLogByIdParams): Promise { + }: GetExecutionLogByIdParams): Promise { this.logger.debug(`getExecutionLogForRule(): getting execution log for rule ${id}`); const rule = (await this.get({ id, includeLegacyId: true })) as SanitizedRuleWithLegacyId; @@ -828,40 +839,23 @@ export class RulesClient { const eventLogClient = await this.getEventLogClient(); try { - const [aggResult, errorResult] = await Promise.all([ - eventLogClient.aggregateEventsBySavedObjectIds( - 'alert', - [id], - { - start: parsedDateStart.toISOString(), - end: parsedDateEnd.toISOString(), - filter, - aggs: getExecutionLogAggregation({ - page, - perPage, - sort, - }), - }, - rule.legacyId !== null ? [rule.legacyId] : undefined - ), - eventLogClient.findEventsBySavedObjectIds( - 'alert', - [id], - { - start: parsedDateStart.toISOString(), - end: parsedDateEnd.toISOString(), - per_page: 500, - filter: `(event.action:execute AND (event.outcome:failure OR kibana.alerting.status:warning)) OR (event.action:execute-timeout)`, - sort: [{ sort_field: '@timestamp', sort_order: 'desc' }], - }, - rule.legacyId !== null ? [rule.legacyId] : undefined - ), - ]); + const aggResult = await eventLogClient.aggregateEventsBySavedObjectIds( + 'alert', + [id], + { + start: parsedDateStart.toISOString(), + end: parsedDateEnd.toISOString(), + filter, + aggs: getExecutionLogAggregation({ + page, + perPage, + sort, + }), + }, + rule.legacyId !== null ? [rule.legacyId] : undefined + ); - return { - ...formatExecutionLogResult(aggResult), - ...formatExecutionErrorsResult(errorResult), - }; + return formatExecutionLogResult(aggResult); } catch (err) { this.logger.debug( `rulesClient.getExecutionLogForRule(): error searching event log for rule ${id}: ${err.message}` @@ -870,6 +864,77 @@ export class RulesClient { } } + public async getActionErrorLog({ + id, + dateStart, + dateEnd, + filter, + page, + perPage, + sort, + }: GetActionErrorLogByIdParams): Promise { + this.logger.debug(`getActionErrorLog(): getting action error logs for rule ${id}`); + const rule = (await this.get({ id, includeLegacyId: true })) as SanitizedRuleWithLegacyId; + + try { + // Make sure user has access to this rule + await this.authorization.ensureAuthorized({ + ruleTypeId: rule.alertTypeId, + consumer: rule.consumer, + operation: ReadOperations.GetActionErrorLog, + entity: AlertingAuthorizationEntity.Rule, + }); + } catch (error) { + this.auditLogger?.log( + ruleAuditEvent({ + action: RuleAuditAction.GET_ACTION_ERROR_LOG, + savedObject: { type: 'alert', id }, + error, + }) + ); + throw error; + } + + this.auditLogger?.log( + ruleAuditEvent({ + action: RuleAuditAction.GET_ACTION_ERROR_LOG, + savedObject: { type: 'alert', id }, + }) + ); + + const defaultFilter = + 'event.provider:actions AND ((event.action:execute AND (event.outcome:failure OR kibana.alerting.status:warning)) OR (event.action:execute-timeout))'; + + // default duration of instance summary is 60 * rule interval + const dateNow = new Date(); + const parsedDateStart = parseDate(dateStart, 'dateStart', dateNow); + const parsedDateEnd = parseDate(dateEnd, 'dateEnd', dateNow); + + const eventLogClient = await this.getEventLogClient(); + + try { + const errorResult = await eventLogClient.findEventsBySavedObjectIds( + 'alert', + [id], + { + start: parsedDateStart.toISOString(), + end: parsedDateEnd.toISOString(), + page, + per_page: perPage, + filter: filter ? `(${defaultFilter}) AND (${filter})` : defaultFilter, + sort: convertEsSortToEventLogSort(sort), + }, + rule.legacyId !== null ? [rule.legacyId] : undefined + ); + return formatExecutionErrorsResult(errorResult); + } catch (err) { + this.logger.debug( + `rulesClient.getActionErrorLog(): error searching event log for rule ${id}: ${err.message}` + ); + throw err; + } + } + public async find({ options: { fields, ...options } = {}, excludeFromPublicApi = false, diff --git a/x-pack/plugins/alerting/server/rules_client/tests/get_action_error_log.test.ts b/x-pack/plugins/alerting/server/rules_client/tests/get_action_error_log.test.ts new file mode 100644 index 0000000000000..3a18634b4f5db --- /dev/null +++ b/x-pack/plugins/alerting/server/rules_client/tests/get_action_error_log.test.ts @@ -0,0 +1,576 @@ +/* + * 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 { RulesClient, ConstructorOptions, GetActionErrorLogByIdParams } from '../rules_client'; +import { savedObjectsClientMock, loggingSystemMock } from '@kbn/core/server/mocks'; +import { taskManagerMock } from '@kbn/task-manager-plugin/server/mocks'; +import { ruleTypeRegistryMock } from '../../rule_type_registry.mock'; +import { alertingAuthorizationMock } from '../../authorization/alerting_authorization.mock'; +import { encryptedSavedObjectsMock } from '@kbn/encrypted-saved-objects-plugin/server/mocks'; +import { actionsAuthorizationMock } from '@kbn/actions-plugin/server/mocks'; +import { AlertingAuthorization } from '../../authorization/alerting_authorization'; +import { ActionsAuthorization } from '@kbn/actions-plugin/server'; +import { eventLogClientMock } from '@kbn/event-log-plugin/server/mocks'; +import { SavedObject } from '@kbn/core/server'; +import { RawRule } from '../../types'; +import { auditLoggerMock } from '@kbn/security-plugin/server/audit/mocks'; +import { getBeforeSetup, mockedDateString, setGlobalDate } from './lib'; + +const taskManager = taskManagerMock.createStart(); +const ruleTypeRegistry = ruleTypeRegistryMock.create(); +const unsecuredSavedObjectsClient = savedObjectsClientMock.create(); +const eventLogClient = eventLogClientMock.create(); + +const encryptedSavedObjects = encryptedSavedObjectsMock.createClient(); +const authorization = alertingAuthorizationMock.create(); +const actionsAuthorization = actionsAuthorizationMock.create(); +const auditLogger = auditLoggerMock.create(); + +const kibanaVersion = 'v7.10.0'; +const rulesClientParams: jest.Mocked = { + taskManager, + ruleTypeRegistry, + unsecuredSavedObjectsClient, + authorization: authorization as unknown as AlertingAuthorization, + actionsAuthorization: actionsAuthorization as unknown as ActionsAuthorization, + spaceId: 'default', + namespace: 'default', + minimumScheduleInterval: { value: '1m', enforce: false }, + getUserName: jest.fn(), + createAPIKey: jest.fn(), + logger: loggingSystemMock.create().get(), + encryptedSavedObjectsClient: encryptedSavedObjects, + getActionsClient: jest.fn(), + getEventLogClient: jest.fn(), + kibanaVersion, + auditLogger, +}; + +beforeEach(() => { + getBeforeSetup(rulesClientParams, taskManager, ruleTypeRegistry, eventLogClient); + (auditLogger.log as jest.Mock).mockClear(); +}); + +setGlobalDate(); + +const RuleIntervalSeconds = 1; + +const BaseRuleSavedObject: SavedObject = { + id: '1', + type: 'alert', + attributes: { + enabled: true, + name: 'rule-name', + tags: ['tag-1', 'tag-2'], + alertTypeId: '123', + consumer: 'rule-consumer', + legacyId: null, + schedule: { interval: `${RuleIntervalSeconds}s` }, + actions: [], + params: {}, + createdBy: null, + updatedBy: null, + createdAt: mockedDateString, + updatedAt: mockedDateString, + apiKey: null, + apiKeyOwner: null, + throttle: null, + notifyWhen: null, + muteAll: false, + mutedInstanceIds: [], + executionStatus: { + status: 'unknown', + lastExecutionDate: '2020-08-20T19:23:38Z', + error: null, + warning: null, + }, + }, + references: [], +}; + +const findResults = { + page: 1, + per_page: 500, + total: 5, + data: [ + { + '@timestamp': '2022-03-23T17:37:07.106Z', + event: { + provider: 'actions', + action: 'execute', + kind: 'action', + start: '2022-03-23T17:37:07.105Z', + end: '2022-03-23T17:37:07.105Z', + duration: '0', + outcome: 'failure', + }, + kibana: { + alert: { + rule: { + execution: { + uuid: '08d9b0f5-0b41-47c9-951f-a666b5788ddc', + }, + }, + }, + saved_objects: [ + { + rel: 'primary', + type: 'action', + id: '9e67b8b0-9e2c-11ec-bd64-774ed95c43ef', + type_id: '.server-log', + }, + { + rel: 'primary', + type: 'alert', + id: 'a348a740-9e2c-11ec-bd64-774ed95c43ef', + type_id: 'example.always-firing', + }, + ], + task: { + scheduled: '2022-03-23T17:37:04.674Z', + schedule_delay: 2431000000, + }, + server_uuid: '5b2de169-2785-441b-ae8c-186a1936b17d', + version: '8.2.0', + }, + message: 'action execution failure: .server-log:9e67b8b0-9e2c-11ec-bd64-774ed95c43ef: s', + error: { + message: + 'an error occurred while running the action executor: something funky with the server log', + }, + ecs: { + version: '1.8.0', + }, + }, + { + '@timestamp': '2022-03-23T17:37:07.102Z', + event: { + provider: 'actions', + action: 'execute', + kind: 'action', + start: '2022-03-23T17:37:07.101Z', + end: '2022-03-23T17:37:07.102Z', + duration: '1000000', + outcome: 'failure', + }, + kibana: { + alert: { + rule: { + execution: { + uuid: '08d9b0f5-0b41-47c9-951f-a666b5788ddc', + }, + }, + }, + saved_objects: [ + { + rel: 'primary', + type: 'action', + id: '9e67b8b0-9e2c-11ec-bd64-774ed95c43ef', + type_id: '.server-log', + }, + { + rel: 'primary', + type: 'alert', + id: 'a348a740-9e2c-11ec-bd64-774ed95c43ef', + type_id: 'example.always-firing', + }, + ], + task: { + scheduled: '2022-03-23T17:37:04.676Z', + schedule_delay: 2425000000, + }, + server_uuid: '5b2de169-2785-441b-ae8c-186a1936b17d', + version: '8.2.0', + }, + message: 'action execution failure: .server-log:9e67b8b0-9e2c-11ec-bd64-774ed95c43ef: s', + error: { + message: + 'an error occurred while running the action executor: something funky with the server log', + }, + ecs: { + version: '1.8.0', + }, + }, + { + '@timestamp': '2022-03-23T17:37:07.098Z', + event: { + provider: 'actions', + action: 'execute', + kind: 'action', + start: '2022-03-23T17:37:07.098Z', + end: '2022-03-23T17:37:07.098Z', + duration: '0', + outcome: 'failure', + }, + kibana: { + alert: { + rule: { + execution: { + uuid: '08d9b0f5-0b41-47c9-951f-a666b5788ddc', + }, + }, + }, + saved_objects: [ + { + rel: 'primary', + type: 'action', + id: '9e67b8b0-9e2c-11ec-bd64-774ed95c43ef', + type_id: '.server-log', + }, + { + rel: 'primary', + type: 'alert', + id: 'a348a740-9e2c-11ec-bd64-774ed95c43ef', + type_id: 'example.always-firing', + }, + ], + task: { + scheduled: '2022-03-23T17:37:04.673Z', + schedule_delay: 2425000000, + }, + server_uuid: '5b2de169-2785-441b-ae8c-186a1936b17d', + version: '8.2.0', + }, + message: 'action execution failure: .server-log:9e67b8b0-9e2c-11ec-bd64-774ed95c43ef: s', + error: { + message: + 'an error occurred while running the action executor: something funky with the server log', + }, + ecs: { + version: '1.8.0', + }, + }, + { + '@timestamp': '2022-03-23T17:37:07.096Z', + event: { + provider: 'actions', + action: 'execute', + kind: 'action', + start: '2022-03-23T17:37:07.095Z', + end: '2022-03-23T17:37:07.096Z', + duration: '1000000', + outcome: 'failure', + }, + kibana: { + alert: { + rule: { + execution: { + uuid: '08d9b0f5-0b41-47c9-951f-a666b5788ddc', + }, + }, + }, + saved_objects: [ + { + rel: 'primary', + type: 'action', + id: '9e67b8b0-9e2c-11ec-bd64-774ed95c43ef', + type_id: '.server-log', + }, + { + rel: 'primary', + type: 'alert', + id: 'a348a740-9e2c-11ec-bd64-774ed95c43ef', + type_id: 'example.always-firing', + }, + ], + task: { + scheduled: '2022-03-23T17:37:04.677Z', + schedule_delay: 2418000000, + }, + server_uuid: '5b2de169-2785-441b-ae8c-186a1936b17d', + version: '8.2.0', + }, + message: 'action execution failure: .server-log:9e67b8b0-9e2c-11ec-bd64-774ed95c43ef: s', + error: { + message: + 'an error occurred while running the action executor: something funky with the server log', + }, + ecs: { + version: '1.8.0', + }, + }, + { + '@timestamp': '2022-03-23T17:37:07.086Z', + event: { + provider: 'actions', + action: 'execute', + kind: 'action', + start: '2022-03-23T17:37:07.084Z', + end: '2022-03-23T17:37:07.086Z', + duration: '2000000', + outcome: 'failure', + }, + kibana: { + alert: { + rule: { + execution: { + uuid: '08d9b0f5-0b41-47c9-951f-a666b5788ddc', + }, + }, + }, + saved_objects: [ + { + rel: 'primary', + type: 'action', + id: '9e67b8b0-9e2c-11ec-bd64-774ed95c43ef', + type_id: '.server-log', + }, + { + rel: 'primary', + type: 'alert', + id: 'a348a740-9e2c-11ec-bd64-774ed95c43ef', + type_id: 'example.always-firing', + }, + ], + task: { + scheduled: '2022-03-23T17:37:04.678Z', + schedule_delay: 2406000000, + }, + server_uuid: '5b2de169-2785-441b-ae8c-186a1936b17d', + version: '8.2.0', + }, + message: 'action execution failure: .server-log:9e67b8b0-9e2c-11ec-bd64-774ed95c43ef: s', + error: { + message: + 'an error occurred while running the action executor: something funky with the server log', + }, + ecs: { + version: '1.8.0', + }, + }, + ], +}; + +const getRuleSavedObject = (attributes: Partial = {}): SavedObject => { + return { + ...BaseRuleSavedObject, + attributes: { ...BaseRuleSavedObject.attributes, ...attributes }, + }; +}; + +const getActionErrorLogParams = (overwrites = {}) => { + return { + id: '1', + dateStart: new Date(Date.now() - 3600000).toISOString(), + page: 1, + perPage: 10, + sort: [ + { + '@timestamp': { + order: 'asc', + }, + }, + ] as GetActionErrorLogByIdParams['sort'], + ...overwrites, + }; +}; + +describe('getActionErrorLog()', () => { + let rulesClient: RulesClient; + + beforeEach(() => { + rulesClient = new RulesClient(rulesClientParams); + }); + + test('returns the expected return values when called', async () => { + const ruleSO = getRuleSavedObject({}); + unsecuredSavedObjectsClient.get.mockResolvedValueOnce(ruleSO); + eventLogClient.findEventsBySavedObjectIds.mockResolvedValueOnce(findResults); + + const result = await rulesClient.getActionErrorLog(getActionErrorLogParams()); + expect(result).toEqual({ + totalErrors: 5, + errors: [ + { + id: '08d9b0f5-0b41-47c9-951f-a666b5788ddc', + timestamp: '2022-03-23T17:37:07.106Z', + type: 'actions', + message: + 'action execution failure: .server-log:9e67b8b0-9e2c-11ec-bd64-774ed95c43ef: s - an error occurred while running the action executor: something funky with the server log', + }, + { + id: '08d9b0f5-0b41-47c9-951f-a666b5788ddc', + timestamp: '2022-03-23T17:37:07.102Z', + type: 'actions', + message: + 'action execution failure: .server-log:9e67b8b0-9e2c-11ec-bd64-774ed95c43ef: s - an error occurred while running the action executor: something funky with the server log', + }, + { + id: '08d9b0f5-0b41-47c9-951f-a666b5788ddc', + timestamp: '2022-03-23T17:37:07.098Z', + type: 'actions', + message: + 'action execution failure: .server-log:9e67b8b0-9e2c-11ec-bd64-774ed95c43ef: s - an error occurred while running the action executor: something funky with the server log', + }, + { + id: '08d9b0f5-0b41-47c9-951f-a666b5788ddc', + timestamp: '2022-03-23T17:37:07.096Z', + type: 'actions', + message: + 'action execution failure: .server-log:9e67b8b0-9e2c-11ec-bd64-774ed95c43ef: s - an error occurred while running the action executor: something funky with the server log', + }, + { + id: '08d9b0f5-0b41-47c9-951f-a666b5788ddc', + timestamp: '2022-03-23T17:37:07.086Z', + type: 'actions', + message: + 'action execution failure: .server-log:9e67b8b0-9e2c-11ec-bd64-774ed95c43ef: s - an error occurred while running the action executor: something funky with the server log', + }, + ], + }); + }); + + test('calls event log client with legacy ids param', async () => { + unsecuredSavedObjectsClient.get.mockResolvedValueOnce( + getRuleSavedObject({ legacyId: '99999' }) + ); + + eventLogClient.findEventsBySavedObjectIds.mockResolvedValueOnce(findResults); + + await rulesClient.getActionErrorLog(getActionErrorLogParams()); + + expect(unsecuredSavedObjectsClient.get).toHaveBeenCalledTimes(1); + expect(eventLogClient.findEventsBySavedObjectIds).toHaveBeenCalledTimes(1); + expect(eventLogClient.findEventsBySavedObjectIds.mock.calls[0]).toEqual([ + 'alert', + ['1'], + { + page: 1, + per_page: 10, + filter: + 'event.provider:actions AND ((event.action:execute AND (event.outcome:failure OR kibana.alerting.status:warning)) OR (event.action:execute-timeout))', + sort: [{ sort_field: '@timestamp', sort_order: 'asc' }], + end: mockedDateString, + start: '2019-02-12T20:01:22.479Z', + }, + ['99999'], + ]); + }); + + test('calls event log client with end date, filter, and paging', async () => { + unsecuredSavedObjectsClient.get.mockResolvedValueOnce(getRuleSavedObject()); + eventLogClient.findEventsBySavedObjectIds.mockResolvedValueOnce(findResults); + + await rulesClient.getActionErrorLog( + getActionErrorLogParams({ + page: 3, + perPage: 20, + dateEnd: new Date(Date.now() - 2700000).toISOString(), + filter: 'message: "test" AND runId: 123', + }) + ); + + expect(eventLogClient.findEventsBySavedObjectIds).toHaveBeenCalledTimes(1); + expect(eventLogClient.findEventsBySavedObjectIds.mock.calls[0]).toEqual([ + 'alert', + ['1'], + { + page: 3, + per_page: 20, + filter: + '(event.provider:actions AND ((event.action:execute AND (event.outcome:failure OR kibana.alerting.status:warning)) OR (event.action:execute-timeout))) AND (message: "test" AND runId: 123)', + sort: [{ sort_field: '@timestamp', sort_order: 'asc' }], + end: '2019-02-12T20:16:22.479Z', + start: '2019-02-12T20:01:22.479Z', + }, + undefined, + ]); + }); + + test('throws error when eventLog.findEventsBySavedObjectIds throws an error', async () => { + unsecuredSavedObjectsClient.get.mockResolvedValueOnce(getRuleSavedObject()); + eventLogClient.findEventsBySavedObjectIds.mockRejectedValueOnce(new Error('OMG 3!')); + + expect(rulesClient.getActionErrorLog(getActionErrorLogParams())).rejects.toMatchInlineSnapshot( + `[Error: OMG 3!]` + ); + }); + describe('authorization', () => { + beforeEach(() => { + const ruleSO = getRuleSavedObject({}); + unsecuredSavedObjectsClient.get.mockResolvedValueOnce(ruleSO); + }); + + test('ensures user is authorised to get this type of alert under the consumer', async () => { + eventLogClient.findEventsBySavedObjectIds.mockResolvedValueOnce(findResults); + await rulesClient.getActionErrorLog(getActionErrorLogParams()); + + expect(authorization.ensureAuthorized).toHaveBeenCalledWith({ + entity: 'rule', + consumer: 'rule-consumer', + operation: 'get', + ruleTypeId: '123', + }); + }); + + test('throws when user is not authorised to get this type of alert', async () => { + authorization.ensureAuthorized.mockRejectedValueOnce( + new Error(`Unauthorized to get a "myType" alert for "myApp"`) + ); + + await expect( + rulesClient.getActionErrorLog(getActionErrorLogParams()) + ).rejects.toMatchInlineSnapshot(`[Error: Unauthorized to get a "myType" alert for "myApp"]`); + + expect(authorization.ensureAuthorized).toHaveBeenCalledWith({ + entity: 'rule', + consumer: 'rule-consumer', + operation: 'get', + ruleTypeId: '123', + }); + }); + }); + + describe('auditLogger', () => { + beforeEach(() => { + const ruleSO = getRuleSavedObject({}); + unsecuredSavedObjectsClient.get.mockResolvedValueOnce(ruleSO); + }); + + test('logs audit event when getting a rule execution log', async () => { + eventLogClient.findEventsBySavedObjectIds.mockResolvedValueOnce(findResults); + await rulesClient.getActionErrorLog(getActionErrorLogParams()); + expect(auditLogger.log).toHaveBeenCalledWith( + expect.objectContaining({ + event: expect.objectContaining({ + action: 'rule_get_action_error_log', + outcome: 'success', + }), + kibana: { saved_object: { id: '1', type: 'alert' } }, + }) + ); + }); + + test('logs audit event when not authorised to get a rule', async () => { + // first call occurs during rule SO get + authorization.ensureAuthorized.mockResolvedValueOnce(); + authorization.ensureAuthorized.mockRejectedValueOnce(new Error('Unauthorized')); + + await expect( + rulesClient.getActionErrorLog(getActionErrorLogParams()) + ).rejects.toMatchInlineSnapshot(`[Error: Unauthorized]`); + expect(auditLogger.log).toHaveBeenCalledWith( + expect.objectContaining({ + event: expect.objectContaining({ + action: 'rule_get_action_error_log', + outcome: 'failure', + }), + kibana: { + saved_object: { + id: '1', + type: 'alert', + }, + }, + error: { + code: 'Error', + message: 'Unauthorized', + }, + }) + ); + }); + }); +}); diff --git a/x-pack/plugins/alerting/server/rules_client/tests/get_execution_log.test.ts b/x-pack/plugins/alerting/server/rules_client/tests/get_execution_log.test.ts index 04653d491f28b..7f14ec3681bb1 100644 --- a/x-pack/plugins/alerting/server/rules_client/tests/get_execution_log.test.ts +++ b/x-pack/plugins/alerting/server/rules_client/tests/get_execution_log.test.ts @@ -279,313 +279,6 @@ const aggregateResults = { }, }; -const findResults = { - page: 1, - per_page: 500, - total: 6, - data: [ - { - '@timestamp': '2022-03-23T17:37:07.106Z', - event: { - provider: 'actions', - action: 'execute', - kind: 'action', - start: '2022-03-23T17:37:07.105Z', - end: '2022-03-23T17:37:07.105Z', - duration: '0', - outcome: 'failure', - }, - kibana: { - alert: { - rule: { - execution: { - uuid: '08d9b0f5-0b41-47c9-951f-a666b5788ddc', - }, - }, - }, - saved_objects: [ - { - rel: 'primary', - type: 'action', - id: '9e67b8b0-9e2c-11ec-bd64-774ed95c43ef', - type_id: '.server-log', - }, - { - rel: 'primary', - type: 'alert', - id: 'a348a740-9e2c-11ec-bd64-774ed95c43ef', - type_id: 'example.always-firing', - }, - ], - task: { - scheduled: '2022-03-23T17:37:04.674Z', - schedule_delay: 2431000000, - }, - server_uuid: '5b2de169-2785-441b-ae8c-186a1936b17d', - version: '8.2.0', - }, - message: 'action execution failure: .server-log:9e67b8b0-9e2c-11ec-bd64-774ed95c43ef: s', - error: { - message: - 'an error occurred while running the action executor: something funky with the server log', - }, - ecs: { - version: '1.8.0', - }, - }, - { - '@timestamp': '2022-03-23T17:37:07.102Z', - event: { - provider: 'actions', - action: 'execute', - kind: 'action', - start: '2022-03-23T17:37:07.101Z', - end: '2022-03-23T17:37:07.102Z', - duration: '1000000', - outcome: 'failure', - }, - kibana: { - alert: { - rule: { - execution: { - uuid: '08d9b0f5-0b41-47c9-951f-a666b5788ddc', - }, - }, - }, - saved_objects: [ - { - rel: 'primary', - type: 'action', - id: '9e67b8b0-9e2c-11ec-bd64-774ed95c43ef', - type_id: '.server-log', - }, - { - rel: 'primary', - type: 'alert', - id: 'a348a740-9e2c-11ec-bd64-774ed95c43ef', - type_id: 'example.always-firing', - }, - ], - task: { - scheduled: '2022-03-23T17:37:04.676Z', - schedule_delay: 2425000000, - }, - server_uuid: '5b2de169-2785-441b-ae8c-186a1936b17d', - version: '8.2.0', - }, - message: 'action execution failure: .server-log:9e67b8b0-9e2c-11ec-bd64-774ed95c43ef: s', - error: { - message: - 'an error occurred while running the action executor: something funky with the server log', - }, - ecs: { - version: '1.8.0', - }, - }, - { - '@timestamp': '2022-03-23T17:37:07.098Z', - event: { - provider: 'actions', - action: 'execute', - kind: 'action', - start: '2022-03-23T17:37:07.098Z', - end: '2022-03-23T17:37:07.098Z', - duration: '0', - outcome: 'failure', - }, - kibana: { - alert: { - rule: { - execution: { - uuid: '08d9b0f5-0b41-47c9-951f-a666b5788ddc', - }, - }, - }, - saved_objects: [ - { - rel: 'primary', - type: 'action', - id: '9e67b8b0-9e2c-11ec-bd64-774ed95c43ef', - type_id: '.server-log', - }, - { - rel: 'primary', - type: 'alert', - id: 'a348a740-9e2c-11ec-bd64-774ed95c43ef', - type_id: 'example.always-firing', - }, - ], - task: { - scheduled: '2022-03-23T17:37:04.673Z', - schedule_delay: 2425000000, - }, - server_uuid: '5b2de169-2785-441b-ae8c-186a1936b17d', - version: '8.2.0', - }, - message: 'action execution failure: .server-log:9e67b8b0-9e2c-11ec-bd64-774ed95c43ef: s', - error: { - message: - 'an error occurred while running the action executor: something funky with the server log', - }, - ecs: { - version: '1.8.0', - }, - }, - { - '@timestamp': '2022-03-23T17:37:07.096Z', - event: { - provider: 'actions', - action: 'execute', - kind: 'action', - start: '2022-03-23T17:37:07.095Z', - end: '2022-03-23T17:37:07.096Z', - duration: '1000000', - outcome: 'failure', - }, - kibana: { - alert: { - rule: { - execution: { - uuid: '08d9b0f5-0b41-47c9-951f-a666b5788ddc', - }, - }, - }, - saved_objects: [ - { - rel: 'primary', - type: 'action', - id: '9e67b8b0-9e2c-11ec-bd64-774ed95c43ef', - type_id: '.server-log', - }, - { - rel: 'primary', - type: 'alert', - id: 'a348a740-9e2c-11ec-bd64-774ed95c43ef', - type_id: 'example.always-firing', - }, - ], - task: { - scheduled: '2022-03-23T17:37:04.677Z', - schedule_delay: 2418000000, - }, - server_uuid: '5b2de169-2785-441b-ae8c-186a1936b17d', - version: '8.2.0', - }, - message: 'action execution failure: .server-log:9e67b8b0-9e2c-11ec-bd64-774ed95c43ef: s', - error: { - message: - 'an error occurred while running the action executor: something funky with the server log', - }, - ecs: { - version: '1.8.0', - }, - }, - { - '@timestamp': '2022-03-23T17:37:07.086Z', - event: { - provider: 'actions', - action: 'execute', - kind: 'action', - start: '2022-03-23T17:37:07.084Z', - end: '2022-03-23T17:37:07.086Z', - duration: '2000000', - outcome: 'failure', - }, - kibana: { - alert: { - rule: { - execution: { - uuid: '08d9b0f5-0b41-47c9-951f-a666b5788ddc', - }, - }, - }, - saved_objects: [ - { - rel: 'primary', - type: 'action', - id: '9e67b8b0-9e2c-11ec-bd64-774ed95c43ef', - type_id: '.server-log', - }, - { - rel: 'primary', - type: 'alert', - id: 'a348a740-9e2c-11ec-bd64-774ed95c43ef', - type_id: 'example.always-firing', - }, - ], - task: { - scheduled: '2022-03-23T17:37:04.678Z', - schedule_delay: 2406000000, - }, - server_uuid: '5b2de169-2785-441b-ae8c-186a1936b17d', - version: '8.2.0', - }, - message: 'action execution failure: .server-log:9e67b8b0-9e2c-11ec-bd64-774ed95c43ef: s', - error: { - message: - 'an error occurred while running the action executor: something funky with the server log', - }, - ecs: { - version: '1.8.0', - }, - }, - { - '@timestamp': '2022-03-23T17:23:05.249Z', - event: { - provider: 'alerting', - action: 'execute', - kind: 'alert', - category: ['AlertingExample'], - start: '2022-03-23T17:23:05.131Z', - outcome: 'failure', - end: '2022-03-23T17:23:05.248Z', - duration: '117000000', - reason: 'execute', - }, - kibana: { - alert: { - rule: { - execution: { - uuid: 'c1c04f04-312e-4e23-8e36-e01eb4332ed6', - }, - }, - }, - saved_objects: [ - { - rel: 'primary', - type: 'alert', - id: 'a348a740-9e2c-11ec-bd64-774ed95c43ef', - type_id: 'example.always-firing', - }, - ], - task: { - scheduled: '2022-03-23T17:22:23.618Z', - schedule_delay: 41512000000, - }, - alerting: { - status: 'error', - }, - server_uuid: '5b2de169-2785-441b-ae8c-186a1936b17d', - version: '8.2.0', - }, - rule: { - id: 'a348a740-9e2c-11ec-bd64-774ed95c43ef', - license: 'basic', - category: 'example.always-firing', - ruleset: 'AlertingExample', - }, - message: - "rule execution failure: example.always-firing:a348a740-9e2c-11ec-bd64-774ed95c43ef: 'test rule'", - error: { - message: 'I am erroring in rule execution!!', - }, - ecs: { - version: '1.8.0', - }, - }, - ], -}; - function getRuleSavedObject(attributes: Partial = {}): SavedObject { return { ...BaseRuleSavedObject, @@ -614,7 +307,6 @@ describe('getExecutionLogForRule()', () => { const ruleSO = getRuleSavedObject({}); unsecuredSavedObjectsClient.get.mockResolvedValueOnce(ruleSO); eventLogClient.aggregateEventsBySavedObjectIds.mockResolvedValueOnce(aggregateResults); - eventLogClient.findEventsBySavedObjectIds.mockResolvedValueOnce(findResults); const result = await rulesClient.getExecutionLogForRule(getExecutionLogByIdParams()); expect(result).toEqual({ @@ -661,50 +353,6 @@ describe('getExecutionLogForRule()', () => { schedule_delay_ms: 3345, }, ], - totalErrors: 6, - errors: [ - { - id: '08d9b0f5-0b41-47c9-951f-a666b5788ddc', - timestamp: '2022-03-23T17:37:07.106Z', - type: 'actions', - message: - 'action execution failure: .server-log:9e67b8b0-9e2c-11ec-bd64-774ed95c43ef: s - an error occurred while running the action executor: something funky with the server log', - }, - { - id: '08d9b0f5-0b41-47c9-951f-a666b5788ddc', - timestamp: '2022-03-23T17:37:07.102Z', - type: 'actions', - message: - 'action execution failure: .server-log:9e67b8b0-9e2c-11ec-bd64-774ed95c43ef: s - an error occurred while running the action executor: something funky with the server log', - }, - { - id: '08d9b0f5-0b41-47c9-951f-a666b5788ddc', - timestamp: '2022-03-23T17:37:07.098Z', - type: 'actions', - message: - 'action execution failure: .server-log:9e67b8b0-9e2c-11ec-bd64-774ed95c43ef: s - an error occurred while running the action executor: something funky with the server log', - }, - { - id: '08d9b0f5-0b41-47c9-951f-a666b5788ddc', - timestamp: '2022-03-23T17:37:07.096Z', - type: 'actions', - message: - 'action execution failure: .server-log:9e67b8b0-9e2c-11ec-bd64-774ed95c43ef: s - an error occurred while running the action executor: something funky with the server log', - }, - { - id: '08d9b0f5-0b41-47c9-951f-a666b5788ddc', - timestamp: '2022-03-23T17:37:07.086Z', - type: 'actions', - message: - 'action execution failure: .server-log:9e67b8b0-9e2c-11ec-bd64-774ed95c43ef: s - an error occurred while running the action executor: something funky with the server log', - }, - { - id: 'c1c04f04-312e-4e23-8e36-e01eb4332ed6', - timestamp: '2022-03-23T17:23:05.249Z', - type: 'alerting', - message: `rule execution failure: example.always-firing:a348a740-9e2c-11ec-bd64-774ed95c43ef: 'test rule' - I am erroring in rule execution!!`, - }, - ], }); }); @@ -715,7 +363,6 @@ describe('getExecutionLogForRule()', () => { test('calls saved objects and event log client with default params', async () => { unsecuredSavedObjectsClient.get.mockResolvedValueOnce(getRuleSavedObject()); eventLogClient.aggregateEventsBySavedObjectIds.mockResolvedValueOnce(aggregateResults); - eventLogClient.findEventsBySavedObjectIds.mockResolvedValueOnce(findResults); await rulesClient.getExecutionLogForRule(getExecutionLogByIdParams()); @@ -735,19 +382,6 @@ describe('getExecutionLogForRule()', () => { }, undefined, ]); - expect(eventLogClient.findEventsBySavedObjectIds).toHaveBeenCalledTimes(1); - expect(eventLogClient.findEventsBySavedObjectIds.mock.calls[0]).toEqual([ - 'alert', - ['1'], - { - per_page: 500, - filter: `(event.action:execute AND (event.outcome:failure OR kibana.alerting.status:warning)) OR (event.action:execute-timeout)`, - sort: [{ sort_field: '@timestamp', sort_order: 'desc' }], - end: mockedDateString, - start: '2019-02-12T20:01:22.479Z', - }, - undefined, - ]); }); test('calls event log client with legacy ids param', async () => { @@ -755,7 +389,6 @@ describe('getExecutionLogForRule()', () => { getRuleSavedObject({ legacyId: '99999' }) ); eventLogClient.aggregateEventsBySavedObjectIds.mockResolvedValueOnce(aggregateResults); - eventLogClient.findEventsBySavedObjectIds.mockResolvedValueOnce(findResults); await rulesClient.getExecutionLogForRule(getExecutionLogByIdParams()); @@ -775,25 +408,11 @@ describe('getExecutionLogForRule()', () => { }, ['99999'], ]); - expect(eventLogClient.findEventsBySavedObjectIds).toHaveBeenCalledTimes(1); - expect(eventLogClient.findEventsBySavedObjectIds.mock.calls[0]).toEqual([ - 'alert', - ['1'], - { - per_page: 500, - filter: `(event.action:execute AND (event.outcome:failure OR kibana.alerting.status:warning)) OR (event.action:execute-timeout)`, - sort: [{ sort_field: '@timestamp', sort_order: 'desc' }], - end: mockedDateString, - start: '2019-02-12T20:01:22.479Z', - }, - ['99999'], - ]); }); test('calls event log client with end date if specified', async () => { unsecuredSavedObjectsClient.get.mockResolvedValueOnce(getRuleSavedObject()); eventLogClient.aggregateEventsBySavedObjectIds.mockResolvedValueOnce(aggregateResults); - eventLogClient.findEventsBySavedObjectIds.mockResolvedValueOnce(findResults); await rulesClient.getExecutionLogForRule( getExecutionLogByIdParams({ dateEnd: new Date(Date.now() - 2700000).toISOString() }) @@ -815,25 +434,11 @@ describe('getExecutionLogForRule()', () => { }, undefined, ]); - expect(eventLogClient.findEventsBySavedObjectIds).toHaveBeenCalledTimes(1); - expect(eventLogClient.findEventsBySavedObjectIds.mock.calls[0]).toEqual([ - 'alert', - ['1'], - { - per_page: 500, - filter: `(event.action:execute AND (event.outcome:failure OR kibana.alerting.status:warning)) OR (event.action:execute-timeout)`, - sort: [{ sort_field: '@timestamp', sort_order: 'desc' }], - end: '2019-02-12T20:16:22.479Z', - start: '2019-02-12T20:01:22.479Z', - }, - undefined, - ]); }); test('calls event log client with filter if specified', async () => { unsecuredSavedObjectsClient.get.mockResolvedValueOnce(getRuleSavedObject()); eventLogClient.aggregateEventsBySavedObjectIds.mockResolvedValueOnce(aggregateResults); - eventLogClient.findEventsBySavedObjectIds.mockResolvedValueOnce(findResults); await rulesClient.getExecutionLogForRule( getExecutionLogByIdParams({ filter: 'event.outcome: success' }) @@ -856,25 +461,11 @@ describe('getExecutionLogForRule()', () => { }, undefined, ]); - expect(eventLogClient.findEventsBySavedObjectIds).toHaveBeenCalledTimes(1); - expect(eventLogClient.findEventsBySavedObjectIds.mock.calls[0]).toEqual([ - 'alert', - ['1'], - { - per_page: 500, - filter: `(event.action:execute AND (event.outcome:failure OR kibana.alerting.status:warning)) OR (event.action:execute-timeout)`, - sort: [{ sort_field: '@timestamp', sort_order: 'desc' }], - end: mockedDateString, - start: '2019-02-12T20:01:22.479Z', - }, - undefined, - ]); }); test('invalid start date throws an error', async () => { unsecuredSavedObjectsClient.get.mockResolvedValueOnce(getRuleSavedObject()); eventLogClient.aggregateEventsBySavedObjectIds.mockResolvedValueOnce(aggregateResults); - eventLogClient.findEventsBySavedObjectIds.mockResolvedValueOnce(findResults); const dateStart = 'ain"t no way this will get parsed as a date'; expect( @@ -887,7 +478,6 @@ describe('getExecutionLogForRule()', () => { test('invalid end date throws an error', async () => { unsecuredSavedObjectsClient.get.mockResolvedValueOnce(getRuleSavedObject()); eventLogClient.aggregateEventsBySavedObjectIds.mockResolvedValueOnce(aggregateResults); - eventLogClient.findEventsBySavedObjectIds.mockResolvedValueOnce(findResults); const dateEnd = 'ain"t no way this will get parsed as a date'; expect( @@ -900,7 +490,6 @@ describe('getExecutionLogForRule()', () => { test('invalid page value throws an error', async () => { unsecuredSavedObjectsClient.get.mockResolvedValueOnce(getRuleSavedObject()); eventLogClient.aggregateEventsBySavedObjectIds.mockResolvedValueOnce(aggregateResults); - eventLogClient.findEventsBySavedObjectIds.mockResolvedValueOnce(findResults); expect( rulesClient.getExecutionLogForRule(getExecutionLogByIdParams({ page: -3 })) @@ -910,7 +499,6 @@ describe('getExecutionLogForRule()', () => { test('invalid perPage value throws an error', async () => { unsecuredSavedObjectsClient.get.mockResolvedValueOnce(getRuleSavedObject()); eventLogClient.aggregateEventsBySavedObjectIds.mockResolvedValueOnce(aggregateResults); - eventLogClient.findEventsBySavedObjectIds.mockResolvedValueOnce(findResults); expect( rulesClient.getExecutionLogForRule(getExecutionLogByIdParams({ perPage: -3 })) @@ -920,7 +508,6 @@ describe('getExecutionLogForRule()', () => { test('invalid sort value throws an error', async () => { unsecuredSavedObjectsClient.get.mockResolvedValueOnce(getRuleSavedObject()); eventLogClient.aggregateEventsBySavedObjectIds.mockResolvedValueOnce(aggregateResults); - eventLogClient.findEventsBySavedObjectIds.mockResolvedValueOnce(findResults); expect( rulesClient.getExecutionLogForRule( @@ -934,7 +521,6 @@ describe('getExecutionLogForRule()', () => { test('throws error when saved object get throws an error', async () => { unsecuredSavedObjectsClient.get.mockRejectedValueOnce(new Error('OMG!')); eventLogClient.aggregateEventsBySavedObjectIds.mockResolvedValueOnce(aggregateResults); - eventLogClient.findEventsBySavedObjectIds.mockResolvedValueOnce(findResults); expect( rulesClient.getExecutionLogForRule(getExecutionLogByIdParams()) @@ -944,23 +530,12 @@ describe('getExecutionLogForRule()', () => { test('throws error when eventLog.aggregateEventsBySavedObjectIds throws an error', async () => { unsecuredSavedObjectsClient.get.mockResolvedValueOnce(getRuleSavedObject()); eventLogClient.aggregateEventsBySavedObjectIds.mockRejectedValueOnce(new Error('OMG 2!')); - eventLogClient.findEventsBySavedObjectIds.mockResolvedValueOnce(findResults); expect( rulesClient.getExecutionLogForRule(getExecutionLogByIdParams()) ).rejects.toMatchInlineSnapshot(`[Error: OMG 2!]`); }); - test('throws error when eventLog.findEventsBySavedObjectIds throws an error', async () => { - unsecuredSavedObjectsClient.get.mockResolvedValueOnce(getRuleSavedObject()); - eventLogClient.aggregateEventsBySavedObjectIds.mockResolvedValueOnce(aggregateResults); - eventLogClient.findEventsBySavedObjectIds.mockRejectedValueOnce(new Error('OMG 3!')); - - expect( - rulesClient.getExecutionLogForRule(getExecutionLogByIdParams()) - ).rejects.toMatchInlineSnapshot(`[Error: OMG 3!]`); - }); - describe('authorization', () => { beforeEach(() => { const ruleSO = getRuleSavedObject({}); @@ -969,7 +544,6 @@ describe('getExecutionLogForRule()', () => { test('ensures user is authorised to get this type of alert under the consumer', async () => { eventLogClient.aggregateEventsBySavedObjectIds.mockResolvedValueOnce(aggregateResults); - eventLogClient.findEventsBySavedObjectIds.mockResolvedValueOnce(findResults); await rulesClient.getExecutionLogForRule(getExecutionLogByIdParams()); expect(authorization.ensureAuthorized).toHaveBeenCalledWith({ @@ -1006,7 +580,6 @@ describe('getExecutionLogForRule()', () => { test('logs audit event when getting a rule execution log', async () => { eventLogClient.aggregateEventsBySavedObjectIds.mockResolvedValueOnce(aggregateResults); - eventLogClient.findEventsBySavedObjectIds.mockResolvedValueOnce(findResults); await rulesClient.getExecutionLogForRule(getExecutionLogByIdParams()); expect(auditLogger.log).toHaveBeenCalledWith( expect.objectContaining({ diff --git a/x-pack/plugins/apm/common/ux_ui_filter.ts b/x-pack/plugins/apm/common/ux_ui_filter.ts deleted file mode 100644 index f1dd0394de62a..0000000000000 --- a/x-pack/plugins/apm/common/ux_ui_filter.ts +++ /dev/null @@ -1,126 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { i18n } from '@kbn/i18n'; -import { - CLIENT_GEO_COUNTRY_ISO_CODE, - SERVICE_NAME, - TRANSACTION_URL, - USER_AGENT_DEVICE, - USER_AGENT_NAME, - USER_AGENT_OS, -} from './elasticsearch_fieldnames'; - -export const uxFiltersByName = { - transactionUrl: { - title: i18n.translate('xpack.apm.localFilters.titles.transactionUrl', { - defaultMessage: 'URL', - }), - fieldName: TRANSACTION_URL, - }, - transactionUrlExcluded: { - title: i18n.translate('xpack.apm.localFilters.titles.transactionUrl', { - defaultMessage: 'URL', - }), - fieldName: TRANSACTION_URL, - excluded: true, - }, - browser: { - title: i18n.translate('xpack.apm.localFilters.titles.browser', { - defaultMessage: 'Browser', - }), - fieldName: USER_AGENT_NAME, - }, - browserExcluded: { - title: i18n.translate('xpack.apm.localFilters.titles.browser', { - defaultMessage: 'Browser', - }), - fieldName: USER_AGENT_NAME, - excluded: true, - }, - device: { - title: i18n.translate('xpack.apm.localFilters.titles.device', { - defaultMessage: 'Device', - }), - fieldName: USER_AGENT_DEVICE, - }, - deviceExcluded: { - title: i18n.translate('xpack.apm.localFilters.titles.device', { - defaultMessage: 'Device', - }), - fieldName: USER_AGENT_DEVICE, - excluded: true, - }, - location: { - title: i18n.translate('xpack.apm.localFilters.titles.location', { - defaultMessage: 'Location', - }), - fieldName: CLIENT_GEO_COUNTRY_ISO_CODE, - }, - locationExcluded: { - title: i18n.translate('xpack.apm.localFilters.titles.location', { - defaultMessage: 'Location', - }), - fieldName: CLIENT_GEO_COUNTRY_ISO_CODE, - excluded: true, - }, - os: { - title: i18n.translate('xpack.apm.localFilters.titles.os', { - defaultMessage: 'OS', - }), - fieldName: USER_AGENT_OS, - }, - osExcluded: { - title: i18n.translate('xpack.apm.localFilters.titles.os', { - defaultMessage: 'OS', - }), - fieldName: USER_AGENT_OS, - excluded: true, - }, - serviceName: { - title: i18n.translate('xpack.apm.localFilters.titles.serviceName', { - defaultMessage: 'Service name', - }), - fieldName: SERVICE_NAME, - }, -}; - -export type UxLocalUIFilterName = keyof typeof uxFiltersByName; - -export interface UxLocalUIFilter { - name: UxLocalUIFilterName; - title: string; - fieldName: string; - excluded?: boolean; - value: string[]; -} - -type UxLocalUIFilterMap = { - [key in UxLocalUIFilterName]: UxLocalUIFilter; -}; - -export const uxLocalUIFilterNames = Object.keys( - uxFiltersByName -) as UxLocalUIFilterName[]; - -export const uxLocalUIFilters = uxLocalUIFilterNames.reduce((acc, key) => { - const field = uxFiltersByName[key]; - - return { - ...acc, - [key]: { - ...field, - name: key, - }, - }; -}, {} as UxLocalUIFilterMap); - -export type UxUIFilters = { - environment?: string; -} & { - [key in UxLocalUIFilterName]?: string[]; -}; diff --git a/x-pack/plugins/apm/public/application/application.test.tsx b/x-pack/plugins/apm/public/application/application.test.tsx index dd74d072c306d..62adf0b2cb355 100644 --- a/x-pack/plugins/apm/public/application/application.test.tsx +++ b/x-pack/plugins/apm/public/application/application.test.tsx @@ -18,10 +18,6 @@ import { dataPluginMock } from '@kbn/data-plugin/public/mocks'; import { embeddablePluginMock } from '@kbn/embeddable-plugin/public/mocks'; import { ApmPluginSetupDeps, ApmPluginStartDeps } from '../plugin'; -jest.mock('../services/rest/data_view', () => ({ - createStaticDataView: () => Promise.resolve(undefined), -})); - describe('renderApp (APM)', () => { let mockConsole: jest.SpyInstance; beforeAll(() => { diff --git a/x-pack/plugins/apm/public/application/index.tsx b/x-pack/plugins/apm/public/application/index.tsx index b471655c6b7d5..1fff65f4746ad 100644 --- a/x-pack/plugins/apm/public/application/index.tsx +++ b/x-pack/plugins/apm/public/application/index.tsx @@ -18,7 +18,6 @@ import { KibanaThemeProvider } from '@kbn/kibana-react-plugin/public'; import { ConfigSchema } from '..'; import { ApmPluginSetupDeps, ApmPluginStartDeps } from '../plugin'; import { createCallApmApi } from '../services/rest/create_call_apm_api'; -import { createStaticDataView } from '../services/rest/data_view'; import { setHelpExtension } from '../set_help_extension'; import { setReadonlyBadge } from '../update_badge'; import { ApmAppRoot } from '../components/routing/app_root'; @@ -61,12 +60,6 @@ export const renderApp = ({ setReadonlyBadge(coreStart); createCallApmApi(coreStart); - // Automatically creates static data view and stores as saved object - createStaticDataView().catch((e) => { - // eslint-disable-next-line no-console - console.log('Error creating static data view', e); - }); - // add .kbnAppWrappers class to root element element.classList.add(APP_WRAPPER_CLASS); diff --git a/x-pack/plugins/apm/public/components/app/service_inventory/service_inventory.stories.tsx b/x-pack/plugins/apm/public/components/app/service_inventory/service_inventory.stories.tsx index cbda5f9d3ccfd..2cd79535afac5 100644 --- a/x-pack/plugins/apm/public/components/app/service_inventory/service_inventory.stories.tsx +++ b/x-pack/plugins/apm/public/components/app/service_inventory/service_inventory.stories.tsx @@ -36,11 +36,11 @@ const stories: Meta<{}> = { default: return {}; } - return {}; }, }, notifications: { toasts: { add: () => {}, addWarning: () => {} } }, uiSettings: { get: () => [] }, + dataViews: { get: async () => {} }, } as unknown as CoreStart; const KibanaReactContext = createKibanaReactContext(coreMock); diff --git a/x-pack/plugins/apm/public/components/app/trace_explorer/trace_search_box/index.tsx b/x-pack/plugins/apm/public/components/app/trace_explorer/trace_search_box/index.tsx index 4951a378c03c3..ad16bd7302220 100644 --- a/x-pack/plugins/apm/public/components/app/trace_explorer/trace_search_box/index.tsx +++ b/x-pack/plugins/apm/public/components/app/trace_explorer/trace_search_box/index.tsx @@ -19,7 +19,7 @@ import { TraceSearchQuery, TraceSearchType, } from '../../../../../common/trace_explorer'; -import { useStaticDataView } from '../../../../hooks/use_static_data_view'; +import { useApmDataView } from '../../../../hooks/use_apm_data_view'; import { useApmPluginContext } from '../../../../context/apm_plugin/use_apm_plugin_context'; import { EQLCodeEditorSuggestionType } from '../../../shared/eql_code_editor/constants'; import { LazilyLoadedEQLCodeEditor } from '../../../shared/eql_code_editor/lazily_loaded_code_editor'; @@ -57,7 +57,7 @@ export function TraceSearchBox({ loading, }: Props) { const { unifiedSearch } = useApmPluginContext(); - const { value: dataView } = useStaticDataView(); + const { dataView } = useApmDataView(); return ( diff --git a/x-pack/plugins/apm/public/components/shared/kuery_bar/index.tsx b/x-pack/plugins/apm/public/components/shared/kuery_bar/index.tsx index cf39561a5037b..0d02d38792bf3 100644 --- a/x-pack/plugins/apm/public/components/shared/kuery_bar/index.tsx +++ b/x-pack/plugins/apm/public/components/shared/kuery_bar/index.tsx @@ -16,7 +16,7 @@ import type { DataView } from '@kbn/data-views-plugin/public'; import { useApmPluginContext } from '../../../context/apm_plugin/use_apm_plugin_context'; import { useLegacyUrlParams } from '../../../context/url_params_context/use_url_params'; import { useApmParams } from '../../../hooks/use_apm_params'; -import { useDynamicDataViewFetcher } from '../../../hooks/use_dynamic_data_view'; +import { useApmDataView } from '../../../hooks/use_apm_data_view'; import { fromQuery, toQuery } from '../links/url_helpers'; import { getBoolFilter } from './get_bool_filter'; // @ts-expect-error @@ -71,8 +71,7 @@ export function KueryBar(props: { }; const example = examples[processorEvent || 'defaults']; - - const { dataView } = useDynamicDataViewFetcher(); + const { dataView } = useApmDataView(); const placeholder = props.placeholder ?? @@ -106,7 +105,7 @@ export function KueryBar(props: { const suggestions = ( (await unifiedSearch.autocomplete.getQuerySuggestions({ language: 'kuery', - indexPatterns: [dataView as DataView], + indexPatterns: [dataView], boolFilter: props.boolFilter ?? getBoolFilter({ diff --git a/x-pack/plugins/apm/public/components/shared/search_bar.test.tsx b/x-pack/plugins/apm/public/components/shared/search_bar.test.tsx index d6fc9eb0eecb5..33a3646bf7529 100644 --- a/x-pack/plugins/apm/public/components/shared/search_bar.test.tsx +++ b/x-pack/plugins/apm/public/components/shared/search_bar.test.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import { getByTestId, fireEvent, getByText } from '@testing-library/react'; +import { getByTestId, fireEvent, getByText, act } from '@testing-library/react'; import { createMemoryHistory, MemoryHistory } from 'history'; import React from 'react'; import { Router } from 'react-router-dom'; @@ -37,6 +37,7 @@ function setup({ const KibanaReactContext = createKibanaReactContext({ usageCollection: { reportUiCounter: () => {} }, + dataViews: { get: async () => {} }, } as Partial); // mock transaction types @@ -91,7 +92,7 @@ describe('when transactionType is selected and multiple transaction types are gi expect(dropdown).toHaveValue('secondType'); }); - it('should update the URL when a transaction type is selected', () => { + it('should update the URL when a transaction type is selected', async () => { const { container } = setup({ history, serviceTransactionTypes: ['firstType', 'secondType'], @@ -112,7 +113,9 @@ describe('when transactionType is selected and multiple transaction types are gi expect(getByText(dropdown, 'secondType')).toBeInTheDocument(); // change dropdown value - fireEvent.change(dropdown, { target: { value: 'firstType' } }); + await act(async () => { + fireEvent.change(dropdown, { target: { value: 'firstType' } }); + }); // assert that value was changed expect(dropdown).toHaveValue('firstType'); diff --git a/x-pack/plugins/apm/public/context/apm_plugin/mock_apm_plugin_context.tsx b/x-pack/plugins/apm/public/context/apm_plugin/mock_apm_plugin_context.tsx index 6b0d75fbe4178..e9f7bda8de236 100644 --- a/x-pack/plugins/apm/public/context/apm_plugin/mock_apm_plugin_context.tsx +++ b/x-pack/plugins/apm/public/context/apm_plugin/mock_apm_plugin_context.tsx @@ -28,6 +28,7 @@ const mockCore = merge({}, coreStart, { capabilities: { apm: {}, ml: {}, + savedObjectsManagement: { edit: true }, }, }, uiSettings: { diff --git a/x-pack/plugins/apm/public/hooks/use_apm_data_view.ts b/x-pack/plugins/apm/public/hooks/use_apm_data_view.ts new file mode 100644 index 0000000000000..9d4ef214ff5ef --- /dev/null +++ b/x-pack/plugins/apm/public/hooks/use_apm_data_view.ts @@ -0,0 +1,66 @@ +/* + * 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 { DataView } from '@kbn/data-views-plugin/common'; +import { useKibana } from '@kbn/kibana-react-plugin/public'; +import { SavedObjectNotFound } from '@kbn/kibana-utils-plugin/common'; +import { useEffect, useState } from 'react'; +import { APM_STATIC_DATA_VIEW_ID } from '../../common/data_view_constants'; +import { useApmPluginContext } from '../context/apm_plugin/use_apm_plugin_context'; +import { ApmPluginStartDeps } from '../plugin'; +import { callApmApi } from '../services/rest/create_call_apm_api'; + +async function createStaticApmDataView() { + const res = await callApmApi('POST /internal/apm/data_view/static', { + signal: null, + }); + return res.dataView; +} + +async function getApmDataViewTitle() { + const res = await callApmApi('GET /internal/apm/data_view/title', { + signal: null, + }); + return res.apmDataViewTitle; +} + +export function useApmDataView() { + const { services } = useKibana(); + const { core } = useApmPluginContext(); + const [dataView, setDataView] = useState(); + + const canCreateDataView = + core.application.capabilities.savedObjectsManagement.edit; + + useEffect(() => { + async function fetchDataView() { + try { + // load static data view + return await services.dataViews.get(APM_STATIC_DATA_VIEW_ID); + } catch (e) { + // re-throw if an unhandled error occurred + const notFound = e instanceof SavedObjectNotFound; + if (!notFound) { + throw e; + } + + // create static data view if user has permissions + if (canCreateDataView) { + return createStaticApmDataView(); + } else { + // or create dynamic data view if user does not have permissions to create a static + const title = await getApmDataViewTitle(); + return services.dataViews.create({ title }); + } + } + } + + fetchDataView().then((dv) => setDataView(dv)); + }, [canCreateDataView, services.dataViews]); + + return { dataView }; +} diff --git a/x-pack/plugins/apm/public/hooks/use_dynamic_data_view.ts b/x-pack/plugins/apm/public/hooks/use_dynamic_data_view.ts deleted file mode 100644 index 04d289d9e49a2..0000000000000 --- a/x-pack/plugins/apm/public/hooks/use_dynamic_data_view.ts +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { useFetcher } from './use_fetcher'; - -export function useDynamicDataViewFetcher() { - const { data, status } = useFetcher((callApmApi) => { - return callApmApi('GET /internal/apm/data_view/dynamic', { - isCachable: true, - }); - }, []); - - return { - dataView: data?.dynamicDataView, - status, - }; -} diff --git a/x-pack/plugins/apm/public/hooks/use_static_data_view.ts b/x-pack/plugins/apm/public/hooks/use_static_data_view.ts deleted file mode 100644 index 4281f7cac83c8..0000000000000 --- a/x-pack/plugins/apm/public/hooks/use_static_data_view.ts +++ /dev/null @@ -1,16 +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 useAsync from 'react-use/lib/useAsync'; -import { useApmPluginContext } from '../context/apm_plugin/use_apm_plugin_context'; -import { APM_STATIC_DATA_VIEW_ID } from '../../common/data_view_constants'; - -export function useStaticDataView() { - const { dataViews } = useApmPluginContext(); - - return useAsync(() => dataViews.get(APM_STATIC_DATA_VIEW_ID)); -} diff --git a/x-pack/plugins/apm/public/plugin.ts b/x-pack/plugins/apm/public/plugin.ts index 69e35f1146536..abeff2b867ca6 100644 --- a/x-pack/plugins/apm/public/plugin.ts +++ b/x-pack/plugins/apm/public/plugin.ts @@ -123,6 +123,13 @@ const dependenciesTitle = i18n.translate( } ); +const apmSettingsTitle = i18n.translate( + 'xpack.apm.navigation.apmSettingsTitle', + { + defaultMessage: 'Settings', + } +); + export class ApmPlugin implements Plugin { constructor( private readonly initializerContext: PluginInitializerContext @@ -303,6 +310,7 @@ export class ApmPlugin implements Plugin { title: dependenciesTitle, path: '/dependencies/inventory', }, + { id: 'settings', title: apmSettingsTitle, path: '/settings' }, ], async mount(appMountParameters: AppMountParameters) { diff --git a/x-pack/plugins/apm/public/utils/test_helpers.tsx b/x-pack/plugins/apm/public/utils/test_helpers.tsx index d365cfc26d658..ea8219ed55248 100644 --- a/x-pack/plugins/apm/public/utils/test_helpers.tsx +++ b/x-pack/plugins/apm/public/utils/test_helpers.tsx @@ -174,7 +174,6 @@ export async function inspectSearchParams( }, } ) as APMConfig, - uiFilters: {}, indices: { sourcemap: 'myIndex', error: 'myIndex', 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 index 818f999754610..db4825680eae0 100644 --- a/x-pack/plugins/apm/server/lib/helpers/setup_request.test.ts +++ b/x-pack/plugins/apm/server/lib/helpers/setup_request.test.ts @@ -25,12 +25,6 @@ jest.mock('../../routes/settings/apm_indices/get_apm_indices', () => ({ } as Awaited>), })); -jest.mock('../../routes/data_view/get_dynamic_data_view', () => ({ - getDynamicDataView: async () => { - return; - }, -})); - function getMockResources() { const esClientMock = elasticsearchServiceMock.createScopedClusterClient(); // @ts-expect-error incomplete definition diff --git a/x-pack/plugins/apm/server/lib/helpers/setup_request.ts b/x-pack/plugins/apm/server/lib/helpers/setup_request.ts index 2701d754350f5..9d6a716c8b3ed 100644 --- a/x-pack/plugins/apm/server/lib/helpers/setup_request.ts +++ b/x-pack/plugins/apm/server/lib/helpers/setup_request.ts @@ -51,7 +51,9 @@ export async function setupRequest({ config, }), withApmSpan('get_ui_settings', () => - coreContext.uiSettings.client.get(UI_SETTINGS.SEARCH_INCLUDE_FROZEN) + coreContext.uiSettings.client.get( + UI_SETTINGS.SEARCH_INCLUDE_FROZEN + ) ), ]); 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 d42a5a7eb3a9b..c7e22eba054b9 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 @@ -8,18 +8,16 @@ 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 { InternalSavedObjectsClient } from '../../lib/helpers/get_internal_saved_objects_client'; import { APMConfig } from '../..'; +import { DataViewsService } from '@kbn/data-views-plugin/common'; -function getMockSavedObjectsClient(existingDataViewTitle: string) { +function getMockedDataViewService(existingDataViewTitle: string) { return { get: jest.fn(() => ({ - attributes: { - title: existingDataViewTitle, - }, + title: existingDataViewTitle, })), - create: jest.fn(), - } as unknown as InternalSavedObjectsClient; + createAndSave: jest.fn(), + } as unknown as DataViewsService; } const setup = { @@ -33,14 +31,13 @@ const setup = { describe('createStaticDataView', () => { it(`should not create data view if 'xpack.apm.autocreateApmIndexPattern=false'`, async () => { - const savedObjectsClient = getMockSavedObjectsClient('apm-*'); + const dataViewService = getMockedDataViewService('apm-*'); await createStaticDataView({ setup, config: { autoCreateApmDataView: false } as APMConfig, - savedObjectsClient, - spaceId: 'default', + dataViewService, }); - expect(savedObjectsClient.create).not.toHaveBeenCalled(); + expect(dataViewService.createAndSave).not.toHaveBeenCalled(); }); it(`should not create data view if no APM data is found`, async () => { @@ -49,15 +46,14 @@ describe('createStaticDataView', () => { .spyOn(HistoricalAgentData, 'hasHistoricalAgentData') .mockResolvedValue(false); - const savedObjectsClient = getMockSavedObjectsClient('apm-*'); + const dataViewService = getMockedDataViewService('apm-*'); await createStaticDataView({ setup, config: { autoCreateApmDataView: true } as APMConfig, - savedObjectsClient, - spaceId: 'default', + dataViewService, }); - expect(savedObjectsClient.create).not.toHaveBeenCalled(); + expect(dataViewService.createAndSave).not.toHaveBeenCalled(); }); it(`should create data view`, async () => { @@ -66,16 +62,15 @@ describe('createStaticDataView', () => { .spyOn(HistoricalAgentData, 'hasHistoricalAgentData') .mockResolvedValue(true); - const savedObjectsClient = getMockSavedObjectsClient('apm-*'); + const dataViewService = getMockedDataViewService('apm-*'); await createStaticDataView({ setup, config: { autoCreateApmDataView: true } as APMConfig, - savedObjectsClient, - spaceId: 'default', + dataViewService, }); - expect(savedObjectsClient.create).toHaveBeenCalled(); + expect(dataViewService.createAndSave).toHaveBeenCalled(); }); it(`should overwrite the data view if the new data view title does not match the old data view title`, async () => { @@ -84,25 +79,24 @@ describe('createStaticDataView', () => { .spyOn(HistoricalAgentData, 'hasHistoricalAgentData') .mockResolvedValue(true); - const savedObjectsClient = getMockSavedObjectsClient('apm-*'); + const dataViewService = getMockedDataViewService('apm-*'); const expectedDataViewTitle = 'apm-*-transaction-*,apm-*-span-*,apm-*-error-*,apm-*-metrics-*'; await createStaticDataView({ setup, config: { autoCreateApmDataView: true } as APMConfig, - savedObjectsClient, - spaceId: 'default', + dataViewService, }); - expect(savedObjectsClient.get).toHaveBeenCalled(); - expect(savedObjectsClient.create).toHaveBeenCalled(); + expect(dataViewService.get).toHaveBeenCalled(); + expect(dataViewService.createAndSave).toHaveBeenCalled(); // @ts-ignore - expect(savedObjectsClient.create.mock.calls[0][1].title).toBe( + expect(dataViewService.createAndSave.mock.calls[0][0].title).toBe( expectedDataViewTitle ); // @ts-ignore - expect(savedObjectsClient.create.mock.calls[0][2].overwrite).toBe(true); + expect(dataViewService.createAndSave.mock.calls[0][1]).toBe(true); }); it(`should not overwrite an data view if the new data view title matches the old data view title`, async () => { @@ -111,20 +105,17 @@ describe('createStaticDataView', () => { .spyOn(HistoricalAgentData, 'hasHistoricalAgentData') .mockResolvedValue(true); - const savedObjectsClient = getMockSavedObjectsClient( + const dataViewService = getMockedDataViewService( 'apm-*-transaction-*,apm-*-span-*,apm-*-error-*,apm-*-metrics-*' ); await createStaticDataView({ setup, config: { autoCreateApmDataView: true } as APMConfig, - savedObjectsClient, - spaceId: 'default', + dataViewService, }); - expect(savedObjectsClient.get).toHaveBeenCalled(); - expect(savedObjectsClient.create).toHaveBeenCalled(); - // @ts-ignore - expect(savedObjectsClient.create.mock.calls[0][2].overwrite).toBe(false); + expect(dataViewService.get).toHaveBeenCalled(); + expect(dataViewService.createAndSave).not.toHaveBeenCalled(); }); }); 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 4a0878a5dc135..6142791b45cc9 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 @@ -6,95 +6,109 @@ */ import { SavedObjectsErrorHelpers } from '@kbn/core/server'; +import { DataView, DataViewsService } from '@kbn/data-views-plugin/common'; +import { + TRACE_ID, + TRANSACTION_ID, +} from '../../../common/elasticsearch_fieldnames'; import { APM_STATIC_DATA_VIEW_ID } from '../../../common/data_view_constants'; import { hasHistoricalAgentData } from '../historical_data/has_historical_agent_data'; -import { Setup } from '../../lib/helpers/setup_request'; -import { APMRouteHandlerResources } from '../typings'; -import { InternalSavedObjectsClient } from '../../lib/helpers/get_internal_saved_objects_client'; import { withApmSpan } from '../../utils/with_apm_span'; import { getApmDataViewTitle } from './get_apm_data_view_title'; -import { getApmDataViewAttributes } from './get_apm_data_view_attributes'; - -interface ApmDataViewAttributes { - title: string; -} +import { Setup } from '../../lib/helpers/setup_request'; +import { APMConfig } from '../..'; export async function createStaticDataView({ - setup, + dataViewService, config, - savedObjectsClient, - spaceId, + setup, }: { + dataViewService: DataViewsService; + config: APMConfig; setup: Setup; - config: APMRouteHandlerResources['config']; - savedObjectsClient: InternalSavedObjectsClient; - spaceId?: string; -}): Promise { +}): Promise { return withApmSpan('create_static_data_view', async () => { // don't auto-create APM data view if it's been disabled via the config if (!config.autoCreateApmDataView) { - return false; + return; } // Discover and other apps will throw errors if an data view exists without having matching indices. // The following ensures the data view is only created if APM data is found const hasData = await hasHistoricalAgentData(setup); if (!hasData) { - return false; + return; } const apmDataViewTitle = getApmDataViewTitle(setup.indices); - const forceOverwrite = await getForceOverwrite({ + const shouldCreateOrUpdate = await getShouldCreateOrUpdate({ apmDataViewTitle, - savedObjectsClient, + dataViewService, }); + if (!shouldCreateOrUpdate) { + return; + } + try { - await withApmSpan('create_index_pattern_saved_object', () => - savedObjectsClient.create( - 'index-pattern', - getApmDataViewAttributes(apmDataViewTitle), + return await withApmSpan('create_data_view', async () => { + const dataView = await dataViewService.createAndSave( { + allowNoIndex: true, id: APM_STATIC_DATA_VIEW_ID, - overwrite: forceOverwrite, - namespace: spaceId, - } - ) - ); + name: 'APM', + title: apmDataViewTitle, + timeFieldName: '@timestamp', - return true; + // link to APM from Discover + fieldFormats: { + [TRACE_ID]: { + id: 'url', + params: { + urlTemplate: 'apm/link-to/trace/{{value}}', + labelTemplate: '{{value}}', + }, + }, + [TRANSACTION_ID]: { + id: 'url', + params: { + urlTemplate: 'apm/link-to/transaction/{{value}}', + labelTemplate: '{{value}}', + }, + }, + }, + }, + true + ); + + return dataView; + }); } catch (e) { // if the data view (saved object) already exists a conflict error (code: 409) will be thrown // that error should be silenced if (SavedObjectsErrorHelpers.isConflictError(e)) { - return false; + return; } throw e; } }); } -// force an overwrite of the data view if the data view has been changed -async function getForceOverwrite({ - savedObjectsClient, +// only create data view if it doesn't exist or was changed +async function getShouldCreateOrUpdate({ + dataViewService, apmDataViewTitle, }: { - savedObjectsClient: InternalSavedObjectsClient; + dataViewService: DataViewsService; apmDataViewTitle: string; }) { try { - const existingDataView = - await savedObjectsClient.get( - 'index-pattern', - APM_STATIC_DATA_VIEW_ID - ); - - // if the existing data view does not matches the new one, force an update - return existingDataView.attributes.title !== apmDataViewTitle; + const existingDataView = await dataViewService.get(APM_STATIC_DATA_VIEW_ID); + return existingDataView.title !== apmDataViewTitle; } catch (e) { // ignore exception if the data view (saved object) is not found if (SavedObjectsErrorHelpers.isNotFoundError(e)) { - return false; + return true; } throw e; diff --git a/x-pack/plugins/apm/server/routes/data_view/get_apm_data_view_attributes.ts b/x-pack/plugins/apm/server/routes/data_view/get_apm_data_view_attributes.ts deleted file mode 100644 index b7b7b5333fc8e..0000000000000 --- a/x-pack/plugins/apm/server/routes/data_view/get_apm_data_view_attributes.ts +++ /dev/null @@ -1,41 +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 { - TRACE_ID, - TRANSACTION_ID, -} from '../../../common/elasticsearch_fieldnames'; - -export function getApmDataViewAttributes(title: string) { - return { - // required fields (even if empty) - title, - fieldAttrs: '{}', - fields: '[]', - runtimeFieldMap: '{}', - timeFieldName: '@timestamp', - typeMeta: '{}', - - // link to APM from Discover - fieldFormatMap: JSON.stringify({ - [TRACE_ID]: { - id: 'url', - params: { - urlTemplate: 'apm/link-to/trace/{{value}}', - labelTemplate: '{{value}}', - }, - }, - [TRANSACTION_ID]: { - id: 'url', - params: { - urlTemplate: 'apm/link-to/transaction/{{value}}', - labelTemplate: '{{value}}', - }, - }, - }), - }; -} diff --git a/x-pack/plugins/apm/server/routes/data_view/get_dynamic_data_view.ts b/x-pack/plugins/apm/server/routes/data_view/get_dynamic_data_view.ts deleted file mode 100644 index 8d2c61cce4d81..0000000000000 --- a/x-pack/plugins/apm/server/routes/data_view/get_dynamic_data_view.ts +++ /dev/null @@ -1,66 +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 { IndexPatternsFetcher, FieldDescriptor } from '@kbn/data-plugin/server'; -import { APMRouteHandlerResources } from '../typings'; -import { withApmSpan } from '../../utils/with_apm_span'; -import { getApmIndices } from '../settings/apm_indices/get_apm_indices'; -import { getApmDataViewTitle } from './get_apm_data_view_title'; - -export interface DataViewTitleAndFields { - title: string; - timeFieldName: string; - fields: FieldDescriptor[]; -} - -export const getDynamicDataView = ({ - config, - context, - logger, -}: Pick) => { - return withApmSpan('get_dynamic_data_view', async () => { - const coreContext = await context.core; - const apmIndicies = await getApmIndices({ - savedObjectsClient: coreContext.savedObjects.client, - config, - }); - const dataViewTitle = getApmDataViewTitle(apmIndicies); - - const DataViewsFetcher = new IndexPatternsFetcher( - coreContext.elasticsearch.client.asCurrentUser - ); - - // Since `getDynamicDataView` is called in setup_request (and thus by every endpoint) - // and since `getFieldsForWildcard` will throw if the specified indices don't exist, - // we have to catch errors here to avoid all endpoints returning 500 for users without APM data - // (would be a bad first time experience) - try { - const fields = await DataViewsFetcher.getFieldsForWildcard({ - pattern: dataViewTitle, - }); - - const dataView: DataViewTitleAndFields = { - fields, - timeFieldName: '@timestamp', - title: dataViewTitle, - }; - - return dataView; - } catch (e) { - const notExists = e.output?.statusCode === 404; - if (notExists) { - logger.error( - `Could not get dynamic data view because indices "${dataViewTitle}" don't exist` - ); - return; - } - - // re-throw - throw e; - } - }); -}; 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 4b2a3dbb7252d..a8c660c293d4c 100644 --- a/x-pack/plugins/apm/server/routes/data_view/route.ts +++ b/x-pack/plugins/apm/server/routes/data_view/route.ts @@ -5,69 +5,59 @@ * 2.0. */ -import { ISavedObjectsRepository } from '@kbn/core/server'; +import { DataView } from '@kbn/data-views-plugin/common'; import { createStaticDataView } from './create_static_data_view'; import { setupRequest } from '../../lib/helpers/setup_request'; -import { getDynamicDataView } from './get_dynamic_data_view'; 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'; const staticDataViewRoute = createApmServerRoute({ endpoint: 'POST /internal/apm/data_view/static', options: { tags: ['access:apm'] }, - handler: async (resources): Promise<{ created: boolean }> => { - const { + handler: async (resources): Promise<{ dataView: DataView | undefined }> => { + const setup = await setupRequest(resources); + const { context, plugins, request, config } = resources; + + const coreContext = await context.core; + const dataViewStart = await plugins.dataViews.start(); + const dataViewService = await dataViewStart.dataViewsServiceFactory( + coreContext.savedObjects.client, + coreContext.elasticsearch.client.asCurrentUser, request, - core, - plugins: { spaces }, - config, - } = resources; - - const setupPromise = setupRequest(resources); - const clientPromise = core - .start() - .then( - (coreStart): ISavedObjectsRepository => - coreStart.savedObjects.createInternalRepository() - ); - - const setup = await setupPromise; - const savedObjectsClient = await clientPromise; - - const spaceId = spaces?.setup.spacesService.getSpaceId(request); + true + ); - const didCreateDataView = await createStaticDataView({ - setup, + const dataView = await createStaticDataView({ + dataViewService, config, - savedObjectsClient, - spaceId, + setup, }); - return { created: didCreateDataView }; + return { dataView }; }, }); -const dynamicDataViewRoute = createApmServerRoute({ - endpoint: 'GET /internal/apm/data_view/dynamic', +const dataViewTitleRoute = createApmServerRoute({ + endpoint: 'GET /internal/apm/data_view/title', options: { tags: ['access:apm'] }, handler: async ({ context, config, logger, - }): Promise<{ - dynamicDataView: - | import('./get_dynamic_data_view').DataViewTitleAndFields - | undefined; - }> => { - const dynamicDataView = await getDynamicDataView({ - context, + }): Promise<{ apmDataViewTitle: string }> => { + const coreContext = await context.core; + const apmIndicies = await getApmIndices({ + savedObjectsClient: coreContext.savedObjects.client, config, - logger, }); - return { dynamicDataView }; + const apmDataViewTitle = getApmDataViewTitle(apmIndicies); + + return { apmDataViewTitle }; }, }); export const dataViewRouteRepository = { ...staticDataViewRoute, - ...dynamicDataViewRoute, + ...dataViewTitleRoute, }; 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 41d4c60fd72b4..2df04fcdb0548 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 @@ -35,7 +35,6 @@ function getMockSetup(esResponse: any) { get: () => 'myIndex', } ) as APMConfig, - uiFilters: {}, indices: mockIndices, }; } diff --git a/x-pack/plugins/apm/server/routes/typings.ts b/x-pack/plugins/apm/server/routes/typings.ts index 9764b427ee7d7..2e246f753d75b 100644 --- a/x-pack/plugins/apm/server/routes/typings.ts +++ b/x-pack/plugins/apm/server/routes/typings.ts @@ -22,7 +22,6 @@ import { APMPluginSetupDependencies, APMPluginStartDependencies, } from '../types'; -import { UxUIFilters } from '../../common/ux_ui_filter'; export type ApmPluginRequestHandlerContext = CustomRequestHandlerContext<{ licensing: LicensingApiRequestHandlerContext; @@ -56,7 +55,6 @@ export interface APMRouteHandlerResources { _inspect: boolean; start?: number; end?: number; - uiFilters?: UxUIFilters; }; }; config: APMConfig; diff --git a/x-pack/plugins/apm/server/tutorial/index.ts b/x-pack/plugins/apm/server/tutorial/index.ts index e211e708c8ab3..24d1c1d048a25 100644 --- a/x-pack/plugins/apm/server/tutorial/index.ts +++ b/x-pack/plugins/apm/server/tutorial/index.ts @@ -13,9 +13,6 @@ import { } from '@kbn/home-plugin/server'; import { CloudSetup } from '@kbn/cloud-plugin/server'; import { APMConfig } from '..'; -import { APM_STATIC_DATA_VIEW_ID } from '../../common/data_view_constants'; -import { getApmDataViewAttributes } from '../routes/data_view/get_apm_data_view_attributes'; -import { getApmDataViewTitle } from '../routes/data_view/get_apm_data_view_title'; import { ApmIndicesConfig } from '../routes/settings/apm_indices/get_apm_indices'; import { createElasticCloudInstructions } from './envs/elastic_cloud'; import { onPremInstructions } from './envs/on_prem'; @@ -39,15 +36,6 @@ export const tutorialProvider = isFleetPluginEnabled: boolean; }) => () => { - const dataViewTitle = getApmDataViewTitle(apmIndices); - const savedObjects = [ - { - id: APM_STATIC_DATA_VIEW_ID, - attributes: getApmDataViewAttributes(dataViewTitle), - type: 'index-pattern', - }, - ]; - const artifacts: ArtifactsSchema = { dashboards: [ { @@ -109,13 +97,5 @@ It allows you to monitor the performance of thousands of applications in real ti cloudSetup: cloud, }), previewImagePath: '/plugins/apm/assets/apm.png', - savedObjects, - savedObjectsInstallMsg: i18n.translate( - 'xpack.apm.tutorial.specProvider.savedObjectsInstallMsg', - { - defaultMessage: - 'An APM data view is required for some features in the APM UI.', - } - ), } as TutorialSchema; }; diff --git a/x-pack/plugins/apm/server/types.ts b/x-pack/plugins/apm/server/types.ts index 73258ef2008fa..6353e0070160c 100644 --- a/x-pack/plugins/apm/server/types.ts +++ b/x-pack/plugins/apm/server/types.ts @@ -50,6 +50,8 @@ import { FleetStartContract as FleetPluginStart, } from '@kbn/fleet-plugin/server'; import { InfraPluginStart, InfraPluginSetup } from '@kbn/infra-plugin/server'; +import { DataViewsServerPluginStart } from '@kbn/data-views-plugin/server'; + import { APMConfig } from '.'; import { ApmIndicesConfig } from './routes/settings/apm_indices/get_apm_indices'; import { APMEventClient } from './lib/helpers/create_es_client/create_apm_event_client'; @@ -73,6 +75,7 @@ export interface APMPluginSetupDependencies { observability: ObservabilityPluginSetup; ruleRegistry: RuleRegistryPluginSetupContract; infra: InfraPluginSetup; + dataViews: {}; // optional dependencies actions?: ActionsPlugin['setup']; @@ -95,6 +98,7 @@ export interface APMPluginStartDependencies { observability: undefined; ruleRegistry: RuleRegistryPluginStartContract; infra: InfraPluginStart; + dataViews: DataViewsServerPluginStart; // optional dependencies actions?: ActionsPlugin['start']; diff --git a/x-pack/plugins/apm/server/utils/test_helpers.tsx b/x-pack/plugins/apm/server/utils/test_helpers.tsx index e16c20b566def..244675fb7f843 100644 --- a/x-pack/plugins/apm/server/utils/test_helpers.tsx +++ b/x-pack/plugins/apm/server/utils/test_helpers.tsx @@ -11,13 +11,11 @@ import { } from '@kbn/core/types/elasticsearch'; import { APMConfig } from '..'; import { ApmIndicesConfig } from '../routes/settings/apm_indices/get_apm_indices'; -import { UxUIFilters } from '../../common/ux_ui_filter'; interface Options { mockResponse?: ( request: ESSearchRequest ) => ESSearchResponse; - uiFilters?: Record; config?: Partial; } @@ -25,7 +23,6 @@ interface MockSetup { apmEventClient: any; internalClient: any; config: APMConfig; - uiFilters: UxUIFilters; indices: ApmIndicesConfig; } @@ -89,7 +86,6 @@ export async function inspectSearchParams( }, } ) as APMConfig, - uiFilters: options?.uiFilters ?? {}, indices: { ...mockApmIndices, apmAgentConfigurationIndex: 'myIndex', diff --git a/x-pack/plugins/canvas/public/application.tsx b/x-pack/plugins/canvas/public/application.tsx index 938a7c75c0aef..cc365451b46f0 100644 --- a/x-pack/plugins/canvas/public/application.tsx +++ b/x-pack/plugins/canvas/public/application.tsx @@ -36,7 +36,6 @@ import { services, LegacyServicesProvider, CanvasPluginServices, - pluginServices as canvasServices, } from './services'; import { initFunctions } from './functions'; // @ts-expect-error untyped local @@ -154,11 +153,7 @@ export const initializeCanvas = async ( ReactDOM.render( - + , domNode diff --git a/x-pack/plugins/canvas/public/components/function_reference_generator/function_examples.ts b/x-pack/plugins/canvas/public/components/function_reference_generator/function_examples.ts deleted file mode 100644 index c25e163a0c210..0000000000000 --- a/x-pack/plugins/canvas/public/components/function_reference_generator/function_examples.ts +++ /dev/null @@ -1,473 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -export interface FunctionExample { - syntax: string; - usage: { - expression: string; - help?: string; - }; -} - -interface FunctionExampleDict { - [key: string]: FunctionExample; -} - -export const getFunctionExamples = (): FunctionExampleDict => ({ - all: { - syntax: `all {neq "foo"} {neq "bar"} {neq "fizz"} -all condition={gt 10} condition={lt 20}`, - usage: { - expression: `kibana -| selectFilter -| demodata -| math "mean(percent_uptime)" -| formatnumber "0.0%" -| metric "Average uptime" - metricFont={ - font size=48 family="'Open Sans', Helvetica, Arial, sans-serif" - color={ - if {all {gte 0} {lt 0.8}} then="red" else="green" - } - align="center" lHeight=48 - } -| render`, - help: 'This sets the color of the metric text to `"red"` if the context passed into `metric` is greater than or equal to 0 and less than 0.8. Otherwise, the color is set to `"green"`.', - }, - }, - alterColumn: { - syntax: `alterColumn "cost" type="string" -alterColumn column="@timestamp" name="foo"`, - usage: { - expression: `kibana -| selectFilter -| demodata -| alterColumn "time" name="time_in_ms" type="number" -| table -| render`, - help: 'This renames the `time` column to `time_in_ms` and converts the type of the column’s values from `date` to `number`.', - }, - }, - any: { - syntax: `any {eq "foo"} {eq "bar"} {eq "fizz"} -any condition={lte 10} condition={gt 30}`, - usage: { - expression: `kibana -| selectFilter -| demodata -| filterrows { - getCell "project" | any {eq "elasticsearch"} {eq "kibana"} {eq "x-pack"} - } -| pointseries color="project" size="max(price)" -| pie -| render`, - help: 'This filters out any rows that don’t contain `"elasticsearch"`, `"kibana"` or `"x-pack"` in the `project` field.', - }, - }, - as: { - syntax: `as -as "foo" -as name="bar"`, - usage: { - expression: `kibana -| selectFilter -| demodata -| ply by="project" fn={math "count(username)" | as "num_users"} fn={math "mean(price)" | as "price"} -| pointseries x="project" y="num_users" size="price" color="project" -| plot -| render`, - help: `\`as\` casts any primitive value (\`string\`, \`number\`, \`date\`, \`null\`) into a \`datatable\` with a single row and a single column with the given name (or defaults to \`"value"\` if no name is provided). This is useful when piping a primitive value into a function that only takes \`datatable\` as an input. - -In the example, \`ply\` expects each \`fn\` subexpression to return a \`datatable\` in order to merge the results of each \`fn\` back into a \`datatable\`, but using a \`math\` aggregation in the subexpressions returns a single \`math\` value, which is then cast into a \`datatable\` using \`as\`.`, - }, - }, - asset: { - syntax: `asset "asset-52f14f2b-fee6-4072-92e8-cd2642665d02" -asset id="asset-498f7429-4d56-42a2-a7e4-8bf08d98d114"`, - usage: { - expression: `image dataurl={asset "asset-c661a7cc-11be-45a1-a401-d7592ea7917a"} mode="contain" -| render`, - help: 'The image asset stored with the ID `"asset-c661a7cc-11be-45a1-a401-d7592ea7917a"` is passed into the `dataurl` argument of the `image` function to display the stored asset.', - }, - }, - axisConfig: { - syntax: `axisConfig show=false -axisConfig position="right" min=0 max=10 tickSize=1`, - usage: { - expression: `kibana -| selectFilter -| demodata -| pointseries x="size(cost)" y="project" color="project" -| plot defaultStyle={seriesStyle bars=0.75 horizontalBars=true} - legend=false - xaxis={axisConfig position="top" min=0 max=400 tickSize=100} - yaxis={axisConfig position="right"} -| render`, - help: 'This sets the `x-axis` to display on the top of the chart and sets the range of values to `0-400` with ticks displayed at `100` intervals. The `y-axis` is configured to display on the `right`.', - }, - }, - case: { - syntax: `case 0 then="red" -case when=5 then="yellow" -case if={lte 50} then="green"`, - usage: { - expression: `math "random()" -| progress shape="gauge" label={formatnumber "0%"} - font={ - font size=24 family="'Open Sans', Helvetica, Arial, sans-serif" align="center" - color={ - switch {case if={lte 0.5} then="green"} - {case if={all {gt 0.5} {lte 0.75}} then="orange"} - default="red" - } - } - valueColor={ - switch {case if={lte 0.5} then="green"} - {case if={all {gt 0.5} {lte 0.75}} then="orange"} - default="red" - } -| render`, - help: 'This sets the color of the progress indicator and the color of the label to `"green"` if the value is less than or equal to `0.5`, `"orange"` if the value is greater than `0.5` and less than or equal to `0.75`, and `"red"` if `none` of the case conditions are met.', - }, - }, - clog: { - syntax: `clog`, - usage: { - expression: `kibana -| demodata -| clog -| filterrows fn={getCell "age" | gt 70} -| clog -| pointseries x="time" y="mean(price)" -| plot defaultStyle={seriesStyle lines=1 fill=1} -| render`, - help: 'This prints the `datatable` objects in the browser console before and after the `filterrows` function.', - }, - }, - columns: { - syntax: `columns include="@timestamp, projects, cost" -columns exclude="username, country, age"`, - usage: { - expression: `kibana -| selectFilter -| demodata -| columns include="price, cost, state, project" -| table -| render`, - help: 'This only keeps the `price`, `cost`, `state`, and `project` columns from the `demodata` data source and removes all other columns.', - }, - }, - compare: { - syntax: `compare "neq" to="elasticsearch" -compare op="lte" to=100`, - usage: { - expression: `kibana -| selectFilter -| demodata -| mapColumn project - fn={getCell project | - switch - {case if={compare eq to=kibana} then=kibana} - {case if={compare eq to=elasticsearch} then=elasticsearch} - default="other" - } -| pointseries size="size(cost)" color="project" -| pie -| render`, - help: 'This maps all `project` values that aren’t `"kibana"` and `"elasticsearch"` to `"other"`. Alternatively, you can use the individual comparator functions instead of compare.', - }, - }, - containerStyle: { - syntax: `containerStyle backgroundColor="red"’ -containerStyle borderRadius="50px" -containerStyle border="1px solid black" -containerStyle padding="5px" -containerStyle opacity="0.5" -containerStyle overflow="hidden" -containerStyle backgroundImage={asset id=asset-f40d2292-cf9e-4f2c-8c6f-a504a25e949c} - backgroundRepeat="no-repeat" - backgroundSize="cover"`, - usage: { - expression: `shape "star" fill="#E61D35" maintainAspect=true -| render containerStyle={ - containerStyle backgroundColor="#F8D546" - borderRadius="200px" - border="4px solid #05509F" - padding="0px" - opacity="0.9" - overflow="hidden" - }`, - }, - }, - context: { - syntax: `context`, - usage: { - expression: `date -| formatdate "LLLL" -| markdown "Last updated: " {context} -| render`, - help: 'Using the `context` function allows us to pass the output, or _context_, of the previous function as a value to an argument in the next function. Here we get the formatted date string from the previous function and pass it as `content` for the markdown element.', - }, - }, - createTable: { - syntax: `createTable id="a" id="b" -createTable id="a" name="A" id="b" name="B" rowCount=5`, - usage: { - expression: `var_set -name="logs" value={essql "select count(*) as a from kibana_sample_data_logs"} -name="commerce" value={essql "select count(*) as b from kibana_sample_data_ecommerce"} -| createTable ids="totalA" ids="totalB" -| staticColumn name="totalA" value={var "logs" | getCell "a"} -| alterColumn column="totalA" type="number" -| staticColumn name="totalB" value={var "commerce" | getCell "b"} -| alterColumn column="totalB" type="number" -| mathColumn id="percent" name="percent" expression="totalA / totalB" -| render`, - help: 'This creates a table based on the results of two `essql` queries, joined into one table.', - }, - }, - csv: { - syntax: `csv "fruit, stock - kiwi, 10 - Banana, 5"`, - usage: { - expression: `csv "fruit,stock - kiwi,10 - banana,5" -| pointseries color=fruit size=stock -| pie -| render`, - help: 'This creates a `datatable` with `fruit` and `stock` columns with two rows. This is useful for quickly mocking data.', - }, - }, - date: { - syntax: `date -date value=1558735195 -date "2019-05-24T21:59:55+0000" -date "01/31/2019" format="MM/DD/YYYY"`, - usage: { - expression: `date -| formatdate "LLL" -| markdown {context} - font={font family="Arial, sans-serif" size=30 align="left" - color="#000000" - weight="normal" - underline=false - italic=false} -| render`, - help: 'Using `date` without passing any arguments will return the current date and time.', - }, - }, - demodata: { - syntax: `demodata -demodata "ci" -demodata type="shirts"`, - usage: { - expression: `kibana -| selectFilter -| demodata -| table -| render`, - help: '`demodata` is a mock data set that you can use to start playing around in Canvas.', - }, - }, - dropdownControl: { - syntax: `dropdownControl valueColumn=project filterColumn=project -dropdownControl valueColumn=agent filterColumn=agent.keyword filterGroup=group1`, - usage: { - expression: `demodata -| dropdownControl valueColumn=project filterColumn=project -| render`, - help: 'This creates a dropdown filter element. It requires a data source and uses the unique values from the given `valueColumn` (i.e. `project`) and applies the filter to the `project` column. Note: `filterColumn` should point to a keyword type field for Elasticsearch data sources.', - }, - }, - eq: { - syntax: `eq true -eq null -eq 10 -eq "foo"`, - usage: { - expression: `kibana -| selectFilter -| demodata -| mapColumn project - fn={getCell project | - switch - {case if={eq kibana} then=kibana} - {case if={eq elasticsearch} then=elasticsearch} - default="other" - } -| pointseries size="size(cost)" color="project" -| pie -| render`, - help: 'This changes all values in the project column that don’t equal `"kibana"` or `"elasticsearch"` to `"other"`.', - }, - }, - escount: { - syntax: `escount index="logstash-*" -escount "currency:\"EUR\"" index="kibana_sample_data_ecommerce" -escount query="response:404" index="kibana_sample_data_logs"`, - usage: { - expression: `kibana -| selectFilter -| escount "Cancelled:true" index="kibana_sample_data_flights" -| math "value" -| progress shape="semicircle" - label={formatnumber 0,0} - font={font size=24 family="'Open Sans', Helvetica, Arial, sans-serif" color="#000000" align=center} - max={filters | escount index="kibana_sample_data_flights"} -| render`, - help: 'The first `escount` expression retrieves the number of flights that were cancelled. The second `escount` expression retrieves the total number of flights.', - }, - }, - esdocs: { - syntax: `esdocs index="logstash-*" -esdocs "currency:\"EUR\"" index="kibana_sample_data_ecommerce" -esdocs query="response:404" index="kibana_sample_data_logs" -esdocs index="kibana_sample_data_flights" count=100 -esdocs index="kibana_sample_data_flights" sort="AvgTicketPrice, asc"`, - usage: { - expression: `kibana -| selectFilter -| esdocs index="kibana_sample_data_ecommerce" - fields="customer_gender, taxful_total_price, order_date" - sort="order_date, asc" - count=10000 -| mapColumn "order_date" - fn={getCell "order_date" | date {context} | rounddate "YYYY-MM-DD"} -| alterColumn "order_date" type="date" -| pointseries x="order_date" y="sum(taxful_total_price)" color="customer_gender" -| plot defaultStyle={seriesStyle lines=3} - palette={palette "#7ECAE3" "#003A4D" gradient=true} -| render`, - help: 'This retrieves the first 10000 documents data from the `kibana_sample_data_ecommerce` index sorted by `order_date` in ascending order, and only requests the `customer_gender`, `taxful_total_price`, and `order_date` fields.', - }, - }, - essql: { - syntax: `essql query="SELECT * FROM \"logstash*\"" -essql "SELECT * FROM \"apm*\"" count=10000`, - usage: { - expression: `kibana -| selectFilter -| essql query="SELECT Carrier, FlightDelayMin, AvgTicketPrice FROM \"kibana_sample_data_flights\"" -| table -| render`, - help: 'This retrieves the `Carrier`, `FlightDelayMin`, and `AvgTicketPrice` fields from the "kibana_sample_data_flights" index.', - }, - }, - exactly: { - syntax: `exactly "state" value="running" -exactly "age" value=50 filterGroup="group2" -exactly column="project" value="beats"`, - usage: { - expression: `kibana -| selectFilter -| exactly column=project value=elasticsearch -| demodata -| pointseries x=project y="mean(age)" -| plot defaultStyle={seriesStyle bars=1} -| render`, - help: 'The `exactly` filter here is added to existing filters retrieved by the `filters` function and further filters down the data to only have `"elasticsearch"` data. The `exactly` filter only applies to this one specific element and will not affect other elements in the workpad.', - }, - }, - filterrows: { - syntax: `filterrows {getCell "project" | eq "kibana"} -filterrows fn={getCell "age" | gt 50}`, - usage: { - expression: `kibana -| selectFilter -| demodata -| filterrows {getCell "country" | any {eq "IN"} {eq "US"} {eq "CN"}} -| mapColumn "@timestamp" - fn={getCell "@timestamp" | rounddate "YYYY-MM"} -| alterColumn "@timestamp" type="date" -| pointseries x="@timestamp" y="mean(cost)" color="country" -| plot defaultStyle={seriesStyle points="2" lines="1"} - palette={palette "#01A4A4" "#CC6666" "#D0D102" "#616161" "#00A1CB" "#32742C" "#F18D05" "#113F8C" "#61AE24" "#D70060" gradient=false} -| render`, - help: 'This uses `filterrows` to only keep data from India (`IN`), the United States (`US`), and China (`CN`).', - }, - }, - filters: { - syntax: `filters -filters group="timefilter1" -filters group="timefilter2" group="dropdownfilter1" ungrouped=true`, - usage: { - expression: `filters group=group2 ungrouped=true -| demodata -| pointseries x="project" y="size(cost)" color="project" -| plot defaultStyle={seriesStyle bars=0.75} legend=false - font={ - font size=14 - family="'Open Sans', Helvetica, Arial, sans-serif" - align="left" - color="#FFFFFF" - weight="lighter" - underline=true - italic=true - } -| render`, - help: '`filters` sets the existing filters as context and accepts a `group` parameter to opt into specific filter groups. Setting `ungrouped` to `true` opts out of using global filters.', - }, - }, - font: { - syntax: `font size=12 -font family=Arial -font align=middle -font color=pink -font weight=lighter -font underline=true -font italic=false -font lHeight=32`, - usage: { - expression: `kibana -| selectFilter -| demodata -| pointseries x="project" y="size(cost)" color="project" -| plot defaultStyle={seriesStyle bars=0.75} legend=false - font={ - font size=14 - family="'Open Sans', Helvetica, Arial, sans-serif" - align="left" - color="#FFFFFF" - weight="lighter" - underline=true - italic=true - } -| render`, - }, - }, - formatdate: { - syntax: `formatdate format="YYYY-MM-DD" -formatdate "MM/DD/YYYY"`, - usage: { - expression: `kibana -| selectFilter -| demodata -| mapColumn "time" fn={getCell time | formatdate "MMM 'YY"} -| pointseries x="time" y="sum(price)" color="state" -| plot defaultStyle={seriesStyle points=5} -| render`, - help: 'This transforms the dates in the `time` field into strings that look like `"Jan ‘19"`, `"Feb ‘19"`, etc. using a MomentJS format.', - }, - }, - formatnumber: { - syntax: `formatnumber format="$0,0.00" -formatnumber "0.0a"`, - usage: { - expression: `kibana -| selectFilter -| demodata -| math "mean(percent_uptime)" -| progress shape="gauge" - label={formatnumber "0%"} - font={font size=24 family="'Open Sans', Helvetica, Arial, sans-serif" color="#000000" align="center"} -| render`, - help: 'The `formatnumber` subexpression receives the same `context` as the `progress` function, which is the output of the `math` function. It formats the value into a percentage.', - }, - }, -}); diff --git a/x-pack/plugins/canvas/public/components/function_reference_generator/function_reference_generator.tsx b/x-pack/plugins/canvas/public/components/function_reference_generator/function_reference_generator.tsx deleted file mode 100644 index 4b54956bcbec1..0000000000000 --- a/x-pack/plugins/canvas/public/components/function_reference_generator/function_reference_generator.tsx +++ /dev/null @@ -1,38 +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 React, { FC } from 'react'; -import { ExpressionFunction } from '@kbn/expressions-plugin'; -import { EuiButtonEmpty } from '@elastic/eui'; -import copy from 'copy-to-clipboard'; -import { CanvasPluginServices } from '../../services'; - -import { generateFunctionReference } from './generate_function_reference'; - -interface Props { - functionRegistry: Record; - notifyService: CanvasPluginServices['notify']; -} - -export const FunctionReferenceGenerator: FC = ({ functionRegistry, notifyService }) => { - const functionDefinitions = Object.values(functionRegistry); - - const copyDocs = () => { - const functionRefs = generateFunctionReference(functionDefinitions); - copy(functionRefs); - notifyService.success( - `Please paste updated docs into '/kibana/docs/canvas/canvas-function-reference.asciidoc' and commit your changes.`, - { title: 'Copied function docs to clipboard' } - ); - }; - - return ( - - Generate function reference - - ); -}; diff --git a/x-pack/plugins/canvas/public/components/function_reference_generator/generate_function_reference.ts b/x-pack/plugins/canvas/public/components/function_reference_generator/generate_function_reference.ts deleted file mode 100644 index 7c1f11db071b4..0000000000000 --- a/x-pack/plugins/canvas/public/components/function_reference_generator/generate_function_reference.ts +++ /dev/null @@ -1,281 +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. - */ - -// @ts-expect-error untyped lib -import pluralize from 'pluralize'; -import { ExpressionFunction, ExpressionFunctionParameter } from '@kbn/expressions-plugin'; -import { isValidDataUrl } from '@kbn/presentation-util-plugin/public'; -import { functions as browserFunctions } from '../../../canvas_plugin_src/functions/browser'; -import { functions as serverFunctions } from '../../../canvas_plugin_src/functions/server'; -import { DATATABLE_COLUMN_TYPES } from '../../../common/lib'; -import { getFunctionExamples, FunctionExample } from './function_examples'; - -const ALPHABET = 'abcdefghijklmnopqrstuvwxyz'.split(''); -const REQUIRED_ARG_ANNOTATION = '***'; -const MULTI_ARG_ANNOTATION = '†'; -const UNNAMED_ARG = '_Unnamed_'; -const ANY_TYPE = '`any`'; - -const examplesDict = getFunctionExamples(); - -const fnList = [ - ...browserFunctions.map((fn) => fn().name), - ...serverFunctions.map((fn) => fn().name), - 'asset', - 'clog', - 'createTable', - 'embeddable', - 'filters', - 'font', - 'image', - 'kibana', - 'mapColumn', - 'math', - 'mathColumn', - 'metric', - 'palette', - 'pie', - 'plot', - 'progress', - 'removeFilter', - 'repeatImage', - 'revealImage', - 'selectFilter', - 'shape', - 'timelion', - 'to', - 'uiSetting', - 'var', - 'var_set', - - // ignore unsupported embeddables functions for now -].filter((fn) => !['savedSearch'].includes(fn)); - -interface FunctionDictionary { - [key: string]: ExpressionFunction[]; -} - -const wrapInBackTicks = (str: string) => `\`${str}\``; -const wrapInDoubleQuotes = (str: string) => (str.includes('"') ? str : `"${str}"`); -const stringSorter = (a: string, b: string) => { - if (a < b) { - return -1; - } - if (a > b) { - return 1; - } - return 0; -}; - -// Converts reference to another function in a function's help text into an Asciidoc link -const addFunctionLinks = (help: string, options?: { ignoreList?: string[] }) => { - const { ignoreList = [] } = options || {}; - fnList.forEach((name: string) => { - const nameWithBackTicks = wrapInBackTicks(name); - - // ignore functions with the same name as data types, i.e. string, date - if ( - !ignoreList.includes(name) && - !DATATABLE_COLUMN_TYPES.includes(name) && - help.includes(nameWithBackTicks) - ) { - help = help.replace(nameWithBackTicks, `<<${name}_fn>>`); - } - }); - - return help; -}; - -export const generateFunctionReference = (functionDefinitions: ExpressionFunction[]) => { - const functionDefs = functionDefinitions.filter((fn: ExpressionFunction) => - fnList.includes(fn.name) - ); - const functionDictionary: FunctionDictionary = {}; - functionDefs.forEach((fn: ExpressionFunction) => { - const firstLetter = fn.name[0]; - - if (!functionDictionary[firstLetter]) { - functionDictionary[firstLetter] = []; - } - - functionDictionary[firstLetter].push(fn); - }); - return `[role="xpack"] -[[canvas-function-reference]] -== Canvas function reference - -Behind the scenes, Canvas is driven by a powerful expression language, -with dozens of functions and other capabilities, including table transforms, -type casting, and sub-expressions. - -The Canvas expression language also supports <>, which -perform complex math calculations. - -A ${REQUIRED_ARG_ANNOTATION} denotes a required argument. - -A ${MULTI_ARG_ANNOTATION} denotes an argument can be passed multiple times. - -${createAlphabetLinks(functionDictionary)} - -${createFunctionDocs(functionDictionary)}`; -}; - -const createAlphabetLinks = (functionDictionary: FunctionDictionary) => { - return ALPHABET.map((letter: string) => - functionDictionary[letter] ? `<<${letter}_fns>>` : letter.toUpperCase() - ).join(' | '); -}; - -const createFunctionDocs = (functionDictionary: FunctionDictionary) => { - return Object.keys(functionDictionary) - .sort() - .map( - (letter: string) => `[float] -[[${letter}_fns]] -== ${letter.toUpperCase()} - -${functionDictionary[letter] - .sort((a, b) => stringSorter(a.name, b.name)) - .map(getDocBlock) - .join('\n')}` - ) - .join(''); -}; - -const getDocBlock = (fn: ExpressionFunction) => { - const header = `[float] -[[${fn.name}_fn]] -=== \`${fn.name}\``; - - const input = fn.inputTypes; - const output = fn.type; - const args = fn.args; - const examples = examplesDict[fn.name]; - const help = addFunctionLinks(fn.help); - - const argBlock = - !args || Object.keys(args).length === 0 - ? '' - : `\n[cols="3*^<"] -|=== -|Argument |Type |Description - -${getArgsTable(args)} -|===\n`; - - const examplesBlock = !examples ? `` : `${getExamplesBlock(examples)}`; - - return `${header}\n -${help} -${examplesBlock} -*Accepts:* ${input ? input.map(wrapInBackTicks).join(', ') : ANY_TYPE}\n${argBlock} -*Returns:* ${output ? wrapInBackTicks(output) : 'Depends on your input and arguments'}\n\n`; -}; - -const getArgsTable = (args: { [key: string]: ExpressionFunctionParameter }) => { - if (!args || Object.keys(args).length === 0) { - return 'None'; - } - - const argNames = Object.keys(args); - - return argNames - .sort((a: string, b: string) => { - const argA = args[a]; - const argB = args[b]; - - // sorts unnamed arg to the front - if (a === '_' || (argA.aliases && argA.aliases.includes('_'))) { - return -1; - } - if (b === '_' || (argB.aliases && argB.aliases.includes('_'))) { - return 1; - } - return stringSorter(a, b); - }) - .map((argName: string) => { - const arg = args[argName]; - const types = arg.types; - const aliases = arg.aliases ? [...arg.aliases] : []; - let defaultValue = arg.default; - const requiredAnnotation = arg.required === true ? ` ${REQUIRED_ARG_ANNOTATION}` : ''; - const multiAnnotation = arg.multi === true ? ` ${MULTI_ARG_ANNOTATION}` : ''; - - if (typeof defaultValue === 'string') { - defaultValue = defaultValue.replace('{', '${').replace(/[\r\n/]+/g, ''); - if (types && types.includes('string')) { - defaultValue = wrapInDoubleQuotes(defaultValue); - } - } - - let displayName = ''; - - if (argName === '_') { - displayName = UNNAMED_ARG; - } else if (aliases && aliases.includes('_')) { - displayName = UNNAMED_ARG; - aliases[aliases.indexOf('_')] = argName; - } else { - displayName = wrapInBackTicks(argName); - } - - const aliasList = - aliases && aliases.length - ? `\n\n${pluralize('Alias', aliases.length)}: ${aliases - .sort() - .map(wrapInBackTicks) - .join(', ')}` - : ''; - - let defaultBlock = ''; - - if (isValidDataUrl(arg.default)) { - defaultBlock = getDataUrlExampleBlock(displayName, arg.default); - } else { - defaultBlock = - typeof defaultValue !== 'undefined' ? `\n\nDefault: \`${defaultValue}\`` : ''; - } - - return `|${displayName}${requiredAnnotation}${multiAnnotation}${aliasList} -|${types && types.length ? types.map(wrapInBackTicks).join(', ') : ANY_TYPE} -|${arg.help ? addFunctionLinks(arg.help, { ignoreList: argNames }) : ''}${defaultBlock}`; - }) - .join('\n\n'); -}; - -const getDataUrlExampleBlock = ( - argName: string, - value: string -) => `\n\nExample value for the ${argName} argument, formatted as a \`base64\` data URL: -[source, url] ------------- -${value} -------------`; - -const getExamplesBlock = (examples: FunctionExample) => { - const { syntax, usage } = examples; - const { expression, help } = usage || {}; - const syntaxBlock = syntax - ? `\n*Expression syntax* -[source,js] ----- -${syntax} -----\n` - : ''; - - const codeBlock = expression - ? `\n*Code example* -[source,text] ----- -${expression} -----\n` - : ''; - - const codeHelp = help ? `${help}\n` : ''; - - return `${syntaxBlock}${codeBlock}${codeHelp}`; -}; diff --git a/x-pack/plugins/canvas/public/components/function_reference_generator/index.ts b/x-pack/plugins/canvas/public/components/function_reference_generator/index.ts deleted file mode 100644 index 212d8f567461d..0000000000000 --- a/x-pack/plugins/canvas/public/components/function_reference_generator/index.ts +++ /dev/null @@ -1,8 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -export { FunctionReferenceGenerator } from './function_reference_generator'; diff --git a/x-pack/plugins/canvas/public/components/help_menu/help_menu.component.tsx b/x-pack/plugins/canvas/public/components/help_menu/help_menu.component.tsx index 020c2ff9d1279..96f63da6f4f7c 100644 --- a/x-pack/plugins/canvas/public/components/help_menu/help_menu.component.tsx +++ b/x-pack/plugins/canvas/public/components/help_menu/help_menu.component.tsx @@ -5,22 +5,10 @@ * 2.0. */ -import React, { FC, lazy, Suspense, useCallback } from 'react'; -import { EuiButtonEmpty, EuiSpacer } from '@elastic/eui'; +import React, { FC, useCallback } from 'react'; +import { EuiButtonEmpty } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { ChromeHelpMenuActions } from '@kbn/core/public'; -import { ExpressionFunction } from '@kbn/expressions-plugin'; -import { CanvasPluginServices } from '../../services'; - -let FunctionReferenceGenerator: null | React.LazyExoticComponent = null; - -if (process.env.NODE_ENV === 'development') { - FunctionReferenceGenerator = lazy(() => - import('../function_reference_generator').then((module) => ({ - default: module.FunctionReferenceGenerator, - })) - ); -} const strings = { getKeyboardShortcutsLinkLabel: () => @@ -30,18 +18,11 @@ const strings = { }; interface Props { - functionRegistry: Record; - notifyService: CanvasPluginServices['notify']; showKeyboardShortcutsDocFlyout: () => void; hideHelpMenu: ChromeHelpMenuActions['hideHelpMenu']; } -export const HelpMenu: FC = ({ - functionRegistry, - notifyService, - hideHelpMenu, - showKeyboardShortcutsDocFlyout, -}) => { +export const HelpMenu: FC = ({ hideHelpMenu, showKeyboardShortcutsDocFlyout }) => { const onKeyboardShortcutButtonClick = useCallback(() => { hideHelpMenu(); showKeyboardShortcutsDocFlyout(); @@ -57,16 +38,6 @@ export const HelpMenu: FC = ({ > {strings.getKeyboardShortcutsLinkLabel()} - - {FunctionReferenceGenerator ? ( - - - - - ) : null} ); }; diff --git a/x-pack/plugins/canvas/public/components/help_menu/help_menu.tsx b/x-pack/plugins/canvas/public/components/help_menu/help_menu.tsx index 7fb6824c0d573..5d3f9b28658cb 100644 --- a/x-pack/plugins/canvas/public/components/help_menu/help_menu.tsx +++ b/x-pack/plugins/canvas/public/components/help_menu/help_menu.tsx @@ -6,16 +6,12 @@ */ import React, { FC, useCallback } from 'react'; -import { ExpressionFunction } from '@kbn/expressions-plugin'; import { ChromeHelpMenuActions } from '@kbn/core/public'; import { useDispatch } from 'react-redux'; import { HelpMenu as Component } from './help_menu.component'; -import { CanvasPluginServices } from '../../services'; import { setKeyboardShortcutsDocVisibility } from '../../state/actions/flyouts'; interface Props { - functionRegistry: Record; - notifyService: CanvasPluginServices['notify']; hideHelpMenu: ChromeHelpMenuActions['hideHelpMenu']; } diff --git a/x-pack/plugins/cloud_security_posture/public/common/navigation/types.ts b/x-pack/plugins/cloud_security_posture/public/common/navigation/types.ts index 92e1c5579057c..4b6b0804a7b6f 100644 --- a/x-pack/plugins/cloud_security_posture/public/common/navigation/types.ts +++ b/x-pack/plugins/cloud_security_posture/public/common/navigation/types.ts @@ -26,3 +26,8 @@ export type CloudSecurityPosturePageId = | 'cloud_security_posture-findings' | 'cloud_security_posture-benchmarks' | 'cloud_security_posture-rules'; + +export interface BreadcrumbEntry { + readonly name: string; + readonly path: string; +} diff --git a/x-pack/plugins/cloud_security_posture/public/common/navigation/use_csp_breadcrumbs.ts b/x-pack/plugins/cloud_security_posture/public/common/navigation/use_csp_breadcrumbs.ts index e3a9ac8c0c06e..d9b540e755bfa 100644 --- a/x-pack/plugins/cloud_security_posture/public/common/navigation/use_csp_breadcrumbs.ts +++ b/x-pack/plugins/cloud_security_posture/public/common/navigation/use_csp_breadcrumbs.ts @@ -4,21 +4,17 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ - +import type { MouseEvent } from 'react'; import type { ChromeBreadcrumb, CoreStart } from '@kbn/core/public'; import { useEffect } from 'react'; import { useKibana } from '@kbn/kibana-react-plugin/public'; -import { type RouteProps, useRouteMatch, useHistory } from 'react-router-dom'; +import { type RouteProps, useRouteMatch } from 'react-router-dom'; import type { EuiBreadcrumb } from '@elastic/eui'; import { string } from 'io-ts'; -import { i18n } from '@kbn/i18n'; -import { CLOUD_SECURITY_POSTURE_BASE_PATH } from '../..'; -import type { CspNavigationItem } from './types'; +import useObservable from 'react-use/lib/useObservable'; +import type { BreadcrumbEntry } from './types'; -const getClickableBreadcrumb = ( - routeMatch: RouteProps['path'], - breadcrumbPath: CspNavigationItem['path'] -) => { +const getClickableBreadcrumb = (routeMatch: RouteProps['path'], breadcrumbPath: string) => { const hasParams = breadcrumbPath.includes(':'); if (hasParams) return; @@ -27,15 +23,20 @@ const getClickableBreadcrumb = ( } }; -export const useCspBreadcrumbs = (breadcrumbs: CspNavigationItem[]) => { +export const useCspBreadcrumbs = (breadcrumbs: BreadcrumbEntry[]) => { const { services: { chrome: { setBreadcrumbs, docTitle }, - application: { getUrlForApp }, + application: { currentAppId$, applications$, navigateToApp }, }, } = useKibana(); + const match = useRouteMatch(); - const history = useHistory(); + + const appId = useObservable(currentAppId$); + const applications = useObservable(applications$); + const application = appId ? applications?.get(appId) : undefined; + const appTitle = application?.title; useEffect(() => { const additionalBreadCrumbs: ChromeBreadcrumb[] = breadcrumbs.map((breadcrumb) => { @@ -43,31 +44,32 @@ export const useCspBreadcrumbs = (breadcrumbs: CspNavigationItem[]) => { return { text: breadcrumb.name, - ...(clickableLink && { - onClick: (e) => { - e.preventDefault(); - history.push(clickableLink); - }, - }), + ...(clickableLink && + appId && { + onClick: (e) => { + e.preventDefault(); + void navigateToApp(appId, { path: clickableLink }); + }, + }), }; }); const nextBreadcrumbs = [ { - text: i18n.translate('xpack.csp.navigation.cloudPostureBreadcrumbLabel', { - defaultMessage: 'Cloud Posture', + text: appTitle, + ...(appId && { + onClick: (e: MouseEvent) => { + e.preventDefault(); + void navigateToApp(appId); + }, }), - onClick: (e: React.MouseEvent) => { - e.preventDefault(); - history.push(CLOUD_SECURITY_POSTURE_BASE_PATH); - }, }, ...additionalBreadCrumbs, ]; setBreadcrumbs(nextBreadcrumbs); docTitle.change(getTextBreadcrumbs(nextBreadcrumbs)); - }, [match.path, getUrlForApp, setBreadcrumbs, breadcrumbs, history, docTitle]); + }, [match.path, setBreadcrumbs, breadcrumbs, docTitle, appTitle, appId, navigateToApp]); }; const getTextBreadcrumbs = (breadcrumbs: EuiBreadcrumb[]) => diff --git a/x-pack/plugins/cloud_security_posture/public/pages/findings/findings.tsx b/x-pack/plugins/cloud_security_posture/public/pages/findings/findings.tsx index 36d0918c52d5e..12af30a11708a 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/findings/findings.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/findings/findings.tsx @@ -7,6 +7,7 @@ import React from 'react'; import type { UseQueryResult } from 'react-query'; import { Redirect, Switch, Route, useLocation } from 'react-router-dom'; +import { useCspBreadcrumbs } from '../../common/navigation/use_csp_breadcrumbs'; import { CloudPosturePage } from '../../components/cloud_posture_page'; import { useFindingsEsPit } from './es_pit/use_findings_es_pit'; import { FindingsEsPitContext } from './es_pit/findings_es_pit_context'; @@ -68,8 +69,14 @@ export const FindingsNoPageTemplate = () => { ); }; -export const Findings = () => ( - - - -); +const FINDINGS_BREADCRUMBS = [cloudPosturePages.findings]; + +export const Findings = () => { + useCspBreadcrumbs(FINDINGS_BREADCRUMBS); + + return ( + + + + ); +}; diff --git a/x-pack/plugins/cloud_security_posture/public/pages/findings/latest_findings/latest_findings_container.tsx b/x-pack/plugins/cloud_security_posture/public/pages/findings/latest_findings/latest_findings_container.tsx index 54d9e35e1dd30..c41b6835fb4ff 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/findings/latest_findings/latest_findings_container.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/findings/latest_findings/latest_findings_container.tsx @@ -26,8 +26,6 @@ import { } from '../utils'; import { PageWrapper, PageTitle, PageTitleText } from '../layout/findings_layout'; import { FindingsGroupBySelector } from '../layout/findings_group_by_selector'; -import { useCspBreadcrumbs } from '../../../common/navigation/use_csp_breadcrumbs'; -import { findingsNavigation } from '../../../common/navigation/constants'; import { useUrlQuery } from '../../../common/hooks/use_url_query'; import { ErrorCallout } from '../layout/error_callout'; @@ -43,8 +41,6 @@ export const getDefaultQuery = ({ }); export const LatestFindingsContainer = ({ dataView }: FindingsBaseProps) => { - useCspBreadcrumbs([findingsNavigation.findings_default]); - const getPersistedDefaultQuery = usePersistedQuery(getDefaultQuery); const { urlQuery, setUrlQuery } = useUrlQuery(getPersistedDefaultQuery); diff --git a/x-pack/plugins/cloud_security_posture/public/pages/findings/latest_findings_by_resource/findings_by_resource_container.tsx b/x-pack/plugins/cloud_security_posture/public/pages/findings/latest_findings_by_resource/findings_by_resource_container.tsx index adebb18e69901..e55af94202e3c 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/findings/latest_findings_by_resource/findings_by_resource_container.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/findings/latest_findings_by_resource/findings_by_resource_container.tsx @@ -26,7 +26,6 @@ import { import { PageTitle, PageTitleText, PageWrapper } from '../layout/findings_layout'; import { FindingsGroupBySelector } from '../layout/findings_group_by_selector'; import { findingsNavigation } from '../../../common/navigation/constants'; -import { useCspBreadcrumbs } from '../../../common/navigation/use_csp_breadcrumbs'; import { ResourceFindings } from './resource_findings/resource_findings_container'; import { ErrorCallout } from '../layout/error_callout'; import { FindingsDistributionBar } from '../layout/findings_distribution_bar'; @@ -57,8 +56,6 @@ export const FindingsByResourceContainer = ({ dataView }: FindingsBaseProps) => ); const LatestFindingsByResource = ({ dataView }: FindingsBaseProps) => { - useCspBreadcrumbs([findingsNavigation.findings_by_resource]); - const getPersistedDefaultQuery = usePersistedQuery(getDefaultQuery); const { urlQuery, setUrlQuery } = useUrlQuery(getPersistedDefaultQuery); diff --git a/x-pack/plugins/cloud_security_posture/public/pages/findings/latest_findings_by_resource/resource_findings/resource_findings_container.tsx b/x-pack/plugins/cloud_security_posture/public/pages/findings/latest_findings_by_resource/resource_findings/resource_findings_container.tsx index cd37e6d189f0e..1302dfafe6603 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/findings/latest_findings_by_resource/resource_findings/resource_findings_container.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/findings/latest_findings_by_resource/resource_findings/resource_findings_container.tsx @@ -13,7 +13,6 @@ import { generatePath } from 'react-router-dom'; import { i18n } from '@kbn/i18n'; import * as TEST_SUBJECTS from '../../test_subjects'; import { PageWrapper, PageTitle, PageTitleText } from '../../layout/findings_layout'; -import { useCspBreadcrumbs } from '../../../../common/navigation/use_csp_breadcrumbs'; import { findingsNavigation } from '../../../../common/navigation/constants'; import { ResourceFindingsQuery, useResourceFindings } from './use_resource_findings'; import { useUrlQuery } from '../../../../common/hooks/use_url_query'; @@ -54,7 +53,6 @@ const BackToResourcesButton = () => ( ); export const ResourceFindings = ({ dataView }: FindingsBaseProps) => { - useCspBreadcrumbs([findingsNavigation.findings_default]); const { euiTheme } = useEuiTheme(); const params = useParams<{ resourceId: string }>(); diff --git a/x-pack/plugins/cloud_security_posture/public/pages/rules/index.tsx b/x-pack/plugins/cloud_security_posture/public/pages/rules/index.tsx index 5acd1c5b8b2e1..20016bc79bf78 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/rules/index.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/rules/index.tsx @@ -5,31 +5,56 @@ * 2.0. */ -import React, { useMemo } from 'react'; +import React, { useContext, useMemo } from 'react'; import { generatePath, Link, type RouteComponentProps } from 'react-router-dom'; import { EuiTextColor, EuiButtonEmpty, EuiFlexGroup, EuiPageHeader, EuiSpacer } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; import { pagePathGetters } from '@kbn/fleet-plugin/public'; +import type { BreadcrumbEntry } from '../../common/navigation/types'; import { RulesContainer, type PageUrlParams } from './rules_container'; import { cloudPosturePages } from '../../common/navigation/constants'; import { useCspBreadcrumbs } from '../../common/navigation/use_csp_breadcrumbs'; -import type { CspPageNavigationItem } from '../../common/navigation/types'; import { useCspIntegrationInfo } from './use_csp_integration'; import { CspPageTemplate } from '../../components/csp_page_template'; import { useKibana } from '../../common/hooks/use_kibana'; import { CloudPosturePage } from '../../components/cloud_posture_page'; +import { SecuritySolutionContext } from '../../application/security_solution_context'; -const getRulesBreadcrumbs = (name?: string): CspPageNavigationItem[] => - [cloudPosturePages.benchmarks, { ...cloudPosturePages.rules, name }].filter( - (breadcrumb): breadcrumb is CspPageNavigationItem => !!breadcrumb.name - ); +const getRulesBreadcrumbs = ( + name?: string, + manageBreadcrumb?: BreadcrumbEntry +): BreadcrumbEntry[] => { + const breadCrumbs: BreadcrumbEntry[] = []; + if (manageBreadcrumb) { + breadCrumbs.push(manageBreadcrumb); + } + + breadCrumbs.push(cloudPosturePages.benchmarks); + + if (name) { + breadCrumbs.push({ ...cloudPosturePages.rules, name }); + } else { + breadCrumbs.push(cloudPosturePages.rules); + } + + return breadCrumbs; +}; export const RulesNoPageTemplate = ({ match: { params } }: RouteComponentProps) => { const { http } = useKibana().services; const integrationInfo = useCspIntegrationInfo(params); + const securitySolutionContext = useContext(SecuritySolutionContext); const [packageInfo, agentInfo] = integrationInfo.data || []; + const breadcrumbs = useMemo( + () => + getRulesBreadcrumbs(packageInfo?.name, securitySolutionContext?.getManageBreadcrumbEntry()), + [packageInfo?.name, securitySolutionContext] + ); + + useCspBreadcrumbs(breadcrumbs); + return ( ) => { - const { params } = props.match; - const integrationInfo = useCspIntegrationInfo(params); - - const [packageInfo] = integrationInfo.data || []; - - const breadcrumbs = useMemo( - // TODO: make benchmark breadcrumb navigable - () => getRulesBreadcrumbs(packageInfo?.name), - [packageInfo?.name] - ); - - useCspBreadcrumbs(breadcrumbs); - return ( diff --git a/x-pack/plugins/cloud_security_posture/public/types.ts b/x-pack/plugins/cloud_security_posture/public/types.ts index 5e491a5ac3b66..889642d39dc52 100755 --- a/x-pack/plugins/cloud_security_posture/public/types.ts +++ b/x-pack/plugins/cloud_security_posture/public/types.ts @@ -10,7 +10,7 @@ import type { UnifiedSearchPublicPluginStart } from '@kbn/unified-search-plugin/ import type { DataPublicPluginSetup, DataPublicPluginStart } from '@kbn/data-plugin/public'; import type { ChartsPluginStart } from '@kbn/charts-plugin/public'; import type { DiscoverStart } from '@kbn/discover-plugin/public'; -import type { CloudSecurityPosturePageId } from './common/navigation/types'; +import type { BreadcrumbEntry, CloudSecurityPosturePageId } from './common/navigation/types'; /** * The cloud security posture's public plugin setup interface. @@ -52,4 +52,6 @@ export interface CspSecuritySolutionContext { getFiltersGlobalComponent: () => ComponentType<{ children: ReactNode }>; /** Gets the `SpyRoute` component for navigation highlighting and breadcrumbs. */ getSpyRouteComponent: () => ComponentType<{ pageName?: CloudSecurityPosturePageId }>; + /** Gets the `Manage` breadcrumb entry. */ + getManageBreadcrumbEntry: () => BreadcrumbEntry; } diff --git a/x-pack/plugins/data_visualizer/common/types/field_stats.ts b/x-pack/plugins/data_visualizer/common/types/field_stats.ts index 4f0fb1b81d8f9..5aef2b442c1cb 100644 --- a/x-pack/plugins/data_visualizer/common/types/field_stats.ts +++ b/x-pack/plugins/data_visualizer/common/types/field_stats.ts @@ -95,6 +95,9 @@ export interface DocumentCountStats { timeRangeEarliest?: number; timeRangeLatest?: number; totalCount: number; + probability?: number | null; + took?: number; + randomlySampled?: boolean; } export interface FieldExamples { diff --git a/x-pack/plugins/data_visualizer/public/application/common/components/document_count_content/document_count_chart/document_count_chart.tsx b/x-pack/plugins/data_visualizer/public/application/common/components/document_count_content/document_count_chart/document_count_chart.tsx index 2ef8759441fc1..9b802fa768bff 100644 --- a/x-pack/plugins/data_visualizer/public/application/common/components/document_count_content/document_count_chart/document_count_chart.tsx +++ b/x-pack/plugins/data_visualizer/public/application/common/components/document_count_content/document_count_chart/document_count_chart.tsx @@ -22,6 +22,7 @@ import { import moment from 'moment'; import { IUiSettingsClient } from '@kbn/core/public'; import { MULTILAYER_TIME_AXIS_STYLE } from '@kbn/charts-plugin/common'; +import { EuiLoadingSpinner, EuiFlexItem } from '@elastic/eui'; import { useDataVisualizerKibana } from '../../../../kibana_context'; export interface DocumentCountChartPoint { @@ -35,6 +36,7 @@ interface Props { timeRangeEarliest: number; timeRangeLatest: number; interval?: number; + loading: boolean; } const SPEC_ID = 'document_count'; @@ -49,12 +51,21 @@ function getTimezone(uiSettings: IUiSettingsClient) { } } +export function LoadingSpinner() { + return ( + + + + ); +} + export const DocumentCountChart: FC = ({ width, chartPoints, timeRangeEarliest, timeRangeLatest, interval, + loading, }) => { const { services: { data, uiSettings, fieldFormats, charts }, @@ -126,40 +137,46 @@ export const DocumentCountChart: FC = ({ const timeZone = getTimezone(uiSettings); return ( -
- - - xAxisFormatter.convert(value)} - timeAxisLayerCount={useLegacyTimeAxis ? 0 : 2} - style={useLegacyTimeAxis ? {} : MULTILAYER_TIME_AXIS_STYLE} - /> - - - +
+ {loading ? ( + + ) : ( + + + xAxisFormatter.convert(value)} + timeAxisLayerCount={useLegacyTimeAxis ? 0 : 2} + style={useLegacyTimeAxis ? {} : MULTILAYER_TIME_AXIS_STYLE} + /> + + + + )}
); }; diff --git a/x-pack/plugins/data_visualizer/public/application/common/components/document_count_content/document_count_content.tsx b/x-pack/plugins/data_visualizer/public/application/common/components/document_count_content/document_count_content.tsx index 66829ad47ae21..911eb851924e3 100644 --- a/x-pack/plugins/data_visualizer/public/application/common/components/document_count_content/document_count_content.tsx +++ b/x-pack/plugins/data_visualizer/public/application/common/components/document_count_content/document_count_content.tsx @@ -5,17 +5,93 @@ * 2.0. */ -import React, { FC } from 'react'; -import { DocumentCountChart, DocumentCountChartPoint } from './document_count_chart'; +import React, { FC, useCallback, useMemo, useState } from 'react'; +import { + EuiFlexGroup, + EuiFlexItem, + EuiPopover, + EuiToolTip, + EuiButtonIcon, + EuiPanel, + EuiSpacer, + EuiCallOut, + EuiRange, + EuiSelect, + EuiFormRow, +} from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; +import { sortedIndex } from 'lodash'; +import { FormattedMessage } from '@kbn/i18n-react'; +import { isDefined } from '../../util/is_defined'; +import type { DocumentCountChartPoint } from './document_count_chart'; +import { + RANDOM_SAMPLER_STEP, + RANDOM_SAMPLER_PROBABILITIES, + RandomSamplerOption, + RANDOM_SAMPLER_SELECT_OPTIONS, + RANDOM_SAMPLER_OPTION, +} from '../../../index_data_visualizer/constants/random_sampler'; import { TotalCountHeader } from './total_count_header'; -import { DocumentCountStats } from '../../../../../common/types/field_stats'; +import type { DocumentCountStats } from '../../../../../common/types/field_stats'; +import { DocumentCountChart } from './document_count_chart'; export interface Props { documentCountStats?: DocumentCountStats; totalCount: number; + samplingProbability?: number | null; + setSamplingProbability?: (value: number) => void; + randomSamplerPreference?: RandomSamplerOption; + setRandomSamplerPreference: (value: RandomSamplerOption) => void; + loading: boolean; } -export const DocumentCountContent: FC = ({ documentCountStats, totalCount }) => { +export const DocumentCountContent: FC = ({ + documentCountStats, + totalCount, + samplingProbability, + setSamplingProbability, + loading, + randomSamplerPreference, + setRandomSamplerPreference, +}) => { + const [showSamplingOptionsPopover, setShowSamplingOptionsPopover] = useState(false); + + const onShowSamplingOptions = useCallback(() => { + setShowSamplingOptionsPopover(!showSamplingOptionsPopover); + }, [showSamplingOptionsPopover]); + + const closeSamplingOptions = useCallback(() => { + setShowSamplingOptionsPopover(false); + }, [setShowSamplingOptionsPopover]); + + const calloutInfoMessage = useMemo(() => { + switch (randomSamplerPreference) { + case RANDOM_SAMPLER_OPTION.OFF: + return i18n.translate('xpack.dataVisualizer.randomSamplerSettingsPopUp.offCalloutMessage', { + defaultMessage: + 'Random sampling can be turned on for the total document count and chart to increase speed although some accuracy will be lost.', + }); + case RANDOM_SAMPLER_OPTION.ON_AUTOMATIC: + return i18n.translate( + 'xpack.dataVisualizer.randomSamplerSettingsPopUp.onAutomaticCalloutMessage', + { + defaultMessage: + 'The total document count and chart use random sampler aggregations. The probability is automatically set to balance accuracy and speed.', + } + ); + + case RANDOM_SAMPLER_OPTION.ON_MANUAL: + default: + return i18n.translate( + 'xpack.dataVisualizer.randomSamplerSettingsPopUp.onManualCalloutMessage', + { + defaultMessage: + 'The total document count and chart use random sampler aggregations. A lower percentage probability increases performance, but some accuracy is lost.', + } + ); + } + }, [randomSamplerPreference]); + if (documentCountStats === undefined) { return totalCount !== undefined ? : null; } @@ -30,14 +106,129 @@ export const DocumentCountContent: FC = ({ documentCountStats, totalCount chartPoints = Object.entries(buckets).map(([time, value]) => ({ time: +time, value })); } + const approximate = documentCountStats.randomlySampled === true; + + const ProbabilityUsed = + randomSamplerPreference !== RANDOM_SAMPLER_OPTION.OFF && isDefined(samplingProbability) ? ( + <> + + + + + ) : null; + return ( <> - + + + + + + + } + isOpen={showSamplingOptionsPopover} + closePopover={closeSamplingOptions} + panelPaddingSize="none" + anchorPosition="downLeft" + > + + + + + + + + + setRandomSamplerPreference(e.target.value as RandomSamplerOption) + } + /> + + + {randomSamplerPreference === RANDOM_SAMPLER_OPTION.ON_MANUAL ? ( + + + + ({ + value: d, + label: d === 0.001 || d >= 5 ? `${d}%` : '', + }))} + onChange={(e) => { + const newProbability = Number(e.currentTarget.value); + const idx = sortedIndex(RANDOM_SAMPLER_PROBABILITIES, newProbability); + const closestPrev = RANDOM_SAMPLER_PROBABILITIES[idx - 1]; + const closestNext = RANDOM_SAMPLER_PROBABILITIES[idx]; + const closestProbability = + Math.abs(closestPrev - newProbability) < + Math.abs(closestNext - newProbability) + ? closestPrev + : closestNext; + + if (setSamplingProbability) { + setSamplingProbability(closestProbability / 100); + } + }} + step={RANDOM_SAMPLER_STEP} + /> + + + ) : ( + ProbabilityUsed + )} + + + + + ); diff --git a/x-pack/plugins/data_visualizer/public/application/common/components/document_count_content/total_count_header.tsx b/x-pack/plugins/data_visualizer/public/application/common/components/document_count_content/total_count_header.tsx index 2be544a49e05e..99ecd72d29857 100644 --- a/x-pack/plugins/data_visualizer/public/application/common/components/document_count_content/total_count_header.tsx +++ b/x-pack/plugins/data_visualizer/public/application/common/components/document_count_content/total_count_header.tsx @@ -5,30 +5,58 @@ * 2.0. */ -import { EuiFlexItem, EuiText } from '@elastic/eui'; +import { EuiFlexItem, EuiText, EuiLoadingSpinner, EuiIconTip } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; import React from 'react'; +import { i18n } from '@kbn/i18n'; -export const TotalCountHeader = ({ totalCount }: { totalCount: number }) => { +const SIGFIGS_IF_ROUNDING = 3; // Number of sigfigs to use for values < 10 + +export const TotalCountHeader = ({ + totalCount, + approximate, + loading, +}: { + totalCount: number; + loading?: boolean; + approximate?: boolean; +}) => { return ( - - + + + ) : ( ), }} /> + {approximate ? ( + + ) : null} ); }; diff --git a/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/components/index_data_visualizer_view/index_data_visualizer_view.tsx b/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/components/index_data_visualizer_view/index_data_visualizer_view.tsx index 079804a47cd7b..e0f4c24e2d96c 100644 --- a/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/components/index_data_visualizer_view/index_data_visualizer_view.tsx +++ b/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/components/index_data_visualizer_view/index_data_visualizer_view.tsx @@ -23,6 +23,7 @@ import { i18n } from '@kbn/i18n'; import { Filter, Query } from '@kbn/es-query'; import { generateFilters } from '@kbn/data-plugin/public'; import { DataView, DataViewField } from '@kbn/data-views-plugin/public'; +import { DV_RANDOM_SAMPLER_PREFERENCE, useStorage } from '../../hooks/use_storage'; import { FullTimeRangeSelector } from '../full_time_range_selector'; import { usePageUrlState, useUrlState } from '../../../common/util/url_state'; import { @@ -52,6 +53,7 @@ import { GetAdditionalLinks } from '../../../common/components/results_links'; import { useDataVisualizerGridData } from '../../hooks/use_data_visualizer_grid_data'; import { DataVisualizerGridInput } from '../../embeddables/grid_embeddable/grid_embeddable'; import './_index.scss'; +import { RANDOM_SAMPLER_OPTION, RandomSamplerOption } from '../../constants/random_sampler'; interface DataVisualizerPageState { overallStats: OverallStats; @@ -103,6 +105,8 @@ export const getDefaultDataVisualizerListState = ( showDistributions: true, showAllFields: false, showEmptyFields: false, + probability: null, + rndSamplerPref: RANDOM_SAMPLER_OPTION.ON_AUTOMATIC, ...overrides, }); @@ -112,9 +116,24 @@ export interface IndexDataVisualizerViewProps { currentSessionId?: string; getAdditionalLinks?: GetAdditionalLinks; } -const restorableDefaults = getDefaultDataVisualizerListState(); export const IndexDataVisualizerView: FC = (dataVisualizerProps) => { + const [savedRandomSamplerPreference, saveRandomSamplerPreference] = + useStorage( + DV_RANDOM_SAMPLER_PREFERENCE, + RANDOM_SAMPLER_OPTION.ON_AUTOMATIC + ); + + const restorableDefaults = useMemo( + () => + getDefaultDataVisualizerListState({ + rndSamplerPref: savedRandomSamplerPreference, + }), + // We just need to load the saved preference when the page is first loaded + // eslint-disable-next-line react-hooks/exhaustive-deps + [] + ); + const { services } = useDataVisualizerKibana(); const { docLinks, notifications, uiSettings, data } = services; const { toasts } = notifications; @@ -247,7 +266,42 @@ export const IndexDataVisualizerView: FC = (dataVi setLastRefresh, progress, extendedColumns, - } = useDataVisualizerGridData(input, dataVisualizerListState, setGlobalState); + overallStatsProgress, + } = useDataVisualizerGridData( + input, + dataVisualizerListState, + savedRandomSamplerPreference, + setGlobalState + ); + + useEffect( + () => { + switch (savedRandomSamplerPreference) { + case RANDOM_SAMPLER_OPTION.OFF: + setSamplingProbability(1); + return; + case RANDOM_SAMPLER_OPTION.ON_MANUAL: + setSamplingProbability( + dataVisualizerListState?.probability ?? documentCountStats?.probability ?? null + ); + return; + case RANDOM_SAMPLER_OPTION.ON_AUTOMATIC: + default: + setSamplingProbability(null); + return; + } + }, + // eslint-disable-next-line react-hooks/exhaustive-deps + [ + dataVisualizerListState.probability, + documentCountStats?.probability, + savedRandomSamplerPreference, + ] + ); + + const setSamplingProbability = (value: number | null) => { + setDataVisualizerListState({ ...dataVisualizerListState, probability: value }); + }; useEffect(() => { return () => { @@ -436,14 +490,6 @@ export const IndexDataVisualizerView: FC = (dataVi - {overallStats?.totalCount !== undefined && ( - - - - )} = (dataVi showEmptyFields={showEmptyFields} onAddFilter={onAddFilter} /> + + {overallStats?.totalCount !== undefined && ( + <> + + + + + + )} n * 100); + +export const RANDOM_SAMPLER_STEP = 0.00001 * 100; + +export const RANDOM_SAMPLER_OPTION = { + ON_AUTOMATIC: 'on_automatic', + ON_MANUAL: 'on_manual', + OFF: 'off', +} as const; + +export type RandomSamplerOption = typeof RANDOM_SAMPLER_OPTION[keyof typeof RANDOM_SAMPLER_OPTION]; + +export const RANDOM_SAMPLER_SELECT_OPTIONS: Array<{ value: RandomSamplerOption; text: string }> = [ + { + value: RANDOM_SAMPLER_OPTION.ON_AUTOMATIC, + text: i18n.translate('xpack.dataVisualizer.randomSamplerPreference.onAutomaticLabel', { + defaultMessage: 'On - automatic', + }), + }, + { + value: RANDOM_SAMPLER_OPTION.ON_MANUAL, + text: i18n.translate('xpack.dataVisualizer.randomSamplerPreference.onManualLabel', { + defaultMessage: 'On - manual', + }), + }, + { + value: RANDOM_SAMPLER_OPTION.OFF, + text: i18n.translate('xpack.dataVisualizer.randomSamplerPreference.offLabel', { + defaultMessage: 'Off', + }), + }, +]; diff --git a/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/hooks/use_data_visualizer_grid_data.ts b/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/hooks/use_data_visualizer_grid_data.ts index 5fbf8c447c989..2b9c83c925376 100644 --- a/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/hooks/use_data_visualizer_grid_data.ts +++ b/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/hooks/use_data_visualizer_grid_data.ts @@ -11,6 +11,8 @@ import { merge } from 'rxjs'; import { EuiTableActionsColumnType } from '@elastic/eui/src/components/basic_table/table_types'; import { i18n } from '@kbn/i18n'; import { DataViewField, KBN_FIELD_TYPES, UI_SETTINGS } from '@kbn/data-plugin/common'; +import seedrandom from 'seedrandom'; +import { RandomSamplerOption } from '../constants/random_sampler'; import { DataVisualizerIndexBasedAppState } from '../types/index_data_visualizer_state'; import { useDataVisualizerKibana } from '../../kibana_context'; import { getEsQueryFromSavedSearch } from '../utils/saved_search_utils'; @@ -44,15 +46,29 @@ function isDisplayField(fieldName: string): boolean { export const useDataVisualizerGridData = ( input: DataVisualizerGridInput, dataVisualizerListState: Required, + savedRandomSamplerPreference?: RandomSamplerOption, onUpdate?: (params: Dictionary) => void ) => { const { services } = useDataVisualizerKibana(); - const { uiSettings, data } = services; + const { uiSettings, data, security } = services; const { samplerShardSize, visibleFieldTypes, showEmptyFields } = dataVisualizerListState; const [lastRefresh, setLastRefresh] = useState(0); const searchSessionId = input.sessionId; + const browserSessionSeed = useMemo(() => { + let seed = Math.abs(seedrandom().int32()); + if (security !== undefined) { + security.authc.getCurrentUser().then((user) => { + const username = user.username; + if (username) { + seed = Math.abs(seedrandom(username).int32()); + } + }); + } + return seed; + }, [security]); + const { currentSavedSearch, currentDataView, @@ -215,7 +231,9 @@ export const useDataVisualizerGridData = ( const { overallStats, progress: overallStatsProgress } = useOverallStats( fieldStatsRequest, - lastRefresh + lastRefresh, + browserSessionSeed, + dataVisualizerListState.probability ); const configsWithoutStats = useMemo(() => { @@ -511,6 +529,7 @@ export const useDataVisualizerGridData = ( return { progress: combinedProgress, + overallStatsProgress, configs, searchQueryLanguage, searchString, diff --git a/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/hooks/use_overall_stats.ts b/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/hooks/use_overall_stats.ts index e524164137206..1d4bb35558085 100644 --- a/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/hooks/use_overall_stats.ts +++ b/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/hooks/use_overall_stats.ts @@ -22,6 +22,8 @@ import { checkAggregatableFieldsExistRequest, checkNonAggregatableFieldExistsRequest, isAggregatableFieldOverallStats, + isNonAggregatableFieldOverallStats, + NonAggregatableFieldOverallStats, processAggregatableFieldsExistResponse, processNonAggregatableFieldsExistResponse, } from '../search_strategy/requests/overall_stats'; @@ -32,12 +34,10 @@ import type { DataStatsFetchProgress, OverallStatsSearchStrategyParams, } from '../../../../common/types/field_stats'; -import { - getDocumentCountStatsRequest, - processDocumentCountStats, -} from '../search_strategy/requests/get_document_stats'; +import { getDocumentCountStats } from '../search_strategy/requests/get_document_stats'; import { getInitialProgress, getReducer } from '../progress_utils'; import { MAX_CONCURRENT_REQUESTS } from '../constants/index_data_visualizer_viewer'; +import { DocumentCountStats } from '../../../../common/types/field_stats'; /** * Helper function to run forkJoin @@ -91,7 +91,9 @@ function displayError(toastNotifications: ToastsStart, index: string, err: any) export function useOverallStats( searchStrategyParams: TParams | undefined, - lastRefresh: number + lastRefresh: number, + browserSessionSeed: number, + probability?: number | null ): { progress: DataStatsFetchProgress; overallStats: OverallStats; @@ -197,61 +199,66 @@ export function useOverallStats( - [documentCountStats$, ...aggregatableOverallStatsObs, ...nonAggregatableFieldsObs], + [ + from( + getDocumentCountStats( + data.search, + searchStrategyParams, + searchOptions, + browserSessionSeed, + probability + ) + ), + ...aggregatableOverallStatsObs, + ...nonAggregatableFieldsObs, + ], MAX_CONCURRENT_REQUESTS ); searchSubscription$.current = sub.subscribe({ next: (value) => { - { - const aggregatableOverallStatsResp: AggregatableFieldOverallStats[] = []; - const nonAggregatableOverallStatsResp: IKibanaSearchResponse[] = []; - const documentCountStatsResp = value[0]; + const aggregatableOverallStatsResp: AggregatableFieldOverallStats[] = []; + const nonAggregatableOverallStatsResp: NonAggregatableFieldOverallStats[] = []; + const documentCountStats = value[0] as DocumentCountStats; - value.forEach((resp, idx) => { - if (!resp) return; - if (isAggregatableFieldOverallStats(resp)) { - aggregatableOverallStatsResp.push(resp); - } else { - nonAggregatableOverallStatsResp.push(resp); - } - }); + value.forEach((resp, idx) => { + if (!resp || idx === 0) return; + if (isAggregatableFieldOverallStats(resp)) { + aggregatableOverallStatsResp.push(resp); + } - const documentCountStats = processDocumentCountStats( - documentCountStatsResp?.rawResponse, - searchStrategyParams - ); + if (isNonAggregatableFieldOverallStats(resp)) { + nonAggregatableOverallStatsResp.push(resp); + } + }); - const totalCount = documentCountStats?.totalCount ?? 0; + const totalCount = documentCountStats?.totalCount ?? 0; - const aggregatableOverallStats = processAggregatableFieldsExistResponse( - aggregatableOverallStatsResp, - aggregatableFields, - samplerShardSize, - totalCount - ); + const aggregatableOverallStats = processAggregatableFieldsExistResponse( + aggregatableOverallStatsResp, + aggregatableFields, + samplerShardSize, + totalCount + ); - const nonAggregatableOverallStats = processNonAggregatableFieldsExistResponse( - nonAggregatableOverallStatsResp, - nonAggregatableFields - ); + const nonAggregatableOverallStats = processNonAggregatableFieldsExistResponse( + nonAggregatableOverallStatsResp, + nonAggregatableFields + ); - setOverallStats({ - documentCountStats, - ...nonAggregatableOverallStats, - ...aggregatableOverallStats, - totalCount, - }); - } + setOverallStats({ + documentCountStats, + ...nonAggregatableOverallStats, + ...aggregatableOverallStats, + totalCount, + }); }, error: (error) => { displayError(toasts, searchStrategyParams.index, extractErrorProperties(error)); @@ -267,7 +274,8 @@ export function useOverallStats { searchSubscription$.current?.unsubscribe(); diff --git a/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/hooks/use_storage.ts b/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/hooks/use_storage.ts index d6b0bb3322c03..cd09967a81fa0 100644 --- a/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/hooks/use_storage.ts +++ b/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/hooks/use_storage.ts @@ -9,9 +9,13 @@ import { useCallback, useState } from 'react'; import { useDataVisualizerKibana } from '../../kibana_context'; export const DV_FROZEN_TIER_PREFERENCE = 'dataVisualizer.frozenDataTierPreference'; +export const DV_RANDOM_SAMPLER_PREFERENCE = 'dataVisualizer.randomSamplerPreference'; +export const DV_RANDOM_SAMPLER_P_VALUE = 'dataVisualizer.randomSamplerPValue'; export type DV = Partial<{ [DV_FROZEN_TIER_PREFERENCE]: 'exclude_frozen' | 'include_frozen'; + [DV_RANDOM_SAMPLER_PREFERENCE]: 'true' | 'false'; + [DV_RANDOM_SAMPLER_P_VALUE]: number; }> | null; export type DVKey = keyof Exclude; diff --git a/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/search_strategy/requests/get_document_stats.ts b/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/search_strategy/requests/get_document_stats.ts index dd654e312e0ef..a89b8dec4d705 100644 --- a/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/search_strategy/requests/get_document_stats.ts +++ b/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/search_strategy/requests/get_document_stats.ts @@ -5,15 +5,20 @@ * 2.0. */ -import { each, get } from 'lodash'; +import { each, get, sortedIndex } from 'lodash'; import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { isPopulatedObject } from '@kbn/ml-is-populated-object'; +import { DataPublicPluginStart, ISearchOptions } from '@kbn/data-plugin/public'; +import seedrandom from 'seedrandom'; +import { isDefined } from '../../../common/util/is_defined'; +import { RANDOM_SAMPLER_PROBABILITIES } from '../../constants/random_sampler'; import { buildBaseFilterCriteria } from '../../../../../common/utils/query_utils'; import type { DocumentCountStats, OverallStatsSearchStrategyParams, } from '../../../../../common/types/field_stats'; +const MINIMUM_RANDOM_SAMPLER_DOC_COUNT = 100000; export const getDocumentCountStatsRequest = (params: OverallStatsSearchStrategyParams) => { const { index, @@ -60,13 +65,162 @@ export const getDocumentCountStatsRequest = (params: OverallStatsSearchStrategyP }; }; +export const getDocumentCountStats = async ( + search: DataPublicPluginStart['search'], + params: OverallStatsSearchStrategyParams, + searchOptions: ISearchOptions, + browserSessionSeed: number, + probability?: number | null, + minimumRandomSamplerDocCount?: number +): Promise => { + const seed = browserSessionSeed ?? Math.abs(seedrandom().int32()); + + const { + index, + timeFieldName, + earliest: earliestMs, + latest: latestMs, + runtimeFieldMap, + searchQuery, + intervalMs, + fieldsToFetch, + } = params; + + const result = { randomlySampled: false, took: 0, totalCount: 0 }; + const filterCriteria = buildBaseFilterCriteria(timeFieldName, earliestMs, latestMs, searchQuery); + + const query = { + bool: { + filter: filterCriteria, + }, + }; + // Don't use the sampler aggregation as this can lead to some potentially + // confusing date histogram results depending on the date range of data amongst shards. + const aggs = { + eventRate: { + date_histogram: { + field: timeFieldName, + fixed_interval: `${intervalMs}ms`, + min_doc_count: 1, + }, + }, + }; + + // If probability is provided, use that + // Else, make an initial query using very low p + // so that we can calculate the next p value that's appropriate for the data set + const initialDefaultProbability = probability ?? 0.000001; + + const getAggsWithRandomSampling = (p: number) => ({ + sampler: { + aggs, + random_sampler: { + probability: p, + seed, + }, + }, + }); + + const getSearchParams = (aggregations: unknown) => ({ + index, + body: { + query, + ...(!fieldsToFetch && + timeFieldName !== undefined && + intervalMs !== undefined && + intervalMs > 0 + ? { aggs: aggregations } + : {}), + ...(isPopulatedObject(runtimeFieldMap) ? { runtime_mappings: runtimeFieldMap } : {}), + }, + track_total_hits: false, + size: 0, + }); + const firstResp = await search + .search( + { + params: getSearchParams(getAggsWithRandomSampling(initialDefaultProbability)), + }, + searchOptions + ) + .toPromise(); + + if (firstResp === undefined) { + throw Error( + `An error occurred with the following query ${JSON.stringify( + getSearchParams(getAggsWithRandomSampling(initialDefaultProbability)) + )}` + ); + } + if (isDefined(probability)) { + return { + ...result, + randomlySampled: probability === 1 ? false : true, + took: firstResp.rawResponse?.took, + probability, + ...processDocumentCountStats(firstResp.rawResponse, params, true), + }; + } + + // @ts-expect-error ES types needs to be updated with doc_count as part random sampler aggregation + const numSampled = firstResp.rawResponse.aggregations?.sampler?.doc_count; + const numDocs = minimumRandomSamplerDocCount ?? MINIMUM_RANDOM_SAMPLER_DOC_COUNT; + if (firstResp !== undefined && numSampled < numDocs) { + const newProbability = + (initialDefaultProbability * numDocs) / (numSampled - 2 * Math.sqrt(numSampled)); + + // If the number of docs sampled is indicative of query with < 10 million docs + // proceed to make a vanilla aggregation without any sampling + if (numSampled === 0 || newProbability === Infinity) { + const vanillaAggResp = await search + .search( + { + params: getSearchParams(getAggsWithRandomSampling(1)), + }, + searchOptions + ) + .toPromise(); + return { + ...result, + randomlySampled: false, + took: firstResp.rawResponse.took + (vanillaAggResp?.rawResponse?.took ?? 0), + ...processDocumentCountStats(vanillaAggResp?.rawResponse, params, true), + probability: 1, + }; + } else { + // Else, make second random sampler + const closestProbability = + RANDOM_SAMPLER_PROBABILITIES[sortedIndex(RANDOM_SAMPLER_PROBABILITIES, newProbability)]; + const secondResp = await search + .search( + { + params: getSearchParams(getAggsWithRandomSampling(closestProbability)), + }, + searchOptions + ) + .toPromise(); + if (secondResp) { + return { + ...result, + randomlySampled: true, + took: firstResp.rawResponse.took + secondResp.rawResponse.took, + ...processDocumentCountStats(secondResp.rawResponse, params, true), + probability: closestProbability, + }; + } + } + } + return result; +}; + export const processDocumentCountStats = ( body: estypes.SearchResponse | undefined, - params: OverallStatsSearchStrategyParams + params: OverallStatsSearchStrategyParams, + randomlySampled = false ): DocumentCountStats | undefined => { if (!body) return undefined; - const totalCount = (body.hits.total as estypes.SearchTotalHits).value ?? body.hits.total ?? 0; + let totalCount = 0; if ( params.intervalMs === undefined || @@ -80,12 +234,15 @@ export const processDocumentCountStats = ( const buckets: { [key: string]: number } = {}; const dataByTimeBucket: Array<{ key: string; doc_count: number }> = get( body, - ['aggregations', 'eventRate', 'buckets'], + randomlySampled + ? ['aggregations', 'sampler', 'eventRate', 'buckets'] + : ['aggregations', 'eventRate', 'buckets'], [] ); each(dataByTimeBucket, (dataForTime) => { const time = dataForTime.key; buckets[time] = dataForTime.doc_count; + totalCount += dataForTime.doc_count; }); return { diff --git a/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/search_strategy/requests/get_numeric_field_stats.ts b/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/search_strategy/requests/get_numeric_field_stats.ts index 033f4469b0bc2..024fbb3577a48 100644 --- a/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/search_strategy/requests/get_numeric_field_stats.ts +++ b/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/search_strategy/requests/get_numeric_field_stats.ts @@ -86,14 +86,12 @@ export const getNumericFieldsStatsRequest = ( // If cardinality >= SAMPLE_TOP_TERMS_THRESHOLD, run the top terms aggregation // in a sampler aggregation, even if no sampling has been specified (samplerShardSize < 1). if (samplerShardSize < 1 && field.cardinality >= SAMPLER_TOP_TERMS_THRESHOLD) { - aggs[`${safeFieldName}_top`] = { - sampler: { - shard_size: SAMPLER_TOP_TERMS_SHARD_SIZE, - }, - aggs: { + aggs[`${safeFieldName}_top`] = buildSamplerAggregation( + { top, }, - }; + 0.05 + ); } else { aggs[`${safeFieldName}_top`] = top; } diff --git a/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/search_strategy/requests/overall_stats.ts b/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/search_strategy/requests/overall_stats.ts index 7bf8640c89fce..80e2044557dca 100644 --- a/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/search_strategy/requests/overall_stats.ts +++ b/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/search_strategy/requests/overall_stats.ts @@ -91,12 +91,20 @@ export interface AggregatableFieldOverallStats extends IKibanaSearchResponse { aggregatableFields: string[]; } +export type NonAggregatableFieldOverallStats = IKibanaSearchResponse; + export function isAggregatableFieldOverallStats( arg: unknown ): arg is AggregatableFieldOverallStats { return isPopulatedObject(arg, ['aggregatableFields']); } +export function isNonAggregatableFieldOverallStats( + arg: unknown +): arg is NonAggregatableFieldOverallStats { + return isPopulatedObject(arg, ['rawResponse']); +} + export const processAggregatableFieldsExistResponse = ( responses: AggregatableFieldOverallStats[] | undefined, aggregatableFields: string[], diff --git a/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/types/index_data_visualizer_state.ts b/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/types/index_data_visualizer_state.ts index 4a1506dc5b56f..cb3e465683f81 100644 --- a/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/types/index_data_visualizer_state.ts +++ b/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/types/index_data_visualizer_state.ts @@ -6,8 +6,9 @@ */ import type { Filter } from '@kbn/es-query'; -import { Query } from '@kbn/data-plugin/common/query'; -import { SearchQueryLanguage } from './combined_query'; +import type { Query } from '@kbn/data-plugin/common/query'; +import type { RandomSamplerOption } from '../constants/random_sampler'; +import type { SearchQueryLanguage } from './combined_query'; export interface ListingPageUrlState { pageSize: number; @@ -27,4 +28,6 @@ export interface DataVisualizerIndexBasedAppState extends Omit { it('calls correct api', async () => { const promise = Promise.resolve({ id: 'unique id', index_name: 'indexName' }); http.post.mockReturnValue(promise); - const result = addConnectorPackage({ indexName: 'indexName' }); + const result = addConnectorPackage({ indexName: 'indexName', language: 'en' }); await nextTick(); expect(http.post).toHaveBeenCalledWith('/internal/enterprise_search/connectors', { - body: JSON.stringify({ index_name: 'indexName' }), + body: JSON.stringify({ index_name: 'indexName', language: 'en' }), }); await expect(result).resolves.toEqual({ id: 'unique id', indexName: 'indexName' }); }); it('adds delete param if specific', async () => { const promise = Promise.resolve({ id: 'unique id', index_name: 'indexName' }); http.post.mockReturnValue(promise); - const result = addConnectorPackage({ deleteExistingConnector: true, indexName: 'indexName' }); + const result = addConnectorPackage({ + deleteExistingConnector: true, + indexName: 'indexName', + language: null, + }); await nextTick(); expect(http.post).toHaveBeenCalledWith('/internal/enterprise_search/connectors', { - body: JSON.stringify({ index_name: 'indexName', delete_existing_connector: true }), + body: JSON.stringify({ + delete_existing_connector: true, + index_name: 'indexName', + language: null, + }), }); await expect(result).resolves.toEqual({ id: 'unique id', indexName: 'indexName' }); }); diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/api/connector_package/add_connector_package_api_logic.ts b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/api/connector_package/add_connector_package_api_logic.ts index d664f77c841d6..9805457c65b2f 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/api/connector_package/add_connector_package_api_logic.ts +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/api/connector_package/add_connector_package_api_logic.ts @@ -16,6 +16,7 @@ interface AddConnectorValue { export interface AddConnectorPackageApiLogicArgs { deleteExistingConnector?: boolean; indexName: string; + language: string | null; } export interface AddConnectorPackageApiLogicResponse { @@ -24,8 +25,9 @@ export interface AddConnectorPackageApiLogicResponse { } export const addConnectorPackage = async ({ - indexName, deleteExistingConnector, + indexName, + language, }: AddConnectorPackageApiLogicArgs): Promise => { const route = '/internal/enterprise_search/connectors'; @@ -33,8 +35,9 @@ export const addConnectorPackage = async ({ ? { delete_existing_connector: deleteExistingConnector } : {}; const params = { - index_name: indexName, ...deleteParam, + index_name: indexName, + language, }; const result = await HttpLogic.values.http.post(route, { body: JSON.stringify(params), diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/api/connector_package/start_sync_api_logic.test.ts b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/api/connector_package/start_sync_api_logic.test.ts new file mode 100644 index 0000000000000..7496557996868 --- /dev/null +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/api/connector_package/start_sync_api_logic.test.ts @@ -0,0 +1,31 @@ +/* + * 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 { mockHttpValues } from '../../../__mocks__/kea_logic'; + +import { nextTick } from '@kbn/test-jest-helpers'; + +import { startSync } from './start_sync_api_logic'; + +describe('startSync', () => { + const { http } = mockHttpValues; + beforeEach(() => { + jest.clearAllMocks(); + }); + describe('generateApiKey', () => { + it('calls correct api', async () => { + const promise = Promise.resolve('result'); + http.post.mockReturnValue(promise); + const result = startSync({ connectorId: 'connectorId' }); + await nextTick(); + expect(http.post).toHaveBeenCalledWith( + '/internal/enterprise_search/connectors/connectorId/start_sync' + ); + await expect(result).resolves.toEqual('result'); + }); + }); +}); diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/api/connector_package/start_sync_api_logic.ts b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/api/connector_package/start_sync_api_logic.ts new file mode 100644 index 0000000000000..b2f9a2638e1c0 --- /dev/null +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/api/connector_package/start_sync_api_logic.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 { createApiLogic } from '../../../shared/api_logic/create_api_logic'; +import { HttpLogic } from '../../../shared/http'; + +export interface StartSyncArgs { + connectorId: string; +} + +export const startSync = async ({ connectorId }: StartSyncArgs) => { + const route = `/internal/enterprise_search/connectors/${connectorId}/start_sync`; + return await HttpLogic.values.http.post(route); +}; + +export const StartSyncApiLogic = createApiLogic(['start_sync_api_logic'], startSync); diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/api/index/create_api_index_api_logic.test.ts b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/api/index/create_api_index_api_logic.test.ts new file mode 100644 index 0000000000000..4e304d193b564 --- /dev/null +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/api/index/create_api_index_api_logic.test.ts @@ -0,0 +1,31 @@ +/* + * 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 { mockHttpValues } from '../../../__mocks__/kea_logic'; + +import { nextTick } from '@kbn/test-jest-helpers'; + +import { createApiIndex } from './create_api_index_api_logic'; + +describe('createApiIndexApiLogic', () => { + const { http } = mockHttpValues; + beforeEach(() => { + jest.clearAllMocks(); + }); + describe('createApiIndex', () => { + it('calls correct api', async () => { + const promise = Promise.resolve({ index: 'indexName' }); + http.post.mockReturnValue(promise); + const result = createApiIndex({ indexName: 'indexName', language: 'en' }); + await nextTick(); + expect(http.post).toHaveBeenCalledWith('/internal/enterprise_search/indices', { + body: JSON.stringify({ index_name: 'indexName', language: 'en' }), + }); + await expect(result).resolves.toEqual({ indexName: 'indexName' }); + }); + }); +}); diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/api/index/create_api_index_api_logic.ts b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/api/index/create_api_index_api_logic.ts new file mode 100644 index 0000000000000..ecf67a1374cd7 --- /dev/null +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/api/index/create_api_index_api_logic.ts @@ -0,0 +1,45 @@ +/* + * 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 { createApiLogic } from '../../../shared/api_logic/create_api_logic'; +import { HttpLogic } from '../../../shared/http'; + +interface CreateApiIndexValue { + index: string; +} + +export interface CreateApiIndexApiLogicArgs { + deleteExistingConnector?: boolean; + indexName: string; + language: string | null; +} + +export interface CreateApiIndexApiLogicResponse { + indexName: string; +} + +export const createApiIndex = async ({ + indexName, + language, +}: CreateApiIndexApiLogicArgs): Promise => { + const route = '/internal/enterprise_search/indices'; + const params = { + index_name: indexName, + language, + }; + const result = await HttpLogic.values.http.post(route, { + body: JSON.stringify(params), + }); + return { + indexName: result.index, + }; +}; + +export const CreateApiIndexApiLogic = createApiLogic( + ['create_api_index_api_logic'], + createApiIndex +); diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/new_index/method_api.test.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/new_index/method_api/method_api.test.tsx similarity index 91% rename from x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/new_index/method_api.test.tsx rename to x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/new_index/method_api/method_api.test.tsx index 93b92271cbd28..0a7e767617b38 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/new_index/method_api.test.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/new_index/method_api/method_api.test.tsx @@ -11,8 +11,9 @@ import { shallow } from 'enzyme'; import { EuiSteps } from '@elastic/eui'; +import { NewSearchIndexTemplate } from '../new_search_index_template'; + import { MethodApi } from './method_api'; -import { NewSearchIndexTemplate } from './new_search_index_template'; describe('MethodApi', () => { beforeEach(() => { diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/new_index/method_api.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/new_index/method_api/method_api.tsx similarity index 91% rename from x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/new_index/method_api.tsx rename to x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/new_index/method_api/method_api.tsx index 22dc277fbe8a5..173ed3227ea8f 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/new_index/method_api.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/new_index/method_api/method_api.tsx @@ -5,20 +5,20 @@ * 2.0. */ -/** - * TODO: - * - Need to add documentation URLs (search for `#`s) - */ - import React from 'react'; +import { useActions } from 'kea'; + import { EuiSteps, EuiText } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; -import { NewSearchIndexTemplate } from './new_search_index_template'; +import { NewSearchIndexTemplate } from '../new_search_index_template'; + +import { MethodApiLogic } from './method_api_logic'; export const MethodApi: React.FC = () => { + const { makeRequest } = useActions(MethodApiLogic); return ( { /> } type="api" - onSubmit={() => null} + onSubmit={(indexName, language) => makeRequest({ indexName, language })} > { + const { mount } = new LogicMounter(MethodApiLogic); + const { clearFlashMessages, flashAPIErrors } = mockFlashMessageHelpers; + const { navigateToUrl } = mockKibanaValues; + + beforeEach(() => { + jest.clearAllMocks(); + mount(); + }); + + describe('listeners', () => { + describe('apiSuccess', () => { + it('navigates user to index detail view', () => { + MethodApiLogic.actions.apiSuccess({ indexName: 'my-index' }); + + expect(navigateToUrl).toHaveBeenCalledWith('/search_indices/my-index/overview'); + }); + }); + + describe('makeRequest', () => { + it('clears any displayed errors', () => { + MethodApiLogic.actions.makeRequest({ indexName: 'my-index', language: 'Universal' }); + + expect(clearFlashMessages).toHaveBeenCalled(); + }); + }); + + describe('apiError', () => { + it('displays the error to the user', () => { + const error = {} as HttpError; + + MethodApiLogic.actions.apiError(error); + + expect(flashAPIErrors).toHaveBeenCalledWith(error); + }); + }); + }); +}); diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/new_index/method_api/method_api_logic.ts b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/new_index/method_api/method_api_logic.ts new file mode 100644 index 0000000000000..65d1563458319 --- /dev/null +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/new_index/method_api/method_api_logic.ts @@ -0,0 +1,48 @@ +/* + * 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 { kea, MakeLogicType } from 'kea'; + +import { Actions } from '../../../../shared/api_logic/create_api_logic'; +import { generateEncodedPath } from '../../../../shared/encode_path_params'; + +import { clearFlashMessages, flashAPIErrors } from '../../../../shared/flash_messages'; + +import { KibanaLogic } from '../../../../shared/kibana'; +import { + CreateApiIndexApiLogic, + CreateApiIndexApiLogicArgs, + CreateApiIndexApiLogicResponse, +} from '../../../api/index/create_api_index_api_logic'; +import { SEARCH_INDEX_TAB_PATH } from '../../../routes'; +import { SearchIndexTabId } from '../../search_index/search_index'; + +type MethodApiActions = Pick< + Actions, + 'apiError' | 'apiSuccess' | 'makeRequest' +>; + +export const MethodApiLogic = kea>({ + connect: { + actions: [CreateApiIndexApiLogic, ['apiError', 'apiSuccess', 'makeRequest']], + }, + listeners: { + apiError: (error) => { + flashAPIErrors(error); + }, + apiSuccess: ({ indexName }) => { + KibanaLogic.values.navigateToUrl( + generateEncodedPath(SEARCH_INDEX_TAB_PATH, { + indexName, + tabId: SearchIndexTabId.OVERVIEW, + }) + ); + }, + makeRequest: () => clearFlashMessages(), + }, + path: ['enterprise_search', 'method_api'], +}); diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/new_index/method_connector/method_connector.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/new_index/method_connector/method_connector.tsx index 0022ac1676ead..03ffef8b4c2e8 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/new_index/method_connector/method_connector.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/new_index/method_connector/method_connector.tsx @@ -68,7 +68,7 @@ export const MethodConnector: React.FC = () => { const { error, status } = useValues(AddConnectorPackageApiLogic); const { isModalVisible } = useValues(AddConnectorPackageLogic); const { setIsModalVisible } = useActions(AddConnectorPackageLogic); - const { fullIndexName } = useValues(NewSearchIndexLogic); + const { fullIndexName, language } = useValues(NewSearchIndexLogic); const confirmModal = isModalVisible && ( { }} onConfirm={(event) => { event.preventDefault(); - makeRequest({ deleteExistingConnector: true, indexName: fullIndexName }); + makeRequest({ deleteExistingConnector: true, indexName: fullIndexName, language }); }} cancelButtonText={i18n.translate( 'xpack.enterpriseSearch.content.newIndex.steps.buildConnector.confirmModal.cancelButton.label', @@ -123,7 +123,7 @@ export const MethodConnector: React.FC = () => { onNameChange={() => { apiReset(); }} - onSubmit={(name) => makeRequest({ indexName: name })} + onSubmit={(name, lang) => makeRequest({ indexName: name, language: lang })} buttonLoading={status === Status.LOADING} > { +describe('MethodCrawlerLogic', () => { const { mount } = new LogicMounter(MethodCrawlerLogic); const { clearFlashMessages, flashAPIErrors } = mockFlashMessageHelpers; const { navigateToUrl } = mockKibanaValues; @@ -31,7 +30,7 @@ describe.skip('MethodCrawlerLogic', () => { it('navigates user to index detail view', () => { MethodCrawlerLogic.actions.apiSuccess({ created: 'my-index' }); - expect(navigateToUrl).toHaveBeenCalledWith('/search_indices/my-index'); + expect(navigateToUrl).toHaveBeenCalledWith('/search_indices/my-index/domain_management'); }); }); diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/new_index/new_index.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/new_index/new_index.tsx index 6aaee3099d729..4f4c54801ef4d 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/new_index/new_index.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/new_index/new_index.tsx @@ -30,7 +30,7 @@ import { baseBreadcrumbs } from '../search_indices'; import { ButtonGroup, ButtonGroupOption } from './button_group'; import { SearchIndexEmptyState } from './empty_state'; -import { MethodApi } from './method_api'; +import { MethodApi } from './method_api/method_api'; import { MethodConnector } from './method_connector/method_connector'; import { MethodCrawler } from './method_crawler/method_crawler'; diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/components/header_actions/header_actions.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/components/header_actions/header_actions.tsx index a03f2736a8584..74dcd7b47d9b0 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/components/header_actions/header_actions.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/components/header_actions/header_actions.tsx @@ -15,6 +15,8 @@ import { EuiContextMenuPanel, EuiContextMenuItem, EuiText, + EuiFlexGroup, + EuiFlexItem, } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; @@ -23,62 +25,82 @@ import { APP_SEARCH_PLUGIN } from '../../../../../../../common/constants'; import { ENGINE_CREATION_PATH } from '../../../../../app_search/routes'; import { KibanaLogic } from '../../../../../shared/kibana'; +import { IngestionMethod } from '../../../../types'; +import { IndexViewLogic } from '../../index_view_logic'; + import { HeaderActionsLogic } from './header_actions.logic'; +import { SyncButton } from './sync_button'; const SearchEnginesPopover: React.FC = () => { const { isSearchEnginesPopoverOpen } = useValues(HeaderActionsLogic); const { toggleSearchEnginesPopover } = useActions(HeaderActionsLogic); + const { ingestionMethod } = useValues(IndexViewLogic); return ( - - {i18n.translate('xpack.enterpriseSearch.content.index.searchEngines.label', { - defaultMessage: 'Search Engines', - })} - - } - > - { - KibanaLogic.values.navigateToUrl(APP_SEARCH_PLUGIN.URL, { - shouldNotCreateHref: true, - }); - }} - > - -

- {i18n.translate('xpack.enterpriseSearch.content.index.searchEngines.viewEngines', { - defaultMessage: 'View App Search engines', - })} -

-
- , - { - KibanaLogic.values.navigateToUrl(APP_SEARCH_PLUGIN.URL + ENGINE_CREATION_PATH, { - shouldNotCreateHref: true, - }); - }} - > - -

- {i18n.translate('xpack.enterpriseSearch.content.index.searchEngines.createEngine', { - defaultMessage: 'Create a new App Search engine', - })} -

-
-
, - ]} - /> -
+ + + + {i18n.translate('xpack.enterpriseSearch.content.index.searchEngines.label', { + defaultMessage: 'Search Engines', + })} + + } + > + { + KibanaLogic.values.navigateToUrl(APP_SEARCH_PLUGIN.URL, { + shouldNotCreateHref: true, + }); + }} + > + +

+ {i18n.translate( + 'xpack.enterpriseSearch.content.index.searchEngines.viewEngines', + { + defaultMessage: 'View App Search engines', + } + )} +

+
+ , + { + KibanaLogic.values.navigateToUrl(APP_SEARCH_PLUGIN.URL + ENGINE_CREATION_PATH, { + shouldNotCreateHref: true, + }); + }} + > + +

+ {i18n.translate( + 'xpack.enterpriseSearch.content.index.searchEngines.createEngine', + { + defaultMessage: 'Create a new App Search engine', + } + )} +

+
+
, + ]} + /> +
+
+ {ingestionMethod === IngestionMethod.CONNECTOR && ( + + + + )} +
); }; diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/components/header_actions/sync_button.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/components/header_actions/sync_button.tsx new file mode 100644 index 0000000000000..6a6c483b30134 --- /dev/null +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/components/header_actions/sync_button.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 { useValues, useActions } from 'kea'; + +import { EuiButton } from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; + +import { IngestionStatus } from '../../../../types'; +import { IndexViewLogic } from '../../index_view_logic'; + +export const SyncButton: React.FC = () => { + const { ingestionStatus, isSyncing, isWaitingForSync } = useValues(IndexViewLogic); + const { startSync } = useActions(IndexViewLogic); + + const getSyncButtonText = () => { + if (isWaitingForSync) { + return i18n.translate( + 'xpack.enterpriseSearch.content.index.syncButton.waitingForSync.label', + { + defaultMessage: 'Waiting for sync', + } + ); + } + if (isSyncing && ingestionStatus !== IngestionStatus.ERROR) { + return i18n.translate('xpack.enterpriseSearch.content.index.syncButton.syncing.label', { + defaultMessage: 'Syncing', + }); + } + return i18n.translate('xpack.enterpriseSearch.content.index.syncButton.label', { + defaultMessage: 'Sync', + }); + }; + return ( + + {getSyncButtonText()} + + ); +}; diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/connector/connector_configuration.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/connector/connector_configuration.tsx index 8243f901b70f8..0e3d726b9afe5 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/connector/connector_configuration.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/connector/connector_configuration.tsx @@ -28,6 +28,7 @@ import { EuiButtonTo } from '../../../../shared/react_router_helpers'; import { GenerateConnectorApiKeyApiLogic } from '../../../api/connector_package/generate_connector_api_key_api_logic'; import { FetchIndexApiLogic } from '../../../api/index/fetch_index_api_logic'; import { SEARCH_INDEX_TAB_PATH } from '../../../routes'; +import { isConnectorIndex } from '../../../utils/indices'; import { ApiKey } from '../../api_key/api_key'; import { IndexNameLogic } from '../index_name_logic'; @@ -41,22 +42,22 @@ export const ConnectorConfiguration: React.FC = () => { const { data: apiKeyData } = useValues(GenerateConnectorApiKeyApiLogic); const { data: indexData } = useValues(FetchIndexApiLogic); const { indexName } = useValues(IndexNameLogic); - const indexId = indexData?.connector?.id ?? ''; + if (!isConnectorIndex(indexData)) { + return <>; + } + const indexId = indexData.connector.id ?? ''; - const hasApiKey = !!(indexData?.connector?.api_key_id ?? apiKeyData); + const hasApiKey = !!(indexData.connector.api_key_id ?? apiKeyData); - const ConnectorConfig: React.FC = () => - indexData?.connector ? ( - - ) : ( - <> - ); + const ConnectorConfig: React.FC = () => ( + + ); const ScheduleStep: React.FC = () => ( @@ -145,7 +146,7 @@ export const ConnectorConfiguration: React.FC = () => { children: ( ), status: hasApiKey ? 'complete' : 'incomplete', @@ -160,7 +161,7 @@ export const ConnectorConfiguration: React.FC = () => { { children: , status: - !indexData?.connector?.status || + !indexData.connector.status || indexData.connector.status === ConnectorStatus.CREATED ? 'incomplete' : 'complete', @@ -175,7 +176,6 @@ export const ConnectorConfiguration: React.FC = () => { { children: , status: - indexData?.connector?.status && indexData.connector.status === ConnectorStatus.CONNECTED ? 'complete' : 'incomplete', @@ -189,7 +189,7 @@ export const ConnectorConfiguration: React.FC = () => { }, { children: , - status: indexData?.connector?.scheduling.enabled ? 'complete' : 'incomplete', + status: indexData.connector.scheduling.enabled ? 'complete' : 'incomplete', title: i18n.translate( 'xpack.enterpriseSearch.content.indices.configurationConnector.steps.schedule.title', { diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/connector/connector_configuration_config.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/connector/connector_configuration_config.tsx index c1927aeea0dfc..7bead70acbdff 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/connector/connector_configuration_config.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/connector/connector_configuration_config.tsx @@ -68,7 +68,7 @@ export const ConnectorConfigurationConfig: React.FC ); diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/connector/connector_scheduling.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/connector/connector_scheduling.tsx index 2f0b46520b89b..ca10c6ce6ff23 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/connector/connector_scheduling.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/connector/connector_scheduling.tsx @@ -19,14 +19,18 @@ import { EuiButton, EuiButtonEmpty, } from '@elastic/eui'; + import { CronEditor, Frequency } from '@kbn/es-ui-shared-plugin/public'; import { i18n } from '@kbn/i18n'; import { Status } from '../../../../../../common/types/api'; +import { ConnectorIndex } from '../../../../../../common/types/indices'; import { UnsavedChangesPrompt } from '../../../../shared/unsaved_changes_prompt'; import { UpdateConnectorSchedulingApiLogic } from '../../../api/connector_package/update_connector_scheduling_api_logic'; import { FetchIndexApiLogic } from '../../../api/index/fetch_index_api_logic'; +import { isConnectorIndex } from '../../../utils/indices'; + import { ConnectorSchedulingLogic } from './connector_scheduling_logic'; export const ConnectorSchedulingComponent: React.FC = () => { @@ -36,7 +40,8 @@ export const ConnectorSchedulingComponent: React.FC = () => { const { hasChanges } = useValues(ConnectorSchedulingLogic); const { setHasChanges } = useActions(ConnectorSchedulingLogic); - const schedulingInput = data?.connector?.scheduling; + // Need to do this ugly casting because we can't check this after the below typecheck, because useState can't be used after an if + const schedulingInput = (data as ConnectorIndex)?.connector?.scheduling; const [scheduling, setScheduling] = useState(schedulingInput); const [fieldToPreferredValueMap, setFieldToPreferredValueMap] = useState({}); const [simpleCron, setSimpleCron] = useState<{ @@ -47,7 +52,11 @@ export const ConnectorSchedulingComponent: React.FC = () => { frequency: schedulingInput?.interval ? cronToFrequency(schedulingInput.interval) : 'HOUR', }); - const editor = scheduling && ( + if (!isConnectorIndex(data)) { + return <>; + } + + const editor = ( { /> ); - return scheduling ? ( + return ( <> {
- ) : ( - <> ); }; diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/index_view_logic.test.ts b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/index_view_logic.test.ts new file mode 100644 index 0000000000000..e15271f2fb655 --- /dev/null +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/index_view_logic.test.ts @@ -0,0 +1,134 @@ +/* + * 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 { LogicMounter, mockFlashMessageHelpers } from '../../../__mocks__/kea_logic'; + +import { apiIndex, connectorIndex } from '../../__mocks__/view_index.mock'; + +import { nextTick } from '@kbn/test-jest-helpers'; + +import { HttpError } from '../../../../../common/types/api'; + +import { SyncStatus } from '../../../../../common/types/connectors'; +import { StartSyncApiLogic } from '../../api/connector_package/start_sync_api_logic'; +import { FetchIndexApiLogic } from '../../api/index/fetch_index_api_logic'; + +import { IngestionMethod, IngestionStatus } from '../../types'; + +import { indexToViewIndex } from '../../utils/indices'; + +import { IndexViewLogic } from './index_view_logic'; + +const DEFAULT_VALUES = { + data: undefined, + index: undefined, + ingestionMethod: IngestionMethod.API, + ingestionStatus: IngestionStatus.CONNECTED, + isSyncing: false, + isWaitingForSync: false, + lastUpdated: null, + localSyncNowValue: false, + syncStatus: undefined, +}; + +const CONNECTOR_VALUES = { + ...DEFAULT_VALUES, + data: connectorIndex, + index: indexToViewIndex(connectorIndex), + ingestionMethod: IngestionMethod.CONNECTOR, + ingestionStatus: IngestionStatus.INCOMPLETE, + lastUpdated: 'never', +}; + +describe('IndexViewLogic', () => { + const { mount: apiLogicMount } = new LogicMounter(StartSyncApiLogic); + const { mount: fetchIndexMount } = new LogicMounter(FetchIndexApiLogic); + const { mount } = new LogicMounter(IndexViewLogic); + + beforeEach(() => { + jest.clearAllMocks(); + jest.useRealTimers(); + apiLogicMount(); + fetchIndexMount(); + mount(); + }); + + it('has expected default values', () => { + expect(IndexViewLogic.values).toEqual(DEFAULT_VALUES); + }); + + describe('actions', () => { + describe('fetchIndex.apiSuccess', () => { + it('should update values', () => { + FetchIndexApiLogic.actions.apiSuccess({ + ...connectorIndex, + connector: { ...connectorIndex.connector!, sync_now: true }, + }); + expect(IndexViewLogic.values).toEqual({ + ...CONNECTOR_VALUES, + data: { + ...CONNECTOR_VALUES.data, + connector: { ...CONNECTOR_VALUES.data.connector, sync_now: true }, + }, + index: { + ...CONNECTOR_VALUES.index, + connector: { ...CONNECTOR_VALUES.index.connector, sync_now: true }, + }, + isWaitingForSync: true, + syncStatus: SyncStatus.COMPLETED, + }); + }); + it('should update values with no connector', () => { + FetchIndexApiLogic.actions.apiSuccess(apiIndex); + expect(IndexViewLogic.values).toEqual({ + ...DEFAULT_VALUES, + data: apiIndex, + index: apiIndex, + }); + }); + }); + describe('startSync', () => { + it('should call makeRequest', async () => { + FetchIndexApiLogic.actions.apiSuccess(connectorIndex); + IndexViewLogic.actions.makeRequest = jest.fn(); + IndexViewLogic.actions.startSync(); + await nextTick(); + expect(IndexViewLogic.actions.makeRequest).toHaveBeenCalledWith({ + connectorId: '2', + }); + expect(IndexViewLogic.values).toEqual({ + ...CONNECTOR_VALUES, + syncStatus: SyncStatus.COMPLETED, + }); + }); + }); + describe('apiSuccess', () => { + it('should set localSyncNow to true', async () => { + FetchIndexApiLogic.actions.apiSuccess(connectorIndex); + StartSyncApiLogic.actions.apiSuccess({}); + expect(IndexViewLogic.values).toEqual({ + ...CONNECTOR_VALUES, + isWaitingForSync: true, + localSyncNowValue: true, + syncStatus: SyncStatus.COMPLETED, + }); + }); + }); + }); + + describe('listeners', () => { + it('calls clearFlashMessages on makeRequest', () => { + IndexViewLogic.actions.makeRequest({ connectorId: 'connectorId' }); + expect(mockFlashMessageHelpers.clearFlashMessages).toHaveBeenCalledTimes(1); + }); + it('calls flashAPIErrors on apiError', () => { + IndexViewLogic.actions.apiError({} as HttpError); + expect(mockFlashMessageHelpers.flashAPIErrors).toHaveBeenCalledTimes(1); + expect(mockFlashMessageHelpers.flashAPIErrors).toHaveBeenCalledWith({}); + }); + }); +}); diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/index_view_logic.ts b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/index_view_logic.ts new file mode 100644 index 0000000000000..2d60d69d08702 --- /dev/null +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/index_view_logic.ts @@ -0,0 +1,103 @@ +/* + * 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 { kea, MakeLogicType } from 'kea'; + +import { i18n } from '@kbn/i18n'; + +import { SyncStatus } from '../../../../../common/types/connectors'; +import { Actions } from '../../../shared/api_logic/create_api_logic'; +import { + flashAPIErrors, + clearFlashMessages, + flashSuccessToast, +} from '../../../shared/flash_messages'; +import { StartSyncApiLogic, StartSyncArgs } from '../../api/connector_package/start_sync_api_logic'; +import { + FetchIndexApiLogic, + FetchIndexApiParams, + FetchIndexApiResponse, +} from '../../api/index/fetch_index_api_logic'; +import { ElasticsearchViewIndex, IngestionMethod, IngestionStatus } from '../../types'; +import { + getIngestionMethod, + getIngestionStatus, + getLastUpdated, + indexToViewIndex, + isConnectorIndex, +} from '../../utils/indices'; + +export type IndicesActions = Pick< + Actions, + 'makeRequest' | 'apiSuccess' | 'apiError' +> & { + fetchIndexSuccess: Actions['apiSuccess']; + startSync(): void; +}; +export interface IndicesValues { + data: typeof FetchIndexApiLogic.values.data; + index: ElasticsearchViewIndex | undefined; + ingestionMethod: IngestionMethod; + ingestionStatus: IngestionStatus; + isSyncing: boolean; + isWaitingForSync: boolean; + lastUpdated: string | null; + localSyncNowValue: boolean; // holds local value after update so UI updates correctly + syncStatus: SyncStatus; +} + +export const IndexViewLogic = kea>({ + actions: { + startSync: true, + }, + connect: { + actions: [StartSyncApiLogic, ['makeRequest', 'apiSuccess', 'apiError']], + values: [FetchIndexApiLogic, ['data']], + }, + listeners: ({ actions, values }) => ({ + apiError: (e) => flashAPIErrors(e), + apiSuccess: () => { + flashSuccessToast( + i18n.translate('xpack.enterpriseSearch.content.searchIndex.index.syncSuccess.message', { + defaultMessage: 'Successfully scheduled a sync, waiting for a connector to pick it up', + }) + ); + }, + makeRequest: () => clearFlashMessages(), + startSync: () => { + if (isConnectorIndex(values.data)) { + actions.makeRequest({ connectorId: values.data?.connector?.id }); + } + }, + }), + path: ['enterprise_search', 'content', 'view_index_logic'], + reducers: { + localSyncNowValue: [ + false, + { + apiSuccess: () => true, + fetchIndexSuccess: (_, index) => + isConnectorIndex(index) ? index.connector.sync_now : false, + }, + ], + }, + selectors: ({ selectors }) => ({ + index: [() => [selectors.data], (data) => (data ? indexToViewIndex(data) : undefined)], + ingestionMethod: [() => [selectors.data], (data) => getIngestionMethod(data)], + ingestionStatus: [() => [selectors.data], (data) => getIngestionStatus(data)], + isSyncing: [ + () => [selectors.syncStatus], + (syncStatus) => syncStatus === SyncStatus.IN_PROGRESS, + ], + isWaitingForSync: [ + () => [selectors.data, selectors.localSyncNowValue], + (data, localSyncNowValue) => data?.connector?.sync_now || localSyncNowValue, + ], + lastUpdated: [() => [selectors.data], (data) => getLastUpdated(data)], + syncStatus: [() => [selectors.data], (data) => data?.connector?.last_sync_status], + }), +}); diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/overview.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/overview.tsx index 7267f52680b2b..7ca27646d4c10 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/overview.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/overview.tsx @@ -13,6 +13,8 @@ import { EuiSpacer } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; +import { isApiIndex, isConnectorIndex, isCrawlerIndex } from '../../utils/indices'; + import { CrawlDetailsFlyout } from './crawler/crawl_details_flyout/crawl_details_flyout'; import { CrawlRequestsPanel } from './crawler/crawl_requests_panel/crawl_requests_panel'; import { CrawlerTotalStats } from './crawler_total_stats'; @@ -23,19 +25,15 @@ import { TotalStats } from './total_stats'; export const SearchIndexOverview: React.FC = () => { const { indexData } = useValues(OverviewLogic); - const isCrawler = typeof indexData?.crawler !== 'undefined'; - const isConnector = typeof indexData?.connector !== 'undefined'; - const isApi = !(isCrawler || isConnector); - return ( <> - {isCrawler ? ( + {isCrawlerIndex(indexData) ? ( ) : ( { } /> )} - {isApi && ( + {isApiIndex(indexData) && ( <> )} - {isCrawler && ( + {isCrawlerIndex(indexData) && ( <> diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/search_index.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/search_index.tsx index 786fec0b96adb..a614ced00040c 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/search_index.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/search_index.tsx @@ -20,6 +20,7 @@ import { generateEncodedPath } from '../../../shared/encode_path_params'; import { KibanaLogic } from '../../../shared/kibana'; import { FetchIndexApiLogic } from '../../api/index/fetch_index_api_logic'; import { SEARCH_INDEX_PATH, SEARCH_INDEX_TAB_PATH } from '../../routes'; +import { isConnectorIndex, isCrawlerIndex } from '../../utils/indices'; import { EnterpriseSearchContentPageTemplate } from '../layout/page_template'; import { baseBreadcrumbs } from '../search_indices'; @@ -125,8 +126,8 @@ export const SearchIndex: React.FC = () => { const tabs: EuiTabbedContentTab[] = [ ...ALL_INDICES_TABS, - ...(indexData?.connector ? CONNECTOR_TABS : []), - ...(indexData?.crawler ? CRAWLER_TABS : []), + ...(isConnectorIndex(indexData) ? CONNECTOR_TABS : []), + ...(isCrawlerIndex(indexData) ? CRAWLER_TABS : []), ]; const selectedTab = tabs.find((tab) => tab.id === tabId); @@ -151,14 +152,14 @@ export const SearchIndex: React.FC = () => { pageTitle: indexName, rightSideItems: [ ...headerActions, - ...(indexData?.crawler ? [] : []), + ...(isCrawlerIndex(indexData) ? [] : []), ], }} > <> {isCalloutVisible && } - {indexData?.crawler && } + {isCrawlerIndex(indexData) && } ); diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_indices/indices_logic.test.ts b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_indices/indices_logic.test.ts index 5680d8fe72244..b1dfd23cbfb4c 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_indices/indices_logic.test.ts +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_indices/indices_logic.test.ts @@ -9,6 +9,8 @@ import { LogicMounter, mockFlashMessageHelpers } from '../../../__mocks__/kea_lo import { indices } from '../../__mocks__/search_indices.mock'; +import { connectorIndex, elasticsearchViewIndices } from '../../__mocks__/view_index.mock'; + import moment from 'moment'; import { nextTick } from '@kbn/test-jest-helpers'; @@ -20,7 +22,9 @@ import { DEFAULT_META } from '../../../shared/constants'; import { FetchIndicesAPILogic } from '../../api/index/fetch_indices_api_logic'; -import { IndicesLogic, IngestionMethod, IngestionStatus, ViewSearchIndex } from './indices_logic'; +import { IngestionStatus } from '../../types'; + +import { IndicesLogic } from './indices_logic'; const DEFAULT_VALUES = { data: undefined, @@ -31,69 +35,6 @@ const DEFAULT_VALUES = { status: Status.IDLE, }; -const apiIndex: ViewSearchIndex = { - ingestionMethod: IngestionMethod.API, - ingestionStatus: IngestionStatus.CONNECTED, - lastUpdated: null, - name: 'api', - total: { - docs: { - count: 1, - deleted: 0, - }, - store: { size_in_bytes: '8024' }, - }, -}; -const connectorIndex: ViewSearchIndex = { - connector: { - api_key_id: null, - configuration: {}, - id: '2', - index_name: 'connector', - last_seen: null, - last_sync_error: null, - last_sync_status: SyncStatus.COMPLETED, - last_synced: null, - scheduling: { - enabled: false, - interval: '', - }, - service_type: null, - status: ConnectorStatus.CONFIGURED, - sync_now: false, - }, - ingestionMethod: IngestionMethod.CONNECTOR, - ingestionStatus: IngestionStatus.INCOMPLETE, - lastUpdated: 'never', - name: 'connector', - total: { - docs: { - count: 1, - deleted: 0, - }, - store: { size_in_bytes: '8024' }, - }, -}; -const crawlerIndex: ViewSearchIndex = { - crawler: { - id: '3', - index_name: 'crawler', - }, - ingestionMethod: IngestionMethod.CRAWLER, - ingestionStatus: IngestionStatus.INCOMPLETE, - lastUpdated: null, - name: 'crawler', - total: { - docs: { - count: 1, - deleted: 0, - }, - store: { size_in_bytes: '8024' }, - }, -}; - -const viewSearchIndices = [apiIndex, connectorIndex, crawlerIndex]; - describe('IndicesLogic', () => { const { mount: apiLogicMount } = new LogicMounter(FetchIndicesAPILogic); const { mount } = new LogicMounter(IndicesLogic); @@ -150,7 +91,7 @@ describe('IndicesLogic', () => { meta: newMeta, }, hasNoIndices: false, - indices: viewSearchIndices, + indices: elasticsearchViewIndices, isLoading: false, meta: newMeta, status: Status.SUCCESS, @@ -275,19 +216,19 @@ describe('IndicesLogic', () => { it('updates when apiSuccess listener triggered', () => { expect(IndicesLogic.values).toEqual(DEFAULT_VALUES); IndicesLogic.actions.apiSuccess({ - indices: viewSearchIndices, + indices: elasticsearchViewIndices, isInitialRequest: true, meta: DEFAULT_META, }); expect(IndicesLogic.values).toEqual({ data: { - indices: viewSearchIndices, + indices: elasticsearchViewIndices, isInitialRequest: true, meta: DEFAULT_META, }, hasNoIndices: false, - indices: viewSearchIndices, + indices: elasticsearchViewIndices, isLoading: false, meta: DEFAULT_META, status: Status.SUCCESS, @@ -300,9 +241,9 @@ describe('IndicesLogic', () => { IndicesLogic.actions.apiSuccess({ indices: [ { - ...indices[1], + ...connectorIndex, connector: { - ...indices[1].connector!, + ...connectorIndex.connector!, last_seen: lastSeen, status: ConnectorStatus.CONNECTED, }, @@ -316,9 +257,9 @@ describe('IndicesLogic', () => { data: { indices: [ { - ...indices[1], + ...connectorIndex, connector: { - ...indices[1].connector!, + ...connectorIndex.connector!, last_seen: lastSeen, status: ConnectorStatus.CONNECTED, }, @@ -349,8 +290,8 @@ describe('IndicesLogic', () => { IndicesLogic.actions.apiSuccess({ indices: [ { - ...indices[1], - connector: { ...indices[1].connector!, status: ConnectorStatus.CONNECTED }, + ...connectorIndex, + connector: { ...connectorIndex.connector, status: ConnectorStatus.CONNECTED }, }, ], isInitialRequest: true, @@ -361,8 +302,8 @@ describe('IndicesLogic', () => { data: { indices: [ { - ...indices[1], - connector: { ...indices[1].connector!, status: ConnectorStatus.CONNECTED }, + ...connectorIndex, + connector: { ...connectorIndex.connector, status: ConnectorStatus.CONNECTED }, }, ], isInitialRequest: true, @@ -389,8 +330,8 @@ describe('IndicesLogic', () => { IndicesLogic.actions.apiSuccess({ indices: [ { - ...indices[1], - connector: { ...indices[1].connector!, status: ConnectorStatus.ERROR }, + ...connectorIndex, + connector: { ...connectorIndex.connector!, status: ConnectorStatus.ERROR }, }, ], isInitialRequest: true, @@ -401,8 +342,8 @@ describe('IndicesLogic', () => { data: { indices: [ { - ...indices[1], - connector: { ...indices[1].connector!, status: ConnectorStatus.ERROR }, + ...connectorIndex, + connector: { ...connectorIndex.connector!, status: ConnectorStatus.ERROR }, }, ], isInitialRequest: true, @@ -426,9 +367,9 @@ describe('IndicesLogic', () => { IndicesLogic.actions.apiSuccess({ indices: [ { - ...indices[1], + ...connectorIndex, connector: { - ...indices[1].connector!, + ...connectorIndex.connector!, last_sync_status: SyncStatus.ERROR, status: ConnectorStatus.CONNECTED, }, @@ -442,9 +383,9 @@ describe('IndicesLogic', () => { data: { indices: [ { - ...indices[1], + ...connectorIndex, connector: { - ...indices[1].connector!, + ...connectorIndex.connector!, last_sync_status: SyncStatus.ERROR, status: ConnectorStatus.CONNECTED, }, diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_indices/indices_logic.ts b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_indices/indices_logic.ts index 02441da8e285d..0902eeadbb164 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_indices/indices_logic.ts +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_indices/indices_logic.ts @@ -6,72 +6,16 @@ */ import { kea, MakeLogicType } from 'kea'; -import moment from 'moment'; import { Meta } from '../../../../../common/types'; import { HttpError, Status } from '../../../../../common/types/api'; -import { ConnectorStatus, SyncStatus } from '../../../../../common/types/connectors'; import { ElasticsearchIndexWithIngestion } from '../../../../../common/types/indices'; import { DEFAULT_META } from '../../../shared/constants'; import { flashAPIErrors, clearFlashMessages } from '../../../shared/flash_messages'; import { updateMetaPageIndex } from '../../../shared/table_pagination'; import { FetchIndicesAPILogic } from '../../api/index/fetch_indices_api_logic'; - -export const enum IngestionMethod { - CONNECTOR, - CRAWLER, - API, -} - -export const enum IngestionStatus { - CONNECTED, - ERROR, - SYNC_ERROR, - INCOMPLETE, -} - -export interface ViewSearchIndex extends ElasticsearchIndexWithIngestion { - ingestionMethod: IngestionMethod; - ingestionStatus: IngestionStatus; - lastUpdated: Date | 'never' | null; -} - -function getIngestionMethod(index?: ElasticsearchIndexWithIngestion): IngestionMethod { - if (index?.connector) { - return IngestionMethod.CONNECTOR; - } - if (index?.crawler) { - return IngestionMethod.CRAWLER; - } - return IngestionMethod.API; -} - -function getIngestionStatus( - index: ElasticsearchIndexWithIngestion, - ingestionMethod: IngestionMethod -): IngestionStatus { - if (ingestionMethod === IngestionMethod.API) { - return IngestionStatus.CONNECTED; - } - if (ingestionMethod === IngestionMethod.CONNECTOR) { - if ( - index.connector?.last_seen && - moment(index.connector.last_seen).isBefore(moment().subtract(30, 'minutes')) - ) { - return IngestionStatus.ERROR; - } - if (index.connector?.last_sync_status === SyncStatus.ERROR) { - return IngestionStatus.SYNC_ERROR; - } - if (index.connector?.status === ConnectorStatus.CONNECTED) { - return IngestionStatus.CONNECTED; - } - if (index.connector?.status === ConnectorStatus.ERROR) { - return IngestionStatus.ERROR; - } - } - return IngestionStatus.INCOMPLETE; -} +import { ElasticsearchViewIndex } from '../../types'; +import { indexToViewIndex } from '../../utils/indices'; export interface IndicesActions { apiError(error: HttpError): HttpError; @@ -103,7 +47,7 @@ export interface IndicesActions { export interface IndicesValues { data: typeof FetchIndicesAPILogic.values.data; hasNoIndices: boolean; - indices: ViewSearchIndex[]; + indices: ElasticsearchViewIndex[]; isLoading: boolean; meta: Meta; status: typeof FetchIndicesAPILogic.values.status; @@ -149,15 +93,7 @@ export const IndicesLogic = kea>({ ], indices: [ () => [selectors.data], - (data) => - data?.indices - ? data.indices.map((index: ElasticsearchIndexWithIngestion) => ({ - ...index, - ingestionMethod: getIngestionMethod(index), - ingestionStatus: getIngestionStatus(index, getIngestionMethod(index)), - lastUpdated: index.connector ? index.connector.last_synced ?? 'never' : null, - })) - : [], + (data) => (data?.indices ? data.indices.map(indexToViewIndex) : []), ], isLoading: [ () => [selectors.status], diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_indices/indices_table.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_indices/indices_table.tsx index ec77e8f1a6ce3..c8b7f4283bcf0 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_indices/indices_table.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_indices/indices_table.tsx @@ -24,8 +24,8 @@ import { Meta } from '../../../../../common/types'; import { EuiLinkTo, EuiButtonIconTo } from '../../../shared/react_router_helpers'; import { convertMetaToPagination } from '../../../shared/table_pagination'; import { SEARCH_INDEX_PATH } from '../../routes'; - -import { ViewSearchIndex, IngestionMethod, IngestionStatus } from './indices_logic'; +import { ElasticsearchViewIndex, IngestionMethod, IngestionStatus } from '../../types'; +import { ingestionMethodToText } from '../../utils/indices'; const healthColorsMap = { green: 'success', @@ -34,29 +34,7 @@ const healthColorsMap = { yellow: 'warning', }; -function ingestionMethodToText(ingestionMethod: IngestionMethod) { - if (ingestionMethod === IngestionMethod.CONNECTOR) { - return i18n.translate( - 'xpack.enterpriseSearch.content.searchIndices.ingestionMethod.connector.label', - { - defaultMessage: 'Connector', - } - ); - } - if (ingestionMethod === IngestionMethod.CRAWLER) { - return i18n.translate( - 'xpack.enterpriseSearch.content.searchIndices.ingestionMethod.crawler.label', - { - defaultMessage: 'Crawler', - } - ); - } - return i18n.translate('xpack.enterpriseSearch.content.searchIndices.ingestionMethod.api.label', { - defaultMessage: 'API', - }); -} - -const columns: Array> = [ +const columns: Array> = [ { field: 'name', name: i18n.translate('xpack.enterpriseSearch.content.searchIndices.name.columnTitle', { @@ -207,10 +185,10 @@ const columns: Array> = [ ]; interface IndicesTableProps { - indices: ViewSearchIndex[]; + indices: ElasticsearchViewIndex[]; isLoading: boolean; meta: Meta; - onChange: (criteria: CriteriaWithPagination) => void; + onChange: (criteria: CriteriaWithPagination) => void; } export const IndicesTable: React.FC = ({ diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/types.ts b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/types.ts index 8ff7dc30f34ea..9120a3b055b61 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/types.ts +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/types.ts @@ -5,6 +5,35 @@ * 2.0. */ +import { ConnectorIndex, CrawlerIndex, ElasticsearchIndex } from '../../../common/types/indices'; + export interface Crawler { domains: []; } + +export const enum IngestionMethod { + CONNECTOR, + CRAWLER, + API, +} + +export const enum IngestionStatus { + CONNECTED, + ERROR, + SYNC_ERROR, + INCOMPLETE, +} + +interface ElasticsearchViewIndexExtension { + ingestionMethod: IngestionMethod; + ingestionStatus: IngestionStatus; + lastUpdated: string | 'never' | null; // date string +} + +export type ConnectorViewIndex = ConnectorIndex & ElasticsearchViewIndexExtension; + +export type CrawlerViewIndex = CrawlerIndex & ElasticsearchViewIndexExtension; + +export type ApiViewIndex = ElasticsearchIndex & ElasticsearchViewIndexExtension; + +export type ElasticsearchViewIndex = CrawlerViewIndex | ConnectorViewIndex | ApiViewIndex; diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/utils/indices.test.ts b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/utils/indices.test.ts new file mode 100644 index 0000000000000..e02f67964b764 --- /dev/null +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/utils/indices.test.ts @@ -0,0 +1,119 @@ +/* + * 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 { connectorIndex, crawlerIndex, apiIndex } from '../__mocks__/view_index.mock'; + +import moment from 'moment'; + +import { ConnectorStatus, SyncStatus } from '../../../../common/types/connectors'; +import { IngestionMethod, IngestionStatus } from '../types'; + +import { + getIngestionMethod, + getIngestionStatus, + getLastUpdated, + indexToViewIndex, +} from './indices'; + +describe('Indices util functions', () => { + describe('getIngestionMethod', () => { + it('should return correct ingestion method for connector', () => { + expect(getIngestionMethod(connectorIndex)).toEqual(IngestionMethod.CONNECTOR); + }); + it('should return correct ingestion method for crawler', () => { + expect(getIngestionMethod(crawlerIndex)).toEqual(IngestionMethod.CRAWLER); + }); + it('should return correct ingestion method for API', () => { + expect(getIngestionMethod(apiIndex)).toEqual(IngestionMethod.API); + }); + it('should return API for undefined index', () => { + expect(getIngestionMethod(undefined)).toEqual(IngestionMethod.API); + }); + }); + describe('getIngestionStatus', () => { + it('should return connected for API', () => { + expect(getIngestionStatus(apiIndex)).toEqual(IngestionStatus.CONNECTED); + }); + it('should return connected for undefined', () => { + expect(getIngestionStatus(undefined)).toEqual(IngestionStatus.CONNECTED); + }); + it('should return incomplete for incomplete connector', () => { + expect(getIngestionStatus(connectorIndex)).toEqual(IngestionStatus.INCOMPLETE); + }); + it('should return connected for complete connector', () => { + expect( + getIngestionStatus({ + ...connectorIndex, + connector: { ...connectorIndex.connector, status: ConnectorStatus.CONNECTED }, + }) + ).toEqual(IngestionStatus.CONNECTED); + }); + it('should return error for connector that last checked in more than 30 minutes ago', () => { + const lastSeen = moment().subtract(31, 'minutes').format(); + expect( + getIngestionStatus({ + ...connectorIndex, + connector: { + ...connectorIndex.connector, + last_seen: lastSeen, + status: ConnectorStatus.CONNECTED, + }, + }) + ).toEqual(IngestionStatus.ERROR); + }); + it('should return sync error for complete connector with sync error', () => { + expect( + getIngestionStatus({ + ...connectorIndex, + connector: { + ...connectorIndex.connector, + last_sync_status: SyncStatus.ERROR, + status: ConnectorStatus.NEEDS_CONFIGURATION, + }, + }) + ).toEqual(IngestionStatus.SYNC_ERROR); + }); + it('should return error for connector with error', () => { + expect( + getIngestionStatus({ + ...connectorIndex, + connector: { + ...connectorIndex.connector, + last_sync_status: SyncStatus.COMPLETED, + status: ConnectorStatus.ERROR, + }, + }) + ).toEqual(IngestionStatus.ERROR); + }); + }); + describe('getLastUpdated', () => { + it('should return never for connector with no last updated time', () => { + expect(getLastUpdated(connectorIndex)).toEqual('never'); + }); + it('should return last_synced for connector with no last updated time', () => { + expect( + getLastUpdated({ + ...connectorIndex, + connector: { ...connectorIndex.connector, last_synced: 'last_synced' }, + }) + ).toEqual('last_synced'); + }); + it('should return null for api', () => { + expect(getLastUpdated(apiIndex)).toEqual(null); + }); + }); + describe('indexToViewIndex', () => { + it('should apply above transformations to viewIndex', () => { + expect(indexToViewIndex(connectorIndex)).toEqual({ + ...connectorIndex, + ingestionMethod: getIngestionMethod(connectorIndex), + ingestionStatus: getIngestionStatus(connectorIndex), + lastUpdated: getLastUpdated(connectorIndex), + }); + }); + }); +}); diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/utils/indices.ts b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/utils/indices.ts new file mode 100644 index 0000000000000..30bf0fc2b5d51 --- /dev/null +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/utils/indices.ts @@ -0,0 +1,135 @@ +/* + * 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 moment from 'moment'; + +import { i18n } from '@kbn/i18n'; + +import { SyncStatus, ConnectorStatus } from '../../../../common/types/connectors'; +import { + ConnectorIndex, + CrawlerIndex, + ElasticsearchIndexWithIngestion, +} from '../../../../common/types/indices'; + +import { + ApiViewIndex, + ConnectorViewIndex, + CrawlerViewIndex, + ElasticsearchViewIndex, + IngestionMethod, + IngestionStatus, +} from '../types'; + +export function isConnectorIndex( + index: ElasticsearchIndexWithIngestion | undefined +): index is ConnectorIndex { + return !!(index as ConnectorIndex)?.connector; +} + +export function isCrawlerIndex( + index: ElasticsearchIndexWithIngestion | undefined +): index is CrawlerIndex { + return !!(index as CrawlerIndex)?.crawler; +} + +export function isApiIndex(index: ElasticsearchIndexWithIngestion | undefined): boolean { + if (!index) { + return false; + } + return !isConnectorIndex(index) && !isCrawlerIndex(index); +} + +export function isConnectorViewIndex(index: ElasticsearchViewIndex): index is ConnectorViewIndex { + return !!(index as ConnectorViewIndex)?.connector; +} + +export function isCrawlerViewIndex(index: ElasticsearchViewIndex): index is CrawlerViewIndex { + return !!(index as CrawlerViewIndex)?.crawler; +} + +export function isApiViewIndex(index: ElasticsearchViewIndex): index is ApiViewIndex { + return !!index && !isConnectorViewIndex(index) && !isCrawlerViewIndex(index); +} + +export function getIngestionMethod(index?: ElasticsearchIndexWithIngestion): IngestionMethod { + if (!index) return IngestionMethod.API; + if (isConnectorIndex(index)) { + return IngestionMethod.CONNECTOR; + } + if (isCrawlerIndex(index)) { + return IngestionMethod.CRAWLER; + } + return IngestionMethod.API; +} + +export function getIngestionStatus(index?: ElasticsearchIndexWithIngestion): IngestionStatus { + if (!index || isApiIndex(index)) { + return IngestionStatus.CONNECTED; + } + if (isConnectorIndex(index)) { + if ( + index.connector.last_seen && + moment(index.connector.last_seen).isBefore(moment().subtract(30, 'minutes')) + ) { + return IngestionStatus.ERROR; + } + if (index.connector.last_sync_status === SyncStatus.ERROR) { + return IngestionStatus.SYNC_ERROR; + } + if (index.connector.status === ConnectorStatus.CONNECTED) { + return IngestionStatus.CONNECTED; + } + if (index.connector.status === ConnectorStatus.ERROR) { + return IngestionStatus.ERROR; + } + } + return IngestionStatus.INCOMPLETE; +} + +export function getLastUpdated(index?: ElasticsearchIndexWithIngestion): string | null { + return isConnectorIndex(index) ? index.connector.last_synced ?? 'never' : null; +} + +export function indexToViewIndex(index: ConnectorIndex): ConnectorViewIndex; +export function indexToViewIndex(index: CrawlerIndex): CrawlerViewIndex; +export function indexToViewIndex(index: ElasticsearchIndexWithIngestion): ApiViewIndex { + const extraFields = { + ingestionMethod: getIngestionMethod(index), + ingestionStatus: getIngestionStatus(index), + lastUpdated: getLastUpdated(index), + }; + if (isConnectorIndex(index)) { + const connectorResult: ConnectorViewIndex = { ...index, ...extraFields }; + return connectorResult; + } + if (isCrawlerIndex(index)) { + const crawlerResult: CrawlerViewIndex = { ...index, ...extraFields }; + return crawlerResult; + } + const apiResult: ApiViewIndex = { ...index, ...extraFields }; + return apiResult; +} + +export function ingestionMethodToText(ingestionMethod: IngestionMethod) { + if (ingestionMethod === IngestionMethod.CONNECTOR) { + return i18n.translate( + 'xpack.enterpriseSearch.content.searchIndices.ingestionMethod.connector', + { + defaultMessage: 'Connector', + } + ); + } + if (ingestionMethod === IngestionMethod.CRAWLER) { + return i18n.translate('xpack.enterpriseSearch.content.searchIndices.ingestionMethod.crawler', { + defaultMessage: 'Crawler', + }); + } + return i18n.translate('xpack.enterpriseSearch.content.searchIndices.ingestionMethod.api', { + defaultMessage: 'API', + }); +} diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/license_callout/constants.ts b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/license_callout/constants.ts index f51eeb1c8160c..c8db1dd9b1943 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/license_callout/constants.ts +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/license_callout/constants.ts @@ -9,5 +9,5 @@ import { i18n } from '@kbn/i18n'; export const LICENSE_CALLOUT_BODY = i18n.translate('xpack.enterpriseSearch.licenseCalloutBody', { defaultMessage: - 'Enterprise authentication via SAML, document-level permission and authorization support, custom search experiences and more are available with a valid Platinum license.', + 'Enterprise authentication via SAML, document-level permission and authorization support, custom search experiences and more are available with a valid Premium license.', }); diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/license_callout/license_callout.test.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/license_callout/license_callout.test.tsx index 746a681452973..3d4723638c60c 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/license_callout/license_callout.test.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/license_callout/license_callout.test.tsx @@ -11,23 +11,22 @@ import React from 'react'; import { shallow } from 'enzyme'; -import { EuiPanel, EuiText } from '@elastic/eui'; - -import { ManageLicenseButton } from '../../../shared/licensing'; +import { EuiPanel } from '@elastic/eui'; import { LicenseCallout } from '.'; +// TODO: Remove this license callout code completely (eventually) +// for now, the test is merely updated to reflect that it shouldn't +// render at all describe('LicenseCallout', () => { - it('renders when non-platinum or on trial', () => { + it('never renders a license callout', () => { setMockValues({ hasPlatinumLicense: false, isTrial: true, }); const wrapper = shallow(); - expect(wrapper.find(EuiPanel)).toHaveLength(1); - expect(wrapper.find(EuiText)).toHaveLength(2); - expect(wrapper.find(ManageLicenseButton)).toHaveLength(1); + expect(wrapper.find(EuiPanel)).toHaveLength(0); }); it('does not render for platinum', () => { diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/license_callout/license_callout.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/license_callout/license_callout.tsx index 0611c5f5ca7a3..2fff9c66eec09 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/license_callout/license_callout.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/license_callout/license_callout.tsx @@ -9,7 +9,7 @@ import React from 'react'; import { useValues } from 'kea'; -import { EuiPanel, EuiFlexGroup, EuiFlexItem, EuiText } from '@elastic/eui'; +import { EuiFlexGroup, EuiFlexItem, EuiSpacer, EuiText, EuiTitle } from '@elastic/eui'; import { LicensingLogic, ManageLicenseButton } from '../../../shared/licensing'; @@ -23,19 +23,18 @@ export const LicenseCallout: React.FC = () => { if (hasPlatinumLicense && !isTrial) return null; return ( - - - - -

{PRODUCT_SELECTOR_CALLOUT_HEADING}

-
- {LICENSE_CALLOUT_BODY} -
- - - - -
-
+ + + +

{PRODUCT_SELECTOR_CALLOUT_HEADING}

+
+ + {LICENSE_CALLOUT_BODY} +
+ + + + +
); }; diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/product_card/product_card.scss b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/product_card/product_card.scss index 26b974f4c84d4..81c3b9600a837 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/product_card/product_card.scss +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/product_card/product_card.scss @@ -6,10 +6,7 @@ */ .productCard { - &__imageContainer { - @include euiBreakpoint('xs') { - max-height: 115px; - overflow: hidden; - } + & &-features { + padding-top: 1.5rem; } } diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/product_card/product_card.test.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/product_card/product_card.test.tsx index e19f731611d01..acac9b2df20de 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/product_card/product_card.test.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/product_card/product_card.test.tsx @@ -5,67 +5,83 @@ * 2.0. */ -import { setMockValues, mockTelemetryActions } from '../../../__mocks__/kea_logic'; +import { mockTelemetryActions } from '../../../__mocks__/kea_logic'; import React from 'react'; import { shallow } from 'enzyme'; -import { EuiCard } from '@elastic/eui'; - -import { APP_SEARCH_PLUGIN, WORKPLACE_SEARCH_PLUGIN } from '../../../../../common/constants'; -import { EuiButtonTo } from '../../../shared/react_router_helpers'; - -import { ProductCard } from '.'; +import { snakeCase } from 'lodash'; + +import { EuiListGroup, EuiPanel } from '@elastic/eui'; + +import { EuiButtonTo, EuiButtonEmptyTo } from '../../../shared/react_router_helpers'; + +import { ProductCard, ProductCardProps } from './product_card'; + +const MOCK_VALUES: ProductCardProps = { + cta: 'Click me', + description: 'Mock description', + features: ['first feature', 'second feature'], + icon: 'logoElasticsearch', + name: 'Mock product', + productId: 'mockProduct', + resourceLinks: [ + { + label: 'Link one', + to: 'https://www.elastic.co/guide/one', + }, + { + label: 'Link twwo', + to: 'https://www.elastic.co/guide/two', + }, + ], + url: '/app/mock_app', +}; describe('ProductCard', () => { beforeEach(() => { jest.clearAllMocks(); }); - it('renders an App Search card', () => { - const wrapper = shallow(); - const card = wrapper.find(EuiCard).dive().shallow(); + it('renders a product card', () => { + const wrapper = shallow(); + const card = wrapper.find(EuiPanel); - expect(card.find('h2').text()).toEqual('Elastic App Search'); - expect(card.find('.productCard__image').prop('src')).toEqual('as.jpg'); + expect(card.find('h3').text()).toEqual(MOCK_VALUES.name); + expect(card.find(EuiListGroup).children()).toHaveLength(MOCK_VALUES.features.length); + expect(card.find('[data-test-subj="productCard-resources"]').text()).toEqual('Resources'); + expect(card.find('[data-test-subj="productCard-resourceLinks"]').children()).toHaveLength( + MOCK_VALUES.resourceLinks.length + ); - const button = card.find(EuiButtonTo); - expect(button.prop('to')).toEqual('/app/enterprise_search/app_search'); - expect(button.prop('children')).toEqual('Open App Search'); + const button = card.find(EuiButtonEmptyTo); + + expect(button).toHaveLength(1); + expect(button.prop('to')).toEqual(MOCK_VALUES.url); + expect(card.find(EuiButtonTo)).toHaveLength(0); button.simulate('click'); + expect(mockTelemetryActions.sendEnterpriseSearchTelemetry).toHaveBeenCalledWith({ action: 'clicked', - metric: 'app_search', + metric: snakeCase(MOCK_VALUES.productId), }); }); - it('renders a Workplace Search card', () => { - const wrapper = shallow(); - const card = wrapper.find(EuiCard).dive().shallow(); - - expect(card.find('h2').text()).toEqual('Elastic Workplace Search'); - expect(card.find('.productCard__image').prop('src')).toEqual('ws.jpg'); - + it('renders an empty cta', () => { + const wrapper = shallow(); + const card = wrapper.find(EuiPanel); const button = card.find(EuiButtonTo); - expect(button.prop('to')).toEqual('/app/enterprise_search/workplace_search'); - expect(button.prop('children')).toEqual('Open Workplace Search'); + + expect(button).toHaveLength(1); + expect(button.prop('to')).toEqual(MOCK_VALUES.url); + expect(card.find(EuiButtonEmptyTo)).toHaveLength(0); button.simulate('click'); expect(mockTelemetryActions.sendEnterpriseSearchTelemetry).toHaveBeenCalledWith({ action: 'clicked', - metric: 'workplace_search', + metric: snakeCase(MOCK_VALUES.productId), }); }); - - it('renders correct button text when host not present', () => { - setMockValues({ config: { host: '' } }); - - const wrapper = shallow(); - const card = wrapper.find(EuiCard).dive().shallow(); - const button = card.find(EuiButtonTo); - - expect(button.prop('children')).toEqual('Set up Workplace Search'); - }); }); diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/product_card/product_card.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/product_card/product_card.tsx index 33b7658788f62..c58318e2a96e2 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/product_card/product_card.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/product_card/product_card.tsx @@ -7,81 +7,147 @@ import React from 'react'; -import { useValues, useActions } from 'kea'; +import { useActions } from 'kea'; import { snakeCase } from 'lodash'; -import { EuiCard, EuiTextColor } from '@elastic/eui'; +import { + EuiFlexGroup, + EuiFlexItem, + EuiIcon, + EuiLink, + EuiListGroup, + EuiListGroupItem, + EuiPanel, + EuiSpacer, + EuiText, + EuiTitle, + IconType, +} from '@elastic/eui'; + import { i18n } from '@kbn/i18n'; -import { KibanaLogic } from '../../../shared/kibana'; -import { EuiButtonTo } from '../../../shared/react_router_helpers'; +import { EuiButtonTo, EuiButtonEmptyTo } from '../../../shared/react_router_helpers'; import { TelemetryLogic } from '../../../shared/telemetry'; import './product_card.scss'; -interface ProductCardProps { - // Expects product plugin constants (@see common/constants.ts) - product: { - ID: string; - NAME: string; - CARD_DESCRIPTION: string; - URL: string; - }; - image: string; - url?: string; +interface ProductResourceLink { + label: string; + to: string; } -export const ProductCard: React.FC = ({ product, image, url }) => { - const { sendEnterpriseSearchTelemetry } = useActions(TelemetryLogic); - const { config } = useValues(KibanaLogic); - - const LAUNCH_BUTTON_TEXT = i18n.translate( - 'xpack.enterpriseSearch.overview.productCard.launchButton', - { - defaultMessage: 'Open {productName}', - values: { productName: product.NAME }, - } - ); +export interface ProductCardProps { + cta: string; + description: string; + emptyCta?: boolean; + features: string[]; + icon: IconType; + name: string; + productId: string; + resourceLinks: ProductResourceLink[]; + url: string; +} - const SETUP_BUTTON_TEXT = i18n.translate( - 'xpack.enterpriseSearch.overview.productCard.setupButton', - { - defaultMessage: 'Set up {productName}', - values: { productName: product.NAME }, - } - ); +export const ProductCard: React.FC = ({ + cta, + description, + emptyCta = false, + features, + icon, + productId, + name, + resourceLinks, + url, +}) => { + const { sendEnterpriseSearchTelemetry } = useActions(TelemetryLogic); return ( - - -
- } + {product.CARD_DESCRIPTION}} - footer={ - - sendEnterpriseSearchTelemetry({ - action: 'clicked', - metric: snakeCase(product.ID), - }) - } - > - {config.host ? LAUNCH_BUTTON_TEXT : SETUP_BUTTON_TEXT} - - } - data-test-subj={`${product.ID}ProductCard`} - /> + data-test-subj={`${productId}ProductCard`} + className="productCard" + > + + + + + + +

{name}

+
+ + + {description} + + +
+ {emptyCta ? ( + + sendEnterpriseSearchTelemetry({ + action: 'clicked', + metric: snakeCase(productId), + }) + } + > + {cta} + + ) : ( + + sendEnterpriseSearchTelemetry({ + action: 'clicked', + metric: snakeCase(productId), + }) + } + > + {cta} + + )} +
+
+ + + {features.map((item: string, index: number) => ( + } + /> + ))} + + + + +

+ {i18n.translate('xpack.enterpriseSearch.productCard.resourcesTitle', { + defaultMessage: 'Resources', + })} +

+
+ + + {resourceLinks.map((resource, index) => ( + + + {resource.label} + + + ))} + +
+
+
); }; diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/product_selector/product_selector.test.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/product_selector/product_selector.test.tsx index 0a6b331b36540..c090b79445e13 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/product_selector/product_selector.test.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/product_selector/product_selector.test.tsx @@ -15,8 +15,6 @@ import { EuiEmptyPrompt } from '@elastic/eui'; import { WORKPLACE_SEARCH_PLUGIN } from '../../../../../common/constants'; -import { ElasticsearchCard } from '../elasticsearch_card'; -import { LicenseCallout } from '../license_callout'; import { ProductCard } from '../product_card'; import { SetupGuideCta } from '../setup_guide'; import { TrialCallout } from '../trial_callout'; @@ -33,10 +31,8 @@ describe('ProductSelector', () => { setMockValues({ config: { host: '' } }); const wrapper = shallow(); - expect(wrapper.find(ProductCard)).toHaveLength(2); + expect(wrapper.find(ProductCard)).toHaveLength(3); expect(wrapper.find(SetupGuideCta)).toHaveLength(1); - expect(wrapper.find(LicenseCallout)).toHaveLength(0); - expect(wrapper.find(ElasticsearchCard)).toHaveLength(1); }); it('renders the trial callout', () => { @@ -60,15 +56,6 @@ describe('ProductSelector', () => { setMockValues({ config: { host: 'localhost' } }); }); - it('renders the license callout when user has access to a product', () => { - setMockValues({ config: { host: 'localhost' } }); - const wrapper = shallow( - - ); - - expect(wrapper.find(LicenseCallout)).toHaveLength(1); - }); - it('does not render the App Search card if the user does not have access to AS', () => { const wrapper = shallow( { /> ); - expect(wrapper.find(ProductCard)).toHaveLength(1); - expect(wrapper.find(ProductCard).prop('product').ID).toEqual('workplaceSearch'); + expect(wrapper.find(ProductCard)).toHaveLength(2); + expect(wrapper.find('[data-test-subj="productCard-workplaceSearch"]')).toHaveLength(1); + expect(wrapper.find('[data-test-subj="productCard-elasticsearch"]')).toHaveLength(1); }); it('does not render the Workplace Search card if the user does not have access to WS', () => { @@ -89,8 +77,9 @@ describe('ProductSelector', () => { /> ); - expect(wrapper.find(ProductCard)).toHaveLength(1); - expect(wrapper.find(ProductCard).prop('product').ID).toEqual('appSearch'); + expect(wrapper.find(ProductCard)).toHaveLength(2); + expect(wrapper.find('[data-test-subj="productCard-appSearch"]')).toHaveLength(1); + expect(wrapper.find('[data-test-subj="productCard-elasticsearch"]')).toHaveLength(1); }); it('renders empty prompt and no cards or license callout if the user does not have access', () => { @@ -98,8 +87,6 @@ describe('ProductSelector', () => { expect(wrapper.find(EuiEmptyPrompt)).toHaveLength(1); expect(wrapper.find(ProductCard)).toHaveLength(0); - expect(wrapper.find(LicenseCallout)).toHaveLength(0); - expect(wrapper.find(ElasticsearchCard)).toHaveLength(0); }); }); }); diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/product_selector/product_selector.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/product_selector/product_selector.tsx index b958fb3925d4e..e5fd87d12f2fa 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/product_selector/product_selector.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/components/product_selector/product_selector.tsx @@ -17,28 +17,23 @@ import { EuiImage, EuiLink, EuiSpacer, - EuiText, EuiTitle, } from '@elastic/eui'; import { Chat } from '@kbn/cloud-plugin/public'; import { i18n } from '@kbn/i18n'; import { - KibanaPageTemplateSolutionNavAvatar, - NO_DATA_PAGE_TEMPLATE_PROPS, -} from '@kbn/kibana-react-plugin/public'; - -import { APP_SEARCH_PLUGIN, WORKPLACE_SEARCH_PLUGIN } from '../../../../../common/constants'; + APP_SEARCH_PLUGIN, + ELASTICSEARCH_PLUGIN, + WORKPLACE_SEARCH_PLUGIN, +} from '../../../../../common/constants'; +import { AddContentEmptyPrompt } from '../../../shared/add_content_empty_prompt'; import { docLinks } from '../../../shared/doc_links'; import { KibanaLogic } from '../../../shared/kibana'; import { SetEnterpriseSearchChrome as SetPageChrome } from '../../../shared/kibana_chrome'; import { SendEnterpriseSearchTelemetry as SendTelemetry } from '../../../shared/telemetry'; -import AppSearchImage from '../../assets/app_search.png'; -import WorkplaceSearchImage from '../../assets/workplace_search.png'; -import { ElasticsearchCard } from '../elasticsearch_card'; import { EnterpriseSearchOverviewPageTemplate } from '../layout'; -import { LicenseCallout } from '../license_callout'; import { ProductCard } from '../product_card'; import { SetupGuideCta } from '../setup_guide'; import { TrialCallout } from '../trial_callout'; @@ -74,30 +69,236 @@ export const ProductSelector: React.FC = ({ const productCards = ( <> - - + - - + + +

+ {i18n.translate('xpack.enterpriseSearch.overview.productSelector.title', { + defaultMessage: 'Search experiences for every use case', + })} +

+
+ + + + + {shouldShowAppSearchCard && ( - - + + )} {shouldShowWorkplaceSearchCard && ( - + )} - - - - {config.host ? : } + {!config.host && } ); @@ -152,38 +353,17 @@ export const ProductSelector: React.FC = ({ /> ); return ( - + - - - - - - -

- {i18n.translate('xpack.enterpriseSearch.overview.heading', { - defaultMessage: 'Welcome to Elastic Enterprise Search', - })} -

-

- {config.host - ? i18n.translate('xpack.enterpriseSearch.overview.subheading', { - defaultMessage: 'Add search to your app or organization.', - }) - : i18n.translate('xpack.enterpriseSearch.overview.setupHeading', { - defaultMessage: 'Choose a product to set up and get started.', - })} -

-
-
-
- {shouldShowEnterpriseSearchCards ? productCards : insufficientAccessMessage}
diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/constants.ts b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/constants.ts index 3ab00cdd27e72..f702452cacc36 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/constants.ts +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/constants.ts @@ -10,6 +10,6 @@ import { i18n } from '@kbn/i18n'; export const PRODUCT_SELECTOR_CALLOUT_HEADING = i18n.translate( 'xpack.enterpriseSearch.productSelectorCalloutTitle', { - defaultMessage: 'Enterprise-grade features for teams big and small', + defaultMessage: 'Upgrade to get enterprise-level features for your team', } ); diff --git a/x-pack/plugins/enterprise_search/public/applications/shared/add_content_empty_prompt/add_content_empty_prompt.scss b/x-pack/plugins/enterprise_search/public/applications/shared/add_content_empty_prompt/add_content_empty_prompt.scss index c0fafb151174d..88f5fa86be148 100644 --- a/x-pack/plugins/enterprise_search/public/applications/shared/add_content_empty_prompt/add_content_empty_prompt.scss +++ b/x-pack/plugins/enterprise_search/public/applications/shared/add_content_empty_prompt/add_content_empty_prompt.scss @@ -2,6 +2,4 @@ @include euiBreakpoint('xs','s') { flex-direction: column-reverse; } - - border-bottom: $euiBorderThin; } diff --git a/x-pack/plugins/enterprise_search/public/applications/shared/add_content_empty_prompt/add_content_empty_prompt.tsx b/x-pack/plugins/enterprise_search/public/applications/shared/add_content_empty_prompt/add_content_empty_prompt.tsx index 6025fbbdb96c0..e026271fd4f85 100644 --- a/x-pack/plugins/enterprise_search/public/applications/shared/add_content_empty_prompt/add_content_empty_prompt.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/shared/add_content_empty_prompt/add_content_empty_prompt.tsx @@ -19,29 +19,39 @@ import { EuiTitle, EuiText, EuiSpacer, + useEuiTheme, } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { ENTERPRISE_SEARCH_CONTENT_PLUGIN } from '../../../../common/constants'; +import welcomeGraphicDark from '../../../assets/images/welcome_dark.svg'; +import welcomeGraphicLight from '../../../assets/images/welcome_light.svg'; import { NEW_INDEX_PATH } from '../../enterprise_search_content/routes'; import { EuiLinkTo } from '../react_router_helpers'; -import searchIndicesIllustration from './search_indices.svg'; import './add_content_empty_prompt.scss'; -export const AddContentEmptyPrompt: React.FC = () => { +interface EmptyPromptProps { + title?: string; + buttonLabel?: string; +} + +export const AddContentEmptyPrompt: React.FC = ({ title, buttonLabel }) => { + const { colorMode } = useEuiTheme(); + return ( - +

- {i18n.translate('xpack.enterpriseSearch.overview.emptyState.heading', { - defaultMessage: 'Add content to Enterprise Search', - })} + {title || + i18n.translate('xpack.enterpriseSearch.overview.emptyState.heading', { + defaultMessage: 'Add content to Enterprise Search', + })}

@@ -49,7 +59,13 @@ export const AddContentEmptyPrompt: React.FC = () => {

{i18n.translate('xpack.enterpriseSearch.emptyState.description', { defaultMessage: - "Data you add in Enterprise Search is called a Search index and it's searchable in both App and Workplace Search. Now you can use your connectors in App Search and your web crawlers in Workplace Search.", + 'You can now easily create and add content to Elasticsearch indices with Enterprise Search - including website content with the Elastic Web Crawler or third-party data sources with Custom Connectors.', + })} +

+

+ {i18n.translate('xpack.enterpriseSearch.emptyState.description.line2', { + defaultMessage: + "Whether you're building a search experience with App Search or Elasticsearch, you can now get started here.", })}

@@ -62,9 +78,10 @@ export const AddContentEmptyPrompt: React.FC = () => { shouldNotCreateHref > - {i18n.translate('xpack.enterpriseSearch.overview.emptyState.buttonTitle', { - defaultMessage: 'Add content to Enterprise Search', - })} + {buttonLabel || + i18n.translate('xpack.enterpriseSearch.overview.emptyState.buttonTitle', { + defaultMessage: 'Add content to Enterprise Search', + })}
@@ -82,9 +99,9 @@ export const AddContentEmptyPrompt: React.FC = () => {
( - + <>

{i18n.translate('xpack.enterpriseSearch.overview.elasticsearchResources.title', { @@ -53,5 +53,5 @@ export const ElasticsearchResources: React.FC = () => ( defaultMessage: 'Search UI for Elasticsearch', })} - + ); diff --git a/x-pack/plugins/enterprise_search/public/applications/shared/getting_started_steps/getting_started_steps.test.tsx b/x-pack/plugins/enterprise_search/public/applications/shared/getting_started_steps/getting_started_steps.test.tsx index 7cf92dab0aa22..88e80a3a6f182 100644 --- a/x-pack/plugins/enterprise_search/public/applications/shared/getting_started_steps/getting_started_steps.test.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/shared/getting_started_steps/getting_started_steps.test.tsx @@ -44,15 +44,15 @@ describe('GettingStartedSteps', () => { ...rest, })); - expect(steps[0].title).toEqual('Add your documents and data to Enterprise Search'); + expect(steps[0].title).toEqual('Select or create an Elasticsearch index'); expect(steps[0].status).toEqual('current'); expect(steps[0].children.find(IconRow).length).toEqual(1); - expect(steps[1].title).toEqual('Build a search experience'); + expect(steps[1].title).toEqual('Assign your index to an App Search engine'); expect(steps[1].status).toEqual('incomplete'); expect(steps[1].children.find(EuiLinkTo).prop('to')).toEqual(ELASTICSEARCH_PLUGIN.URL); - expect(steps[2].title).toEqual('Tune your search relevance'); + expect(steps[2].title).toEqual('Build a client-side search experience with Search UI'); expect(steps[2].status).toEqual('incomplete'); }); }); diff --git a/x-pack/plugins/enterprise_search/public/applications/shared/getting_started_steps/getting_started_steps.tsx b/x-pack/plugins/enterprise_search/public/applications/shared/getting_started_steps/getting_started_steps.tsx index bf389f8b81581..ec884cfa9c2ef 100644 --- a/x-pack/plugins/enterprise_search/public/applications/shared/getting_started_steps/getting_started_steps.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/shared/getting_started_steps/getting_started_steps.tsx @@ -29,17 +29,17 @@ export const GettingStartedSteps: React.FC = ({ step = { title: i18n.translate( 'xpack.enterpriseSearch.overview.gettingStartedSteps.addData.title', - { defaultMessage: 'Add your documents and data to Enterprise Search' } + { defaultMessage: 'Select or create an Elasticsearch index' } ), children: ( <> - +

{i18n.translate( 'xpack.enterpriseSearch.overview.gettingStartedSteps.addData.message', { defaultMessage: - 'Get started by adding your data to Enterprise Search. You can use the Elastic Web Crawler, API endpoints, existing Elasticsearch indices or third party connectors like Google Drive, Microsoft Sharepoint and more.', + 'Get started by adding your data to Enterprise Search. You can use the Elastic Web Crawler, API endpoints, existing Elasticsearch indices , or third-party connectors like Google Drive, Microsoft Sharepoint and more.', } )}

@@ -53,17 +53,17 @@ export const GettingStartedSteps: React.FC = ({ step = { title: i18n.translate( 'xpack.enterpriseSearch.overview.gettingStartedSteps.buildSearchExperience.title', - { defaultMessage: 'Build a search experience' } + { defaultMessage: 'Assign your index to an App Search engine' } ), children: ( <> - +

{i18n.translate( 'xpack.enterpriseSearch.overview.gettingStartedSteps.buildSearchExperience.message', { defaultMessage: - 'You can use Search Engines to build customized search experiences for your customers or internal teams with App Search or Workplace Search. Or you can use Search UI to connect directly to an Elasticsearch index to build client-side search experinces for your users.', + 'You can use search engines to build customizable search experiences for your customers with App Search.', } )}

@@ -88,16 +88,16 @@ export const GettingStartedSteps: React.FC = ({ step = { title: i18n.translate( 'xpack.enterpriseSearch.overview.gettingStartedSteps.tuneSearchExperience.title', - { defaultMessage: 'Tune your search relevance' } + { defaultMessage: 'Build a client-side search experience with Search UI' } ), children: ( - +

{i18n.translate( 'xpack.enterpriseSearch.overview.gettingStartedSteps.tuneSearchExperience.message', { defaultMessage: - "Dive into analytics and tune the result settings to help your users find exactly what they're looking for", + 'Take full control over your client-side search experience by building with the Search UI library. Connect directly to App Search or Elasticsearch.', } )}

diff --git a/x-pack/plugins/enterprise_search/public/applications/shared/licensing/manage_license_button.tsx b/x-pack/plugins/enterprise_search/public/applications/shared/licensing/manage_license_button.tsx index d0fe98a7c1393..fc2984783ffd8 100644 --- a/x-pack/plugins/enterprise_search/public/applications/shared/licensing/manage_license_button.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/shared/licensing/manage_license_button.tsx @@ -21,7 +21,12 @@ export const ManageLicenseButton: React.FC = (props) => { const { canManageLicense } = useValues(LicensingLogic); return canManageLicense ? ( - + {i18n.translate('xpack.enterpriseSearch.licenseManagementLink', { defaultMessage: 'Manage your license', })} diff --git a/x-pack/plugins/enterprise_search/public/assets/images/welcome_dark.svg b/x-pack/plugins/enterprise_search/public/assets/images/welcome_dark.svg new file mode 100644 index 0000000000000..203154c5a11f0 --- /dev/null +++ b/x-pack/plugins/enterprise_search/public/assets/images/welcome_dark.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/x-pack/plugins/enterprise_search/public/assets/images/welcome_light.svg b/x-pack/plugins/enterprise_search/public/assets/images/welcome_light.svg new file mode 100644 index 0000000000000..0e5dc587ae17c --- /dev/null +++ b/x-pack/plugins/enterprise_search/public/assets/images/welcome_light.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/x-pack/plugins/enterprise_search/server/index_management/setup_indices.test.ts b/x-pack/plugins/enterprise_search/server/index_management/setup_indices.test.ts index 8e9376ecc19c6..3a3354335e109 100644 --- a/x-pack/plugins/enterprise_search/server/index_management/setup_indices.test.ts +++ b/x-pack/plugins/enterprise_search/server/index_management/setup_indices.test.ts @@ -72,7 +72,7 @@ describe('Setup Indices', () => { }, indexed_document_count: { type: 'integer' }, status: { - type: 'object', + type: 'keyword', }, worker_hostname: { type: 'keyword' }, }, diff --git a/x-pack/plugins/enterprise_search/server/index_management/setup_indices.ts b/x-pack/plugins/enterprise_search/server/index_management/setup_indices.ts index 5f911c8536701..a8b4f7a1a14af 100644 --- a/x-pack/plugins/enterprise_search/server/index_management/setup_indices.ts +++ b/x-pack/plugins/enterprise_search/server/index_management/setup_indices.ts @@ -78,7 +78,7 @@ const indices: IndexDefinition[] = [ }, indexed_document_count: { type: 'integer' }, status: { - type: 'object', + type: 'keyword', }, worker_hostname: { type: 'keyword' }, }, diff --git a/x-pack/plugins/enterprise_search/server/lib/connectors/add_connector.test.ts b/x-pack/plugins/enterprise_search/server/lib/connectors/add_connector.test.ts index 21f5d6accac73..f458e95b9c114 100644 --- a/x-pack/plugins/enterprise_search/server/lib/connectors/add_connector.test.ts +++ b/x-pack/plugins/enterprise_search/server/lib/connectors/add_connector.test.ts @@ -46,13 +46,17 @@ describe('addConnector lib function', () => { (fetchConnectorByIndexName as jest.Mock).mockImplementation(() => undefined); await expect( - addConnector(mockClient as unknown as IScopedClusterClient, { index_name: 'index_name' }) + addConnector(mockClient as unknown as IScopedClusterClient, { + index_name: 'index_name', + language: 'en', + }) ).resolves.toEqual({ id: 'fakeId', index_name: 'index_name' }); expect(mockClient.asCurrentUser.index).toHaveBeenCalledWith({ document: { api_key_id: null, configuration: {}, index_name: 'index_name', + language: 'en', last_seen: null, last_sync_error: null, last_sync_status: null, @@ -73,7 +77,10 @@ describe('addConnector lib function', () => { (fetchConnectorByIndexName as jest.Mock).mockImplementation(() => undefined); await expect( - addConnector(mockClient as unknown as IScopedClusterClient, { index_name: 'index_name' }) + addConnector(mockClient as unknown as IScopedClusterClient, { + index_name: 'index_name', + language: 'en', + }) ).rejects.toEqual(new Error(ErrorCode.INDEX_ALREADY_EXISTS)); expect(mockClient.asCurrentUser.indices.create).not.toHaveBeenCalled(); }); @@ -84,7 +91,10 @@ describe('addConnector lib function', () => { (fetchConnectorByIndexName as jest.Mock).mockImplementation(() => true); await expect( - addConnector(mockClient as unknown as IScopedClusterClient, { index_name: 'index_name' }) + addConnector(mockClient as unknown as IScopedClusterClient, { + index_name: 'index_name', + language: 'en', + }) ).rejects.toEqual(new Error(ErrorCode.CONNECTOR_DOCUMENT_ALREADY_EXISTS)); expect(mockClient.asCurrentUser.indices.create).not.toHaveBeenCalled(); }); @@ -95,7 +105,10 @@ describe('addConnector lib function', () => { (fetchConnectorByIndexName as jest.Mock).mockImplementation(() => true); await expect( - addConnector(mockClient as unknown as IScopedClusterClient, { index_name: 'index_name' }) + addConnector(mockClient as unknown as IScopedClusterClient, { + index_name: 'index_name', + language: 'en', + }) ).rejects.toEqual(new Error(ErrorCode.INDEX_ALREADY_EXISTS)); expect(mockClient.asCurrentUser.indices.create).not.toHaveBeenCalled(); }); @@ -109,6 +122,7 @@ describe('addConnector lib function', () => { addConnector(mockClient as unknown as IScopedClusterClient, { delete_existing_connector: true, index_name: 'index_name', + language: null, }) ).resolves.toEqual({ id: 'fakeId', index_name: 'index_name' }); expect(mockClient.asCurrentUser.delete).toHaveBeenCalledWith({ @@ -120,6 +134,7 @@ describe('addConnector lib function', () => { api_key_id: null, configuration: {}, index_name: 'index_name', + language: null, last_seen: null, last_sync_error: null, last_sync_status: null, @@ -144,7 +159,10 @@ describe('addConnector lib function', () => { mockClient.asCurrentUser.indices.exists.mockImplementation(() => false); (fetchConnectorByIndexName as jest.Mock).mockImplementation(() => false); await expect( - addConnector(mockClient as unknown as IScopedClusterClient, { index_name: 'index_name' }) + addConnector(mockClient as unknown as IScopedClusterClient, { + index_name: 'index_name', + language: 'en', + }) ).resolves.toEqual({ id: 'fakeId', index_name: 'index_name' }); expect(setupConnectorsIndices as jest.Mock).toHaveBeenCalledWith(mockClient.asCurrentUser); expect(mockClient.asCurrentUser.index).toHaveBeenCalledWith({ @@ -152,6 +170,7 @@ describe('addConnector lib function', () => { api_key_id: null, configuration: {}, index_name: 'index_name', + language: 'en', last_seen: null, last_sync_error: null, last_sync_status: null, @@ -163,7 +182,7 @@ describe('addConnector lib function', () => { }, index: CONNECTORS_INDEX, }); - expect(mockClient.asCurrentUser.index).toHaveBeenCalledTimes(2); + expect(mockClient.asCurrentUser.indices.create).toHaveBeenCalledWith({ index: 'index_name' }); }); it('should not create index if status code is not 404', async () => { mockClient.asCurrentUser.index.mockImplementationOnce(() => { @@ -172,7 +191,10 @@ describe('addConnector lib function', () => { mockClient.asCurrentUser.indices.exists.mockImplementation(() => false); (fetchConnectorByIndexName as jest.Mock).mockImplementation(() => false); await expect( - addConnector(mockClient as unknown as IScopedClusterClient, { index_name: 'index_name' }) + addConnector(mockClient as unknown as IScopedClusterClient, { + index_name: 'index_name', + language: 'en', + }) ).rejects.toEqual({ statusCode: 500 }); expect(setupConnectorsIndices).not.toHaveBeenCalled(); expect(mockClient.asCurrentUser.index).toHaveBeenCalledTimes(1); diff --git a/x-pack/plugins/enterprise_search/server/lib/connectors/add_connector.ts b/x-pack/plugins/enterprise_search/server/lib/connectors/add_connector.ts index 855afde8e9a68..42533a1275a3c 100644 --- a/x-pack/plugins/enterprise_search/server/lib/connectors/add_connector.ts +++ b/x-pack/plugins/enterprise_search/server/lib/connectors/add_connector.ts @@ -20,6 +20,7 @@ import { fetchConnectorByIndexName } from './fetch_connectors'; const createConnector = async ( document: ConnectorDocument, client: IScopedClusterClient, + language: string | null, deleteExisting: boolean ): Promise<{ id: string; index_name: string }> => { const index = document.index_name; @@ -42,7 +43,7 @@ const createConnector = async ( document, index: CONNECTORS_INDEX, }); - await client.asCurrentUser.indices.create({ index: document.index_name }); + await client.asCurrentUser.indices.create({ index }); await client.asCurrentUser.indices.refresh({ index: CONNECTORS_INDEX }); return { id: result._id, index_name: document.index_name }; @@ -50,12 +51,13 @@ const createConnector = async ( export const addConnector = async ( client: IScopedClusterClient, - input: { delete_existing_connector?: boolean; index_name: string } + input: { delete_existing_connector?: boolean; index_name: string; language: string | null } ): Promise<{ id: string; index_name: string }> => { const document: ConnectorDocument = { api_key_id: null, configuration: {}, index_name: input.index_name, + language: input.language, last_seen: null, last_sync_error: null, last_sync_status: null, @@ -66,13 +68,18 @@ export const addConnector = async ( sync_now: false, }; try { - return await createConnector(document, client, !!input.delete_existing_connector); + return await createConnector( + document, + client, + input.language, + !!input.delete_existing_connector + ); } catch (error) { if (isIndexNotFoundException(error)) { // This means .ent-search-connectors index doesn't exist yet // So we first have to create it, and then try inserting the document again await setupConnectorsIndices(client.asCurrentUser); - return await createConnector(document, client, false); + return await createConnector(document, client, input.language, false); } else { throw error; } diff --git a/x-pack/plugins/enterprise_search/server/lib/connectors/start_sync.test.ts b/x-pack/plugins/enterprise_search/server/lib/connectors/start_sync.test.ts new file mode 100644 index 0000000000000..a1212fc04fdce --- /dev/null +++ b/x-pack/plugins/enterprise_search/server/lib/connectors/start_sync.test.ts @@ -0,0 +1,88 @@ +/* + * 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 { IScopedClusterClient } from '@kbn/core/server'; + +import { CONNECTORS_INDEX } from '../..'; +import { ErrorCode } from '../../../common/types/error_codes'; + +import { startConnectorSync } from './start_sync'; + +describe('addConnector lib function', () => { + const mockClient = { + asCurrentUser: { + get: jest.fn(), + index: jest.fn(), + indices: { + refresh: jest.fn(), + }, + }, + asInternalUser: {}, + }; + + beforeEach(() => { + jest.clearAllMocks(); + }); + + it('should start a sync', async () => { + mockClient.asCurrentUser.get.mockImplementationOnce(() => { + return Promise.resolve({ + _source: { + api_key_id: null, + configuration: {}, + created_at: null, + index_name: 'index_name', + last_seen: null, + last_sync_error: null, + last_sync_status: null, + last_synced: null, + scheduling: { enabled: true, interval: '1 2 3 4 5' }, + service_type: null, + status: 'not connected', + sync_now: false, + }, + index: CONNECTORS_INDEX, + }); + }); + mockClient.asCurrentUser.index.mockImplementation(() => ({ _id: 'fakeId' })); + + await expect( + startConnectorSync(mockClient as unknown as IScopedClusterClient, 'connectorId') + ).resolves.toEqual({ _id: 'fakeId' }); + expect(mockClient.asCurrentUser.index).toHaveBeenCalledWith({ + document: { + api_key_id: null, + configuration: {}, + created_at: null, + index_name: 'index_name', + last_seen: null, + last_sync_error: null, + last_sync_status: null, + last_synced: null, + scheduling: { enabled: true, interval: '1 2 3 4 5' }, + service_type: null, + status: 'not connected', + sync_now: true, + }, + id: 'connectorId', + index: CONNECTORS_INDEX, + }); + expect(mockClient.asCurrentUser.indices.refresh).toHaveBeenCalledWith({ + index: CONNECTORS_INDEX, + }); + }); + + it('should not create index if there is no connector', async () => { + mockClient.asCurrentUser.get.mockImplementationOnce(() => { + return Promise.resolve({}); + }); + await expect( + startConnectorSync(mockClient as unknown as IScopedClusterClient, 'connectorId') + ).rejects.toEqual(new Error(ErrorCode.RESOURCE_NOT_FOUND)); + expect(mockClient.asCurrentUser.index).not.toHaveBeenCalled(); + }); +}); diff --git a/x-pack/plugins/enterprise_search/server/lib/connectors/start_sync.ts b/x-pack/plugins/enterprise_search/server/lib/connectors/start_sync.ts new file mode 100644 index 0000000000000..d52bb2de6751d --- /dev/null +++ b/x-pack/plugins/enterprise_search/server/lib/connectors/start_sync.ts @@ -0,0 +1,32 @@ +/* + * 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 { IScopedClusterClient } from '@kbn/core/server'; + +import { CONNECTORS_INDEX } from '../..'; + +import { ConnectorDocument } from '../../../common/types/connectors'; +import { ErrorCode } from '../../../common/types/error_codes'; + +export const startConnectorSync = async (client: IScopedClusterClient, connectorId: string) => { + const connectorResult = await client.asCurrentUser.get({ + id: connectorId, + index: CONNECTORS_INDEX, + }); + const connector = connectorResult._source; + if (connector) { + const result = await client.asCurrentUser.index({ + document: { ...connector, sync_now: true }, + id: connectorId, + index: CONNECTORS_INDEX, + }); + await client.asCurrentUser.indices.refresh({ index: CONNECTORS_INDEX }); + return result; + } else { + throw new Error(ErrorCode.RESOURCE_NOT_FOUND); + } +}; diff --git a/x-pack/plugins/enterprise_search/server/lib/connectors/update_connector_scheduling.test.ts b/x-pack/plugins/enterprise_search/server/lib/connectors/update_connector_scheduling.test.ts index fe0cea4e09a56..86845b090bf93 100644 --- a/x-pack/plugins/enterprise_search/server/lib/connectors/update_connector_scheduling.test.ts +++ b/x-pack/plugins/enterprise_search/server/lib/connectors/update_connector_scheduling.test.ts @@ -16,6 +16,9 @@ describe('addConnector lib function', () => { asCurrentUser: { get: jest.fn(), index: jest.fn(), + indices: { + refresh: jest.fn(), + }, }, asInternalUser: {}, }; @@ -36,7 +39,7 @@ describe('addConnector lib function', () => { last_sync_error: null, last_sync_status: null, last_synced: null, - scheduling: { enabled: true, interval: '1 2 3 4 5' }, + scheduling: { enabled: false, interval: '* * * * *' }, service_type: null, status: 'not connected', sync_now: false, @@ -70,9 +73,12 @@ describe('addConnector lib function', () => { id: 'connectorId', index: CONNECTORS_INDEX, }); + expect(mockClient.asCurrentUser.indices.refresh).toHaveBeenCalledWith({ + index: CONNECTORS_INDEX, + }); }); - it('should not create index if there is no connector', async () => { + it('should not index document if there is no connector', async () => { mockClient.asCurrentUser.get.mockImplementationOnce(() => { return Promise.resolve({}); }); diff --git a/x-pack/plugins/enterprise_search/server/lib/connectors/update_connector_scheduling.ts b/x-pack/plugins/enterprise_search/server/lib/connectors/update_connector_scheduling.ts index 3fe7e602148b5..3672c3b05344a 100644 --- a/x-pack/plugins/enterprise_search/server/lib/connectors/update_connector_scheduling.ts +++ b/x-pack/plugins/enterprise_search/server/lib/connectors/update_connector_scheduling.ts @@ -23,11 +23,13 @@ export const updateConnectorScheduling = async ( }); const connector = connectorResult._source; if (connector) { - return await client.asCurrentUser.index({ + const result = await client.asCurrentUser.index({ document: { ...connector, scheduling }, id: connectorId, index: CONNECTORS_INDEX, }); + await client.asCurrentUser.indices.refresh({ index: CONNECTORS_INDEX }); + return result; } else { throw new Error( i18n.translate('xpack.enterpriseSearch.server.connectors.scheduling.error', { diff --git a/x-pack/plugins/enterprise_search/server/lib/indices/create_index.ts b/x-pack/plugins/enterprise_search/server/lib/indices/create_index.ts index be6748f0a9bdf..1e3df81ab7963 100644 --- a/x-pack/plugins/enterprise_search/server/lib/indices/create_index.ts +++ b/x-pack/plugins/enterprise_search/server/lib/indices/create_index.ts @@ -11,23 +11,23 @@ import { IScopedClusterClient } from '@kbn/core/server'; import { textAnalysisSettings } from './text_analysis'; const prefixMapping: MappingTextProperty = { - search_analyzer: 'q_prefix', analyzer: 'i_prefix', - type: 'text', index_options: 'docs', + search_analyzer: 'q_prefix', + type: 'text', }; const delimiterMapping: MappingTextProperty = { analyzer: 'iq_text_delimiter', - type: 'text', index_options: 'freqs', + type: 'text', }; const joinedMapping: MappingTextProperty = { - search_analyzer: 'q_text_bigram', analyzer: 'i_text_bigram', - type: 'text', index_options: 'freqs', + search_analyzer: 'q_text_bigram', + type: 'text', }; const enumMapping: MappingKeywordProperty = { @@ -45,17 +45,17 @@ const defaultMappings = { dynamic_templates: [ { all_text_fields: { - match_mapping_type: 'string', mapping: { analyzer: 'iq_text_base', fields: { - prefix: prefixMapping, delimiter: delimiterMapping, - joined: joinedMapping, enum: enumMapping, + joined: joinedMapping, + prefix: prefixMapping, stem: stemMapping, }, }, + match_mapping_type: 'string', }, }, ], @@ -64,13 +64,13 @@ const defaultMappings = { export const createApiIndex = async ( client: IScopedClusterClient, indexName: string, - language: string | undefined + language: string | undefined | null ) => { return await client.asCurrentUser.indices.create({ - index: indexName, body: { mappings: defaultMappings, - settings: textAnalysisSettings(language), + settings: textAnalysisSettings(language ?? undefined), }, + index: indexName, }); }; diff --git a/x-pack/plugins/enterprise_search/server/routes/enterprise_search/connectors.ts b/x-pack/plugins/enterprise_search/server/routes/enterprise_search/connectors.ts index 8fd2cb0ed2bf4..5c2f191eb1395 100644 --- a/x-pack/plugins/enterprise_search/server/routes/enterprise_search/connectors.ts +++ b/x-pack/plugins/enterprise_search/server/routes/enterprise_search/connectors.ts @@ -10,6 +10,7 @@ import { i18n } from '@kbn/i18n'; import { ErrorCode } from '../../../common/types/error_codes'; import { addConnector } from '../../lib/connectors/add_connector'; +import { startConnectorSync } from '../../lib/connectors/start_sync'; import { updateConnectorConfiguration } from '../../lib/connectors/update_connector_configuration'; import { updateConnectorScheduling } from '../../lib/connectors/update_connector_scheduling'; @@ -24,6 +25,7 @@ export function registerConnectorRoutes({ router }: RouteDependencies) { body: schema.object({ delete_existing_connector: schema.maybe(schema.boolean()), index_name: schema.string(), + language: schema.nullable(schema.string()), }), }, }, @@ -124,4 +126,28 @@ export function registerConnectorRoutes({ router }: RouteDependencies) { } } ); + router.post( + { + path: '/internal/enterprise_search/connectors/{connectorId}/start_sync', + validate: { + params: schema.object({ + connectorId: schema.string(), + }), + }, + }, + async (context, request, response) => { + const { client } = (await context.core).elasticsearch; + try { + await startConnectorSync(client, request.params.connectorId); + return response.ok(); + } catch (error) { + return response.customError({ + body: i18n.translate('xpack.enterpriseSearch.server.routes.updateConnector.error', { + defaultMessage: 'Error fetching data from Enterprise Search', + }), + statusCode: 502, + }); + } + } + ); } diff --git a/x-pack/plugins/enterprise_search/server/routes/enterprise_search/indices.ts b/x-pack/plugins/enterprise_search/server/routes/enterprise_search/indices.ts index 6cca98815c456..b673e93d7524b 100644 --- a/x-pack/plugins/enterprise_search/server/routes/enterprise_search/indices.ts +++ b/x-pack/plugins/enterprise_search/server/routes/enterprise_search/indices.ts @@ -187,13 +187,13 @@ export function registerIndexRoutes({ router }: RouteDependencies) { path: '/internal/enterprise_search/indices', validate: { body: schema.object({ - indexName: schema.string(), - language: schema.maybe(schema.string()), + index_name: schema.string(), + language: schema.maybe(schema.nullable(schema.string())), }), }, }, async (context, request, response) => { - const { indexName, language } = request.body; + const { ['index_name']: indexName, language } = request.body; const { client } = (await context.core).elasticsearch; try { const createIndexResponse = await createApiIndex(client, indexName, language); diff --git a/x-pack/plugins/kubernetes_security/common/constants.ts b/x-pack/plugins/kubernetes_security/common/constants.ts index f61633fabc14f..002e669c6839f 100644 --- a/x-pack/plugins/kubernetes_security/common/constants.ts +++ b/x-pack/plugins/kubernetes_security/common/constants.ts @@ -23,8 +23,6 @@ export const QUERY_KEY_COUNT_WIDGET = 'kubernetesSecurityCountWidget'; export const QUERY_KEY_CONTAINER_NAME_WIDGET = 'kubernetesSecurityContainerNameWidget'; export const QUERY_KEY_PROCESS_EVENTS = 'kubernetesSecurityProcessEvents'; -export const DEFAULT_QUERY = '{"bool":{"must":[],"filter":[],"should":[],"must_not":[]}}'; - // ECS fields export const ENTRY_LEADER_INTERACTIVE = 'process.entry_leader.interactive'; export const ENTRY_LEADER_USER_ID = 'process.entry_leader.user.id'; @@ -41,3 +39,19 @@ export const COUNT_WIDGET_KEY_NAMESPACE = 'CountNamespaceWidgets'; export const COUNT_WIDGET_KEY_NODES = 'CountNodesWidgets'; export const COUNT_WIDGET_KEY_PODS = 'CountPodsWidgets'; export const COUNT_WIDGET_KEY_CONTAINER_IMAGES = 'CountContainerImagesWidgets'; + +export const DEFAULT_QUERY = '{"bool":{"must":[],"filter":[],"should":[],"must_not":[]}}'; +export const DEFAULT_FILTER_QUERY = + '{"bool":{"must":[],"filter":[{"bool": {"should": [{"exists": {"field": "process.entry_leader.entity_id"}}]}}],"should":[],"must_not":[]}}'; +export const DEFAULT_FILTER = { + bool: { + should: [ + { + exists: { + field: ENTRY_LEADER_ENTITY_ID, + }, + }, + ], + minimum_should_match: 1, + }, +}; diff --git a/x-pack/plugins/kubernetes_security/public/components/container_name_widget/index.tsx b/x-pack/plugins/kubernetes_security/public/components/container_name_widget/index.tsx index 15f3727efa660..7db821c51cc7b 100644 --- a/x-pack/plugins/kubernetes_security/public/components/container_name_widget/index.tsx +++ b/x-pack/plugins/kubernetes_security/public/components/container_name_widget/index.tsx @@ -11,7 +11,7 @@ import { useStyles } from './styles'; import { ContainerNameRow } from './container_name_row'; import type { IndexPattern, GlobalFilter } from '../../types'; import { useSetFilter, useScroll } from '../../hooks'; -import { addTimerangeToQuery } from '../../utils/add_timerange_to_query'; +import { addTimerangeAndDefaultFilterToQuery } from '../../utils/add_timerange_and_default_filter_to_query'; import { useFetchContainerNameData } from './hooks'; import { CONTAINER_IMAGE_NAME } from '../../../common/constants'; import { @@ -63,7 +63,7 @@ export const ContainerNameWidget = ({ const styles = useStyles(); const filterQueryWithTimeRange = useMemo(() => { - return addTimerangeToQuery( + return addTimerangeAndDefaultFilterToQuery( globalFilter.filterQuery, globalFilter.startDate, globalFilter.endDate diff --git a/x-pack/plugins/kubernetes_security/public/components/count_widget/index.tsx b/x-pack/plugins/kubernetes_security/public/components/count_widget/index.tsx index 534187057b5e9..a6b1638efb002 100644 --- a/x-pack/plugins/kubernetes_security/public/components/count_widget/index.tsx +++ b/x-pack/plugins/kubernetes_security/public/components/count_widget/index.tsx @@ -10,7 +10,7 @@ import { EuiText, EuiLoadingSpinner, EuiToolTip } from '@elastic/eui'; import { useStyles } from './styles'; import type { IndexPattern, GlobalFilter } from '../../types'; import { addCommasToNumber } from '../../utils/add_commas_to_number'; -import { addTimerangeToQuery } from '../../utils/add_timerange_to_query'; +import { addTimerangeAndDefaultFilterToQuery } from '../../utils/add_timerange_and_default_filter_to_query'; import { useFetchCountWidgetData } from './hooks'; import { addResourceTypeToFilterQuery, numberFormatter } from './helpers'; import { COUNT_WIDGET_KEY_PODS } from '../../../common/constants'; @@ -42,7 +42,11 @@ export const CountWidget = ({ if (widgetKey === COUNT_WIDGET_KEY_PODS) { globalFilterModified = addResourceTypeToFilterQuery(globalFilter.filterQuery, 'pod'); } - return addTimerangeToQuery(globalFilterModified, globalFilter.startDate, globalFilter.endDate); + return addTimerangeAndDefaultFilterToQuery( + globalFilterModified, + globalFilter.startDate, + globalFilter.endDate + ); }, [globalFilter.filterQuery, globalFilter.startDate, globalFilter.endDate, widgetKey]); const { data, isLoading } = useFetchCountWidgetData( diff --git a/x-pack/plugins/kubernetes_security/public/components/percent_widget/index.tsx b/x-pack/plugins/kubernetes_security/public/components/percent_widget/index.tsx index 21c068978a345..181ff9629c4ee 100644 --- a/x-pack/plugins/kubernetes_security/public/components/percent_widget/index.tsx +++ b/x-pack/plugins/kubernetes_security/public/components/percent_widget/index.tsx @@ -10,7 +10,7 @@ import { EuiFlexGroup, EuiFlexItem, EuiProgress, EuiText } from '@elastic/eui'; import { useStyles } from './styles'; import type { IndexPattern, GlobalFilter } from '../../types'; import { useSetFilter } from '../../hooks'; -import { addTimerangeToQuery } from '../../utils/add_timerange_to_query'; +import { addTimerangeAndDefaultFilterToQuery } from '../../utils/add_timerange_and_default_filter_to_query'; import { AggregateResult } from '../../../common/types/aggregate'; import { useFetchPercentWidgetData } from './hooks'; @@ -54,7 +54,7 @@ export const PercentWidget = ({ const styles = useStyles(); const filterQueryWithTimeRange = useMemo(() => { - return addTimerangeToQuery( + return addTimerangeAndDefaultFilterToQuery( globalFilter.filterQuery, globalFilter.startDate, globalFilter.endDate diff --git a/x-pack/plugins/kubernetes_security/public/components/tree_view_container/tree_nav/index.tsx b/x-pack/plugins/kubernetes_security/public/components/tree_view_container/tree_nav/index.tsx index 56ab1c94d93a5..699b83a4146d0 100644 --- a/x-pack/plugins/kubernetes_security/public/components/tree_view_container/tree_nav/index.tsx +++ b/x-pack/plugins/kubernetes_security/public/components/tree_view_container/tree_nav/index.tsx @@ -14,7 +14,7 @@ import { import { useStyles } from './styles'; import { IndexPattern, GlobalFilter, TreeNavSelection } from '../../../types'; import { DynamicTreeView } from '../dynamic_tree_view'; -import { addTimerangeToQuery } from '../../../utils/add_timerange_to_query'; +import { addTimerangeAndDefaultFilterToQuery } from '../../../utils/add_timerange_and_default_filter_to_query'; import { INFRASTRUCTURE, LOGICAL, TREE_VIEW } from './constants'; import { TreeViewKind, TreeViewOptionsGroup } from './types'; @@ -31,7 +31,7 @@ export const TreeNav = ({ indexPattern, globalFilter, onSelect, hasSelection }: const [selected, setSelected] = useState(''); const filterQueryWithTimeRange = useMemo(() => { - return addTimerangeToQuery( + return addTimerangeAndDefaultFilterToQuery( globalFilter.filterQuery, globalFilter.startDate, globalFilter.endDate diff --git a/x-pack/plugins/kubernetes_security/public/utils/add_timerange_and_default_filter_to_query.test.ts b/x-pack/plugins/kubernetes_security/public/utils/add_timerange_and_default_filter_to_query.test.ts new file mode 100644 index 0000000000000..33b36574eab92 --- /dev/null +++ b/x-pack/plugins/kubernetes_security/public/utils/add_timerange_and_default_filter_to_query.test.ts @@ -0,0 +1,49 @@ +/* + * 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 { DEFAULT_FILTER_QUERY } from '../../common/constants'; +import { addTimerangeAndDefaultFilterToQuery } from './add_timerange_and_default_filter_to_query'; + +const TEST_QUERY = + '{"bool":{"must":[],"filter":[{"bool":{"should":[{"match":{"process.entry_leader.same_as_process":true}}],"minimum_should_match":1}}],"should":[],"must_not":[]}}'; +const TEST_INVALID_QUERY = '{"bool":{"must":['; +const TEST_EMPTY_STRING = ''; +const TEST_DATE = '2022-06-09T22:36:46.628Z'; +const VALID_RESULT = + '{"bool":{"must":[],"filter":[{"bool":{"should":[{"exists":{"field":"process.entry_leader.entity_id"}}],"minimum_should_match":1}},{"bool":{"should":[{"match":{"process.entry_leader.same_as_process":true}}],"minimum_should_match":1}},{"range":{"@timestamp":{"gte":"2022-06-09T22:36:46.628Z","lte":"2022-06-09T22:36:46.628Z"}}}],"should":[],"must_not":[]}}'; + +describe('addTimerangeAndDefaultFilterToQuery(query, startDate, endDate)', () => { + it('works for valid query, startDate, and endDate', () => { + expect(addTimerangeAndDefaultFilterToQuery(TEST_QUERY, TEST_DATE, TEST_DATE)).toEqual( + VALID_RESULT + ); + }); + it('works with missing filter in bool', () => { + expect(addTimerangeAndDefaultFilterToQuery('{"bool":{}}', TEST_DATE, TEST_DATE)).toEqual( + '{"bool":{"filter":[{"range":{"@timestamp":{"gte":"2022-06-09T22:36:46.628Z","lte":"2022-06-09T22:36:46.628Z"}}}]}}' + ); + }); + it('returns default query with invalid JSON query', () => { + expect(addTimerangeAndDefaultFilterToQuery(TEST_INVALID_QUERY, TEST_DATE, TEST_DATE)).toEqual( + DEFAULT_FILTER_QUERY + ); + expect(addTimerangeAndDefaultFilterToQuery(TEST_EMPTY_STRING, TEST_DATE, TEST_DATE)).toEqual( + DEFAULT_FILTER_QUERY + ); + expect(addTimerangeAndDefaultFilterToQuery('{}', TEST_DATE, TEST_DATE)).toEqual( + DEFAULT_FILTER_QUERY + ); + }); + it('returns default query with invalid startDate or endDate', () => { + expect(addTimerangeAndDefaultFilterToQuery(TEST_QUERY, TEST_EMPTY_STRING, TEST_DATE)).toEqual( + DEFAULT_FILTER_QUERY + ); + expect(addTimerangeAndDefaultFilterToQuery(TEST_QUERY, TEST_DATE, TEST_EMPTY_STRING)).toEqual( + DEFAULT_FILTER_QUERY + ); + }); +}); diff --git a/x-pack/plugins/kubernetes_security/public/utils/add_timerange_to_query.ts b/x-pack/plugins/kubernetes_security/public/utils/add_timerange_and_default_filter_to_query.ts similarity index 78% rename from x-pack/plugins/kubernetes_security/public/utils/add_timerange_to_query.ts rename to x-pack/plugins/kubernetes_security/public/utils/add_timerange_and_default_filter_to_query.ts index 0eb1239435483..5b5eca1b8a4d9 100644 --- a/x-pack/plugins/kubernetes_security/public/utils/add_timerange_to_query.ts +++ b/x-pack/plugins/kubernetes_security/public/utils/add_timerange_and_default_filter_to_query.ts @@ -5,10 +5,10 @@ * 2.0. */ -import { DEFAULT_QUERY } from '../../common/constants'; +import { DEFAULT_FILTER, DEFAULT_FILTER_QUERY } from '../../common/constants'; /** - * Add startDate and endDate filter for '@timestamp' field into query. + * Add DEFAULT_FILTER and startDate and endDate filter for '@timestamp' field into query. * * Used by frontend components * @@ -20,13 +20,13 @@ import { DEFAULT_QUERY } from '../../common/constants'; * in the right format, return a default query. */ -export const addTimerangeToQuery = ( +export const addTimerangeAndDefaultFilterToQuery = ( query: string | undefined, startDate: string, endDate: string ) => { if (!(query && !isNaN(Date.parse(startDate)) && !isNaN(Date.parse(endDate)))) { - return DEFAULT_QUERY; + return DEFAULT_FILTER_QUERY; } try { @@ -44,13 +44,13 @@ export const addTimerangeToQuery = ( }, }; if (parsedQuery.bool.filter) { - parsedQuery.bool.filter = [...parsedQuery.bool.filter, range]; + parsedQuery.bool.filter = [DEFAULT_FILTER, ...parsedQuery.bool.filter, range]; } else { parsedQuery.bool.filter = [range]; } return JSON.stringify(parsedQuery); } catch { - return DEFAULT_QUERY; + return DEFAULT_FILTER_QUERY; } }; diff --git a/x-pack/plugins/kubernetes_security/public/utils/add_timerange_to_query.test.ts b/x-pack/plugins/kubernetes_security/public/utils/add_timerange_to_query.test.ts deleted file mode 100644 index 20e5e36cb3951..0000000000000 --- a/x-pack/plugins/kubernetes_security/public/utils/add_timerange_to_query.test.ts +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { DEFAULT_QUERY } from '../../common/constants'; -import { addTimerangeToQuery } from './add_timerange_to_query'; - -const TEST_QUERY = - '{"bool":{"must":[],"filter":[{"bool":{"should":[{"match":{"process.entry_leader.same_as_process":true}}],"minimum_should_match":1}}],"should":[],"must_not":[]}}'; -const TEST_INVALID_QUERY = '{"bool":{"must":['; -const TEST_EMPTY_STRING = ''; -const TEST_DATE = '2022-06-09T22:36:46.628Z'; -const VALID_RESULT = - '{"bool":{"must":[],"filter":[{"bool":{"should":[{"match":{"process.entry_leader.same_as_process":true}}],"minimum_should_match":1}},{"range":{"@timestamp":{"gte":"2022-06-09T22:36:46.628Z","lte":"2022-06-09T22:36:46.628Z"}}}],"should":[],"must_not":[]}}'; - -describe('addTimerangeToQuery(query, startDate, endDate)', () => { - it('works for valid query, startDate, and endDate', () => { - expect(addTimerangeToQuery(TEST_QUERY, TEST_DATE, TEST_DATE)).toEqual(VALID_RESULT); - }); - it('works with missing filter in bool', () => { - expect(addTimerangeToQuery('{"bool":{}}', TEST_DATE, TEST_DATE)).toEqual( - '{"bool":{"filter":[{"range":{"@timestamp":{"gte":"2022-06-09T22:36:46.628Z","lte":"2022-06-09T22:36:46.628Z"}}}]}}' - ); - }); - it('returns default query with invalid JSON query', () => { - expect(addTimerangeToQuery(TEST_INVALID_QUERY, TEST_DATE, TEST_DATE)).toEqual(DEFAULT_QUERY); - expect(addTimerangeToQuery(TEST_EMPTY_STRING, TEST_DATE, TEST_DATE)).toEqual(DEFAULT_QUERY); - expect(addTimerangeToQuery('{}', TEST_DATE, TEST_DATE)).toEqual(DEFAULT_QUERY); - }); - it('returns default query with invalid startDate or endDate', () => { - expect(addTimerangeToQuery(TEST_QUERY, TEST_EMPTY_STRING, TEST_DATE)).toEqual(DEFAULT_QUERY); - expect(addTimerangeToQuery(TEST_QUERY, TEST_DATE, TEST_EMPTY_STRING)).toEqual(DEFAULT_QUERY); - }); -}); diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/dimension_panel/dimension_editor.tsx b/x-pack/plugins/lens/public/indexpattern_datasource/dimension_panel/dimension_editor.tsx index 413f40279a3ce..559c3ef7fff44 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/dimension_panel/dimension_editor.tsx +++ b/x-pack/plugins/lens/public/indexpattern_datasource/dimension_panel/dimension_editor.tsx @@ -45,6 +45,7 @@ import { Filtering } from './filtering'; import { AdvancedOptions } from './advanced_options'; import { TimeShift } from './time_shift'; import type { LayerType } from '../../../common'; +import { DOCUMENT_FIELD_NAME } from '../../../common'; import { quickFunctionsName, staticValueOperationName, @@ -62,6 +63,7 @@ import { ParamEditorProps } from '../operations/definitions'; import { WrappingHelpPopover } from '../help_popover'; import { isColumn } from '../operations/definitions/helpers'; import { FieldChoiceWithOperationType } from './field_select'; +import { documentField } from '../document_field'; export interface DimensionEditorProps extends IndexPatternDimensionEditorProps { selectedColumn?: GenericIndexPatternColumn; @@ -449,7 +451,8 @@ export function DimensionEditor(props: DimensionEditorProps) { indexPattern: currentIndexPattern, columnId, op: operationType, - field: undefined, + // if document field can be used, default to it + field: possibleFields.has(DOCUMENT_FIELD_NAME) ? documentField : undefined, visualizationGroups: dimensionGroups, targetGroup: props.groupId, }); diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/dimension_panel/dimension_panel.test.tsx b/x-pack/plugins/lens/public/indexpattern_datasource/dimension_panel/dimension_panel.test.tsx index a2d83da5d89e2..291ccb1ede76b 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/dimension_panel/dimension_panel.test.tsx +++ b/x-pack/plugins/lens/public/indexpattern_datasource/dimension_panel/dimension_panel.test.tsx @@ -986,26 +986,16 @@ describe('IndexPatternDimensionEditorPanel', () => { }); }); - it('should select the Records field when count is selected', () => { + it('should select the Records field when count is selected on non-existing column', () => { wrapper = mount( ); - wrapper - .find('button[data-test-subj="lns-indexPatternDimension-count incompatible"]') - .simulate('click'); + wrapper.find('button[data-test-subj="lns-indexPatternDimension-count"]').simulate('click'); const newColumnState = setState.mock.calls[0][0](state).layers.first.columns.col2; expect(newColumnState.operationType).toEqual('count'); @@ -1175,9 +1165,7 @@ describe('IndexPatternDimensionEditorPanel', () => { label: 'Sum of bytes per hour', }); wrapper = mount(); - wrapper - .find('button[data-test-subj="lns-indexPatternDimension-count incompatible"]') - .simulate('click'); + wrapper.find('button[data-test-subj="lns-indexPatternDimension-count"]').simulate('click'); expect(setState.mock.calls[0]).toEqual([expect.any(Function), { isDimensionComplete: true }]); expect(setState.mock.calls[0][0](props.state)).toEqual({ ...props.state, @@ -1188,7 +1176,7 @@ describe('IndexPatternDimensionEditorPanel', () => { ...props.state.layers.first.columns, col2: expect.objectContaining({ timeScale: 'h', - label: 'Count of records per hour', + label: 'Value count of bytes per hour', }), }, }, @@ -1385,9 +1373,7 @@ describe('IndexPatternDimensionEditorPanel', () => { label: 'Sum of bytes per hour', }); wrapper = mount(); - wrapper - .find('button[data-test-subj="lns-indexPatternDimension-count incompatible"]') - .simulate('click'); + wrapper.find('button[data-test-subj="lns-indexPatternDimension-count"]').simulate('click'); expect((props.setState as jest.Mock).mock.calls[0][0](props.state)).toEqual({ ...props.state, layers: { @@ -1523,9 +1509,7 @@ describe('IndexPatternDimensionEditorPanel', () => { label: 'Sum of bytes per hour', }); wrapper = mount(); - wrapper - .find('button[data-test-subj="lns-indexPatternDimension-count incompatible"]') - .simulate('click'); + wrapper.find('button[data-test-subj="lns-indexPatternDimension-count"]').simulate('click'); expect(setState.mock.calls[0]).toEqual([expect.any(Function), { isDimensionComplete: true }]); expect(setState.mock.calls[0][0](props.state)).toEqual({ ...props.state, @@ -1764,10 +1748,6 @@ describe('IndexPatternDimensionEditorPanel', () => { .prop('options'); expect(options![0]['data-test-subj']).not.toContain('Incompatible'); - - options![1].options!.map((operation) => - expect(operation['data-test-subj']).toContain('Incompatible') - ); }); it('should not update when selecting the current field again', () => { diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/dimension_panel/droppable/get_drop_props.test.ts b/x-pack/plugins/lens/public/indexpattern_datasource/dimension_panel/droppable/get_drop_props.test.ts index f9afc9a00c98f..f48e4d897a637 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/dimension_panel/droppable/get_drop_props.test.ts +++ b/x-pack/plugins/lens/public/indexpattern_datasource/dimension_panel/droppable/get_drop_props.test.ts @@ -362,7 +362,7 @@ describe('IndexPatternDimensionEditorPanel#getDropProps', () => { }) ).toEqual({ dropTypes: ['replace_incompatible', 'replace_duplicate_incompatible'], - nextLabel: 'Minimum', + nextLabel: 'Count', }); }); diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/indexpattern_suggestions.test.tsx b/x-pack/plugins/lens/public/indexpattern_datasource/indexpattern_suggestions.test.tsx index 812bb8413137a..f96a6dbd3340e 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/indexpattern_suggestions.test.tsx +++ b/x-pack/plugins/lens/public/indexpattern_datasource/indexpattern_suggestions.test.tsx @@ -3030,7 +3030,7 @@ describe('IndexPattern Data Source suggestions', () => { operation: { dataType: 'number', isBucketed: false, - label: 'Cumulative sum of Records label', + label: 'Cumulative sum of Records', scale: undefined, isStaticValue: false, hasTimeShift: false, diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/loader.ts b/x-pack/plugins/lens/public/indexpattern_datasource/loader.ts index 8ca21272a555e..d3affb5b32d8c 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/loader.ts +++ b/x-pack/plugins/lens/public/indexpattern_datasource/loader.ts @@ -105,7 +105,7 @@ export function convertDataViewIntoLensIndexPattern(dataView: DataView): IndexPa ]) ), fields: newFields, - getFieldByName: getFieldByNameFactory(newFields), + getFieldByName: getFieldByNameFactory(newFields, false), hasRestrictions: !!typeMeta?.aggs, }; } diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions.test.ts b/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions.test.ts index 1a0da126f28e3..dae677663d289 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions.test.ts +++ b/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions.test.ts @@ -211,7 +211,7 @@ describe('time scale transition', () => { ).toEqual( expect.objectContaining({ timeScale: undefined, - label: 'Count of records', + label: 'Value count of bytesLabel', }) ); }); diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/count.tsx b/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/count.tsx index 888c992031430..d3c0b9700379c 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/count.tsx +++ b/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/count.tsx @@ -11,6 +11,7 @@ import { euiThemeVars } from '@kbn/ui-theme'; import { EuiSwitch } from '@elastic/eui'; import { AggFunctionsMapping } from '@kbn/data-plugin/public'; import { buildExpressionFunction } from '@kbn/expressions-plugin/public'; +import { TimeScaleUnit } from '../../../../common/expressions'; import { OperationDefinition, ParamEditorProps } from '.'; import { FieldBasedIndexPatternColumn, ValueFormatConfig } from './column_types'; import { IndexPatternField } from '../../types'; @@ -32,6 +33,39 @@ const countLabel = i18n.translate('xpack.lens.indexPattern.countOf', { defaultMessage: 'Count of records', }); +const supportedTypes = new Set([ + 'string', + 'boolean', + 'number', + 'number_range', + 'ip', + 'ip_range', + 'date', + 'date_range', + 'murmur3', +]); + +function ofName( + field: IndexPatternField | undefined, + timeShift: string | undefined, + timeScale: string | undefined +) { + return adjustTimeScaleLabelSuffix( + field?.type !== 'document' + ? i18n.translate('xpack.lens.indexPattern.valueCountOf', { + defaultMessage: 'Value count of {name}', + values: { + name: field?.displayName || '-', + }, + }) + : countLabel, + undefined, + timeScale as TimeScaleUnit, + undefined, + timeShift + ); +} + export type CountIndexPatternColumn = FieldBasedIndexPatternColumn & { operationType: 'count'; params?: { @@ -40,9 +74,11 @@ export type CountIndexPatternColumn = FieldBasedIndexPatternColumn & { }; }; +const SCALE = 'ratio'; +const IS_BUCKETED = false; + export const countOperation: OperationDefinition = { type: 'count', - priority: 2, displayName: i18n.translate('xpack.lens.indexPattern.count', { defaultMessage: 'Count', }), @@ -56,42 +92,27 @@ export const countOperation: OperationDefinition { return { ...oldColumn, - label: adjustTimeScaleLabelSuffix( - field.displayName, - undefined, - oldColumn.timeScale, - undefined, - oldColumn.timeShift - ), + label: ofName(field, oldColumn.timeShift, oldColumn.timeShift), sourceField: field.name, }; }, - getPossibleOperationForField: (field: IndexPatternField) => { - if (field.type === 'document') { - return { - dataType: 'number', - isBucketed: false, - scale: 'ratio', - }; + getPossibleOperationForField: ({ aggregationRestrictions, aggregatable, type }) => { + if ( + type === 'document' || + (aggregatable && + (!aggregationRestrictions || aggregationRestrictions.value_count) && + supportedTypes.has(type)) + ) { + return { dataType: 'number', isBucketed: IS_BUCKETED, scale: SCALE }; } }, - getDefaultLabel: (column) => - adjustTimeScaleLabelSuffix( - countLabel, - undefined, - column.timeScale, - undefined, - column.timeShift - ), + getDefaultLabel: (column, indexPattern) => { + const field = indexPattern.getFieldByName(column.sourceField); + return ofName(field, column.timeShift, column.timeScale); + }, buildColumn({ field, previousColumn }, columnParams) { return { - label: adjustTimeScaleLabelSuffix( - countLabel, - undefined, - previousColumn?.timeScale, - undefined, - previousColumn?.timeShift - ), + label: ofName(field, previousColumn?.timeShift, previousColumn?.timeScale), dataType: 'number', operationType: 'count', isBucketed: false, @@ -147,33 +168,58 @@ export const countOperation: OperationDefinition adjustTimeScaleOnOtherColumnChange(layer, thisColumnId), - toEsAggsFn: (column, columnId) => { - return buildExpressionFunction('aggCount', { - id: columnId, - enabled: true, - schema: 'metric', - // time shift is added to wrapping aggFilteredMetric if filter is set - timeShift: column.filter ? undefined : column.timeShift, - emptyAsNull: column.params?.emptyAsNull, - }).toAst(); + toEsAggsFn: (column, columnId, indexPattern) => { + const field = indexPattern.getFieldByName(column.sourceField); + if (field?.type === 'document') { + return buildExpressionFunction('aggCount', { + id: columnId, + enabled: true, + schema: 'metric', + // time shift is added to wrapping aggFilteredMetric if filter is set + timeShift: column.filter ? undefined : column.timeShift, + emptyAsNull: column.params?.emptyAsNull, + }).toAst(); + } else { + return buildExpressionFunction('aggValueCount', { + id: columnId, + enabled: true, + schema: 'metric', + field: column.sourceField, + // time shift is added to wrapping aggFilteredMetric if filter is set + timeShift: column.filter ? undefined : column.timeShift, + emptyAsNull: column.params?.emptyAsNull, + }).toAst(); + } }, - isTransferable: () => { - return true; + isTransferable: (column, newIndexPattern) => { + const newField = newIndexPattern.getFieldByName(column.sourceField); + + return Boolean( + newField && + (newField.type === 'document' || + (supportedTypes.has(newField.type) && + newField.aggregatable && + (!newField.aggregationRestrictions || newField.aggregationRestrictions.cardinality))) + ); }, timeScalingMode: 'optional', filterable: true, documentation: { section: 'elasticsearch', - signature: '', + signature: i18n.translate('xpack.lens.indexPattern.count.signature', { + defaultMessage: '[field: string]', + }), description: i18n.translate('xpack.lens.indexPattern.count.documentation.markdown', { defaultMessage: ` -Calculates the number of documents. +The total number of documents. When you provide a field as the first argument, the total number of field values is counted. Use the count function for fields that have multiple values in a single document. + +#### Examples + +To calculate the total number of documents, use \`count()\`. -Example: Calculate the number of documents: -\`count()\` +To calculate the number of products in all orders, use \`count(products.id)\`. -Example: Calculate the number of documents matching a certain filter: -\`count(kql='price > 500')\` +To calculate the number of documents that match a specific filter, use \`count(kql='price > 500')\`. `, }), }, diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/formula/editor/formula_help.tsx b/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/formula/editor/formula_help.tsx index 3059318bd562d..bdc774f9d15f3 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/formula/editor/formula_help.tsx +++ b/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/formula/editor/formula_help.tsx @@ -483,7 +483,7 @@ export function getFunctionSignatureLabel( const def = operationDefinitionMap[name]; let extraArgs = ''; if (def.filterable) { - extraArgs += hasFunctionFieldArgument(name) || 'operationParams' in def ? ',' : ''; + extraArgs += ','; extraArgs += i18n.translate('xpack.lens.formula.kqlExtraArguments', { defaultMessage: '[kql]?: string, [lucene]?: string', }); diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/formula/formula.test.tsx b/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/formula/formula.test.tsx index c4402277148c7..1e16c27253d9b 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/formula/formula.test.tsx +++ b/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/formula/formula.test.tsx @@ -674,14 +674,6 @@ describe('formula', () => { } }); - it('returns no change but error if an argument is passed to count operation', () => { - const formulas = ['count(7)', 'count("bytes")', 'count(bytes)']; - - for (const formula of formulas) { - testIsBrokenFormula(formula); - } - }); - it('returns no change but error if a required parameter is not passed to the operation in formula', () => { const formula = 'moving_average(average(bytes))'; testIsBrokenFormula(formula); @@ -1124,19 +1116,15 @@ invalid: " } }); - it('returns an error if an argument is passed to count() operation', () => { - const formulas = ['count(7)', 'count("bytes")', 'count(bytes)']; - - for (const formula of formulas) { - expect( - formulaOperation.getErrorMessage!( - getNewLayerWithFormula(formula), - 'col1', - indexPattern, - operationDefinitionMap - ) - ).toEqual(['The operation count does not accept any field as argument']); - } + it('does not return an error if count() is called without a field', () => { + expect( + formulaOperation.getErrorMessage!( + getNewLayerWithFormula('count()'), + 'col1', + indexPattern, + operationDefinitionMap + ) + ).toEqual(undefined); }); it('returns an error if an operation with required parameters does not receive them', () => { diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/formula/generate.ts b/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/formula/generate.ts index 4be0df4f86c1b..01bae7d7511b0 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/formula/generate.ts +++ b/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/formula/generate.ts @@ -6,6 +6,7 @@ */ import { isObject } from 'lodash'; +import { DOCUMENT_FIELD_NAME } from '../../../../../common'; import { FieldBasedIndexPatternColumn, GenericOperationDefinition, @@ -25,7 +26,7 @@ export function getSafeFieldName({ operationType, }: FieldBasedIndexPatternColumn) { // return empty for the records field - if (!fieldName || operationType === 'count') { + if (!fieldName || (operationType === 'count' && fieldName === DOCUMENT_FIELD_NAME)) { return ''; } if (unquotedStringRegex.test(fieldName)) { @@ -66,7 +67,10 @@ export function generateFormula( ', ' + formulaNamedArgs.map(({ name, value }) => `${name}=${value}`).join(', '); } if (previousColumn.filter) { - if (previousColumn.operationType !== 'count') { + if ( + previousColumn.operationType !== 'count' || + ('sourceField' in previousColumn && previousColumn.sourceField !== DOCUMENT_FIELD_NAME) + ) { previousFormula += ', '; } previousFormula += @@ -74,7 +78,11 @@ export function generateFormula( `'${previousColumn.filter.query.replace(/'/g, `\\'`)}'`; // replace all } if (previousColumn.timeShift) { - if (previousColumn.operationType !== 'count' || previousColumn.filter) { + if ( + previousColumn.operationType !== 'count' || + ('sourceField' in previousColumn && previousColumn.sourceField !== DOCUMENT_FIELD_NAME) || + previousColumn.filter + ) { previousFormula += ', '; } previousFormula += `shift='${previousColumn.timeShift}'`; diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/formula/parse.ts b/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/formula/parse.ts index 371c7e268388b..63e0935a3425b 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/formula/parse.ts +++ b/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/formula/parse.ts @@ -103,9 +103,10 @@ function extractColumns( if (nodeOperation.input === 'field') { const [fieldName] = variables.filter((v): v is TinymathVariable => isObject(v)); // a validation task passed before executing this and checked already there's a field - const field = shouldHaveFieldArgument(node) - ? indexPattern.getFieldByName(fieldName.value)! - : documentField; + let field = fieldName ? indexPattern.getFieldByName(fieldName.value) : undefined; + if (!shouldHaveFieldArgument(node) && !field) { + field = documentField; + } const mappedParams = { ...mergeWithGlobalFilter( @@ -122,7 +123,8 @@ function extractColumns( { layer, indexPattern, - field, + // checked in the validation phase + field: field!, }, mappedParams ); diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/formula/validation.ts b/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/formula/validation.ts index 5936b90c095ec..28e015e4fc0b5 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/formula/validation.ts +++ b/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/formula/validation.ts @@ -638,23 +638,23 @@ function runFullASTValidation( } } else { if (nodeOperation.input === 'field') { - if (shouldHaveFieldArgument(node)) { - if (!isArgumentValidType(firstArg, 'variable')) { - if (isMathNode(firstArg)) { - errors.push( - getMessageFromId({ - messageId: 'wrongFirstArgument', - values: { - operation: node.name, - type: i18n.translate('xpack.lens.indexPattern.formulaFieldValue', { - defaultMessage: 'field', - }), - argument: `math operation`, - }, - locations: node.location ? [node.location] : [], - }) - ); - } else { + if (!isArgumentValidType(firstArg, 'variable')) { + if (isMathNode(firstArg)) { + errors.push( + getMessageFromId({ + messageId: 'wrongFirstArgument', + values: { + operation: node.name, + type: i18n.translate('xpack.lens.indexPattern.formulaFieldValue', { + defaultMessage: 'field', + }), + argument: `math operation`, + }, + locations: node.location ? [node.location] : [], + }) + ); + } else { + if (shouldHaveFieldArgument(node)) { errors.push( getMessageFromId({ messageId: 'wrongFirstArgument', @@ -673,41 +673,28 @@ function runFullASTValidation( }) ); } - } else { - // If the first argument is valid proceed with the other arguments validation - const fieldErrors = validateFieldArguments(node, variables, { - isFieldOperation: true, - firstArg, - returnedType: getReturnedType(nodeOperation, indexPattern, firstArg), - }); - if (fieldErrors.length) { - errors.push(...fieldErrors); - } } - const functionErrors = validateFunctionArguments(node, functions, 0, { + } else { + // If the first argument is valid proceed with the other arguments validation + const fieldErrors = validateFieldArguments(node, variables, { isFieldOperation: true, - type: i18n.translate('xpack.lens.indexPattern.formulaFieldValue', { - defaultMessage: 'field', - }), - firstArgValidation: false, + firstArg, + returnedType: getReturnedType(nodeOperation, indexPattern, firstArg), }); - if (functionErrors.length) { - errors.push(...functionErrors); - } - } else { - // Named arguments only - if (functions?.length || variables?.length) { - errors.push( - getMessageFromId({ - messageId: 'shouldNotHaveField', - values: { - operation: node.name, - }, - locations: node.location ? [node.location] : [], - }) - ); + if (fieldErrors.length) { + errors.push(...fieldErrors); } } + const functionErrors = validateFunctionArguments(node, functions, 0, { + isFieldOperation: true, + type: i18n.translate('xpack.lens.indexPattern.formulaFieldValue', { + defaultMessage: 'field', + }), + firstArgValidation: false, + }); + if (functionErrors.length) { + errors.push(...functionErrors); + } if (!canHaveParams(nodeOperation) && namedArguments.length) { errors.push( getMessageFromId({ diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/terms/terms.test.tsx b/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/terms/terms.test.tsx index 335677b279132..c4661d6799df5 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/terms/terms.test.tsx +++ b/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/terms/terms.test.tsx @@ -2555,13 +2555,19 @@ describe('terms', () => { const functionComboBox = comboBoxes.filter( '[data-test-subj="indexPattern-reference-function"]' ); - const fieldComboBox = comboBoxes.filter('[data-test-subj="indexPattern-dimension-field"]'); const option = functionComboBox.prop('options')!.find(({ label }) => label === 'Average')!; act(() => { functionComboBox.prop('onChange')!([option]); }); + instance.update(); - expect(fieldComboBox.prop('isInvalid')).toBeTruthy(); + expect( + instance + .find('ReferenceEditor') + .find(EuiComboBox) + .filter('[data-test-subj="indexPattern-dimension-field"]') + .prop('isInvalid') + ).toBeTruthy(); expect(updateLayerSpy).not.toHaveBeenCalled(); }); diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/operations/operations.test.ts b/x-pack/plugins/lens/public/indexpattern_datasource/operations/operations.test.ts index 0f626cef850f9..4e3ee9b1ff66f 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/operations/operations.test.ts +++ b/x-pack/plugins/lens/public/indexpattern_datasource/operations/operations.test.ts @@ -56,7 +56,7 @@ describe('getOperationTypesForField', () => { aggregatable: true, searchable: true, }) - ).toEqual(['terms', 'unique_count', 'last_value']); + ).toEqual(['terms', 'unique_count', 'last_value', 'count']); }); it('should return only bucketed operations on strings when passed proper filterOperations function', () => { @@ -96,6 +96,7 @@ describe('getOperationTypesForField', () => { 'percentile', 'percentile_rank', 'last_value', + 'count', ]); }); @@ -122,6 +123,7 @@ describe('getOperationTypesForField', () => { 'percentile', 'percentile_rank', 'last_value', + 'count', ]); }); @@ -388,6 +390,21 @@ describe('getOperationTypesForField', () => { "operationType": "last_value", "type": "field", }, + Object { + "field": "timestamp", + "operationType": "count", + "type": "field", + }, + Object { + "field": "bytes", + "operationType": "count", + "type": "field", + }, + Object { + "field": "source", + "operationType": "count", + "type": "field", + }, Object { "operationType": "math", "type": "managedReference", diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/pure_helpers.ts b/x-pack/plugins/lens/public/indexpattern_datasource/pure_helpers.ts index e22fb30b23b27..6c81634fb4c09 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/pure_helpers.ts +++ b/x-pack/plugins/lens/public/indexpattern_datasource/pure_helpers.ts @@ -7,6 +7,7 @@ import { keyBy } from 'lodash'; import { IndexPatternField, IndexPatternPrivateState } from './types'; +import { documentField } from './document_field'; export function fieldExists( existingFields: IndexPatternPrivateState['existingFields'], @@ -16,7 +17,13 @@ export function fieldExists( return existingFields[indexPatternTitle] && existingFields[indexPatternTitle][fieldName]; } -export function getFieldByNameFactory(newFields: IndexPatternField[]) { +export function getFieldByNameFactory( + newFields: IndexPatternField[], + addRecordsField: boolean = true +) { const fieldsLookup = keyBy(newFields, 'name'); + if (addRecordsField) { + fieldsLookup[documentField.name] = documentField; + } return (name: string) => fieldsLookup[name]; } diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/utils.tsx b/x-pack/plugins/lens/public/indexpattern_datasource/utils.tsx index fe12328e3177a..dc95f06aa8ac6 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/utils.tsx +++ b/x-pack/plugins/lens/public/indexpattern_datasource/utils.tsx @@ -504,7 +504,7 @@ export function getFiltersInLayer( return { error: i18n.translate('xpack.lens.indexPattern.nonDefaultTimeFieldError', { defaultMessage: - 'Underlying data does not support date histograms on non-default time fields if time field is set on the data view', + '"Explore data in Discover" does not support date histograms on non-default time fields if time field is set on the data view', }), }; } diff --git a/x-pack/plugins/maps/public/actions/layer_actions.ts b/x-pack/plugins/maps/public/actions/layer_actions.ts index 4fb817c699e9e..9c2fea2a302d5 100644 --- a/x-pack/plugins/maps/public/actions/layer_actions.ts +++ b/x-pack/plugins/maps/public/actions/layer_actions.ts @@ -24,7 +24,7 @@ import { } from '../selectors/map_selectors'; import { FLYOUT_STATE } from '../reducers/ui'; import { cancelRequest, getInspectorAdapters } from '../reducers/non_serializable_instances'; -import { setDrawMode, updateFlyout } from './ui_actions'; +import { hideTOCDetails, setDrawMode, showTOCDetails, updateFlyout } from './ui_actions'; import { ADD_LAYER, ADD_WAITING_FOR_MAP_READY_LAYER, @@ -57,17 +57,24 @@ import { StyleDescriptor, TileMetaFeature, VectorLayerDescriptor, + VectorStyleDescriptor, } from '../../common/descriptor_types'; import { ILayer } from '../classes/layers/layer'; import { IVectorLayer } from '../classes/layers/vector_layer'; import { OnSourceChangeArgs } from '../classes/sources/source'; -import { DRAW_MODE, LAYER_STYLE_TYPE, LAYER_TYPE, SCALING_TYPES } from '../../common/constants'; +import { + DRAW_MODE, + LAYER_STYLE_TYPE, + LAYER_TYPE, + SCALING_TYPES, + STYLE_TYPE, +} from '../../common/constants'; import { IVectorStyle } from '../classes/styles/vector/vector_style'; import { notifyLicensedFeatureUsage } from '../licensed_features'; import { IESAggField } from '../classes/fields/agg'; import { IField } from '../classes/fields/field'; import type { IESSource } from '../classes/sources/es_source'; -import { getDrawMode } from '../selectors/ui_selectors'; +import { getDrawMode, getOpenTOCDetails } from '../selectors/ui_selectors'; export function trackCurrentLayerState(layerId: string) { return { @@ -196,6 +203,15 @@ export function addPreviewLayers(layerDescriptors: LayerDescriptor[]) { layerDescriptors.forEach((layerDescriptor) => { dispatch(addLayer({ ...layerDescriptor, __isPreviewLayer: true })); + + // Auto open layer legend to increase legend discoverability + if ( + layerDescriptor.style && + (hasByValueStyling(layerDescriptor.style) || + layerDescriptor.style.type === LAYER_STYLE_TYPE.HEATMAP) + ) { + dispatch(showTOCDetails(layerDescriptor.id)); + } }); }; } @@ -602,6 +618,10 @@ function removeLayerFromLayerList(layerId: string) { if (layerId === editState?.layerId) { dispatch(setDrawMode(DRAW_MODE.NONE)); } + const openTOCDetails = getOpenTOCDetails(getState()); + if (openTOCDetails.includes(layerId)) { + dispatch(hideTOCDetails(layerId)); + } }; } @@ -644,6 +664,11 @@ export function updateLayerStyle(layerId: string, styleDescriptor: StyleDescript }, }); + // Auto open layer legend to increase legend discoverability + if (hasByValueStyling(styleDescriptor)) { + dispatch(showTOCDetails(layerId)); + } + // Ensure updateStyleMeta is triggered // syncDataForLayer may not trigger endDataLoad if no re-fetch is required dispatch(updateStyleMeta(layerId)); @@ -742,3 +767,12 @@ function clearInspectorAdapters(layer: ILayer, adapters: Adapters) { }); } } + +function hasByValueStyling(styleDescriptor: StyleDescriptor) { + return ( + styleDescriptor.type === LAYER_STYLE_TYPE.VECTOR && + Object.values((styleDescriptor as VectorStyleDescriptor).properties).some((styleProperty) => { + return (styleProperty as { type?: STYLE_TYPE })?.type === STYLE_TYPE.DYNAMIC; + }) + ); +} diff --git a/x-pack/plugins/maps/public/actions/ui_actions.ts b/x-pack/plugins/maps/public/actions/ui_actions.ts index bdc0e91556712..52f0185daf0f2 100644 --- a/x-pack/plugins/maps/public/actions/ui_actions.ts +++ b/x-pack/plugins/maps/public/actions/ui_actions.ts @@ -8,7 +8,7 @@ import { AnyAction } from 'redux'; import { ThunkDispatch } from 'redux-thunk'; import { MapStoreState } from '../reducers/store'; -import { getFlyoutDisplay } from '../selectors/ui_selectors'; +import { getFlyoutDisplay, getOpenTOCDetails } from '../selectors/ui_selectors'; import { FLYOUT_STATE } from '../reducers/ui'; import { setQuery, trackMapSettings } from './map_actions'; import { setSelectedLayer } from './layer_actions'; @@ -82,9 +82,20 @@ export function setOpenTOCDetails(layerIds?: string[]) { } export function showTOCDetails(layerId: string) { - return { - type: SHOW_TOC_DETAILS, - layerId, + return ( + dispatch: ThunkDispatch, + getState: () => MapStoreState + ) => { + const openTOCDetails = getOpenTOCDetails(getState()); + if (openTOCDetails.includes(layerId)) { + // details already open, nothing to do + return; + } + + dispatch({ + type: SHOW_TOC_DETAILS, + layerId, + }); }; } diff --git a/x-pack/plugins/osquery/common/constants.ts b/x-pack/plugins/osquery/common/constants.ts index 5354332fd89f8..4d6be1f3f2ae8 100644 --- a/x-pack/plugins/osquery/common/constants.ts +++ b/x-pack/plugins/osquery/common/constants.ts @@ -9,3 +9,5 @@ export const DEFAULT_MAX_TABLE_QUERY_SIZE = 10000; export const DEFAULT_DARK_MODE = 'theme:darkMode'; export const OSQUERY_INTEGRATION_NAME = 'osquery_manager'; export const BASE_PATH = '/app/osquery'; +export const ACTIONS_INDEX = `.logs-${OSQUERY_INTEGRATION_NAME}.actions`; +export const ACTION_RESPONSES_INDEX = `.logs-${OSQUERY_INTEGRATION_NAME}.action.responses`; diff --git a/x-pack/plugins/osquery/common/schemas/common/schemas.ts b/x-pack/plugins/osquery/common/schemas/common/schemas.ts index 24eaa11a7bf84..fda6e2cec8b50 100644 --- a/x-pack/plugins/osquery/common/schemas/common/schemas.ts +++ b/x-pack/plugins/osquery/common/schemas/common/schemas.ts @@ -53,6 +53,20 @@ export type SavedQueryId = t.TypeOf; export const savedQueryIdOrUndefined = t.union([savedQueryId, t.undefined]); export type SavedQueryIdOrUndefined = t.TypeOf; +export const packId = t.string; +export type PackId = t.TypeOf; +export const packIdOrUndefined = t.union([packId, t.undefined]); +export type PackIdOrUndefined = t.TypeOf; + +export const executionContext = t.type({ + name: t.union([t.string, t.undefined]), + url: t.union([t.string, t.undefined]), +}); + +export type ExecutionContext = t.TypeOf; +export const executionContextOrUndefined = t.union([executionContext, t.undefined]); +export type ExecutionContextOrUndefined = t.TypeOf; + export const ecsMapping = t.record( t.string, t.partial({ @@ -63,3 +77,32 @@ export const ecsMapping = t.record( export type ECSMapping = t.TypeOf; export const ecsMappingOrUndefined = t.union([ecsMapping, t.undefined]); export type ECSMappingOrUndefined = t.TypeOf; + +export const stringArrayOrUndefined = t.union([t.array(t.string), t.undefined]); +export type StringArrayOrUndefined = t.TypeOf; + +export const arrayQueries = t.array( + t.type({ + id, + query, + ecsMapping, + version, + platform, + }) +); +export type ArrayQueries = t.TypeOf; +export const objectQueries = t.record( + t.string, + t.type({ + query, + ecsMapping: ecsMappingOrUndefined, + version: versionOrUndefined, + platform: platformOrUndefined, + saved_query_id: savedQueryIdOrUndefined, + }) +); +export type ObjectQueries = t.TypeOf; +export const queries = t.union([arrayQueries, objectQueries]); +export type Queries = t.TypeOf; +export const queriesOrUndefined = t.union([queries, t.undefined]); +export type QueriesOrUndefined = t.TypeOf; diff --git a/x-pack/plugins/osquery/common/schemas/routes/action/create_action_request_body_schema.ts b/x-pack/plugins/osquery/common/schemas/routes/action/create_action_request_body_schema.ts deleted file mode 100644 index a85471a95a137..0000000000000 --- a/x-pack/plugins/osquery/common/schemas/routes/action/create_action_request_body_schema.ts +++ /dev/null @@ -1,24 +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 * as t from 'io-ts'; - -import { - query, - agentSelection, - ecsMappingOrUndefined, - savedQueryIdOrUndefined, -} from '../../common/schemas'; - -export const createActionRequestBodySchema = t.type({ - agentSelection, - query, - saved_query_id: savedQueryIdOrUndefined, - ecs_mapping: ecsMappingOrUndefined, -}); - -export type CreateActionRequestBodySchema = t.OutputOf; diff --git a/x-pack/plugins/osquery/common/schemas/routes/live_query/create_live_query_request_body_schema.ts b/x-pack/plugins/osquery/common/schemas/routes/live_query/create_live_query_request_body_schema.ts new file mode 100644 index 0000000000000..6d37ab6d56288 --- /dev/null +++ b/x-pack/plugins/osquery/common/schemas/routes/live_query/create_live_query_request_body_schema.ts @@ -0,0 +1,35 @@ +/* + * 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 { + ecsMappingOrUndefined, + savedQueryIdOrUndefined, + packIdOrUndefined, + queryOrUndefined, + queriesOrUndefined, + stringArrayOrUndefined, +} from '../../common/schemas'; + +export const createLiveQueryRequestBodySchema = t.type({ + agent_ids: stringArrayOrUndefined, + agent_all: t.union([t.boolean, t.undefined]), + agent_platforms: stringArrayOrUndefined, + agent_policy_ids: stringArrayOrUndefined, + query: queryOrUndefined, + queries: queriesOrUndefined, + saved_query_id: savedQueryIdOrUndefined, + ecs_mapping: ecsMappingOrUndefined, + pack_id: packIdOrUndefined, + alert_ids: stringArrayOrUndefined, + case_ids: stringArrayOrUndefined, + event_ids: stringArrayOrUndefined, + metadata: t.union([t.object, t.undefined]), +}); + +export type CreateLiveQueryRequestBodySchema = t.OutputOf; diff --git a/x-pack/plugins/osquery/common/schemas/routes/action/index.ts b/x-pack/plugins/osquery/common/schemas/routes/live_query/index.ts similarity index 81% rename from x-pack/plugins/osquery/common/schemas/routes/action/index.ts rename to x-pack/plugins/osquery/common/schemas/routes/live_query/index.ts index 286aa2e5128b2..0438204e6c86e 100644 --- a/x-pack/plugins/osquery/common/schemas/routes/action/index.ts +++ b/x-pack/plugins/osquery/common/schemas/routes/live_query/index.ts @@ -5,4 +5,4 @@ * 2.0. */ -export * from './create_action_request_body_schema'; +export * from './create_live_query_request_body_schema'; diff --git a/x-pack/plugins/osquery/common/search_strategy/common/index.ts b/x-pack/plugins/osquery/common/search_strategy/common/index.ts index a0b7b5719cbcc..6139682935b66 100644 --- a/x-pack/plugins/osquery/common/search_strategy/common/index.ts +++ b/x-pack/plugins/osquery/common/search_strategy/common/index.ts @@ -20,12 +20,6 @@ export interface Inspect { dsl: string[]; } -export interface PageInfoPaginated { - activePage: number; - fakeTotalCount: number; - showMorePagesIndicator: boolean; -} - export interface CursorType { value?: Maybe; tiebreaker?: Maybe; @@ -64,8 +58,6 @@ export interface PaginationInputPaginated { activePage: number; /** The cursorStart parameter defines the start of the results to be displayed */ cursorStart: number; - /** The fakePossibleCount parameter determines the total count in order to show 5 additional pages */ - fakePossibleCount: number; /** The querySize parameter is the number of items to be returned */ querySize: number; } diff --git a/x-pack/plugins/osquery/common/search_strategy/osquery/actions/index.ts b/x-pack/plugins/osquery/common/search_strategy/osquery/actions/index.ts index 217f150f514a4..283ae46269422 100644 --- a/x-pack/plugins/osquery/common/search_strategy/osquery/actions/index.ts +++ b/x-pack/plugins/osquery/common/search_strategy/osquery/actions/index.ts @@ -6,9 +6,9 @@ */ import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; -import type { IEsSearchResponse } from '@kbn/data-plugin/common'; +import type { IEsSearchResponse, IKibanaSearchResponse } from '@kbn/data-plugin/common'; -import type { Inspect, Maybe, PageInfoPaginated } from '../../common'; +import type { Inspect, Maybe } from '../../common'; import type { RequestOptions, RequestOptionsPaginated } from '../..'; export type ActionEdges = estypes.SearchResponse['hits']['hits']; @@ -16,16 +16,40 @@ export type ActionEdges = estypes.SearchResponse['hits']['hits']; export type ActionResultEdges = estypes.SearchResponse['hits']['hits']; export interface ActionsStrategyResponse extends IEsSearchResponse { edges: ActionEdges; - totalCount: number; - pageInfo: PageInfoPaginated; inspect?: Maybe; } +export interface ActionDetails { + action_id: string; + expiration: string; + '@timestamp': string; + agent_all: boolean; + agent_ids: string[]; + agent_platforoms: string[]; + agent_policy_ids: string[]; + agents: string[]; + user_id?: string; + pack_id?: string; + pack_name?: string; + pack_prebuilt?: boolean; + status?: string; + queries?: Array<{ + action_id: string; + id: string; + query: string; + agents: string[]; + ecs_mapping?: unknown; + version?: string; + platform?: string; + saved_query_id?: string; + expiration?: string; + }>; +} + export type ActionsRequestOptions = RequestOptionsPaginated; export interface ActionDetailsStrategyResponse extends IEsSearchResponse { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - actionDetails: Record; + actionDetails: estypes.SearchHit; inspect?: Maybe; } @@ -33,10 +57,26 @@ export interface ActionDetailsRequestOptions extends RequestOptions { actionId: string; } -export interface ActionResultsStrategyResponse extends IEsSearchResponse { +export interface ActionResultsStrategyResponse + extends IKibanaSearchResponse< + estypes.SearchResponse< + object, + { + aggs: { + responses_by_action_id: estypes.AggregationsSingleBucketAggregateBase & { + rows_count: estypes.AggregationsSumAggregate; + responses: { + buckets: Array<{ + key: string; + doc_count: number; + }>; + }; + }; + }; + } + > + > { edges: ActionResultEdges; - totalCount: number; - pageInfo: PageInfoPaginated; inspect?: Maybe; } diff --git a/x-pack/plugins/osquery/common/search_strategy/osquery/agents/index.ts b/x-pack/plugins/osquery/common/search_strategy/osquery/agents/index.ts index 53492f937db58..06447beb18eac 100644 --- a/x-pack/plugins/osquery/common/search_strategy/osquery/agents/index.ts +++ b/x-pack/plugins/osquery/common/search_strategy/osquery/agents/index.ts @@ -7,14 +7,12 @@ import type { IEsSearchResponse } from '@kbn/data-plugin/common'; -import type { Inspect, Maybe, PageInfoPaginated } from '../../common'; +import type { Inspect, Maybe } from '../../common'; import type { RequestOptionsPaginated } from '../..'; import type { Agent } from '../../../shared_imports'; export interface AgentsStrategyResponse extends IEsSearchResponse { edges: Agent[]; - totalCount: number; - pageInfo: PageInfoPaginated; inspect?: Maybe; } diff --git a/x-pack/plugins/osquery/common/search_strategy/osquery/index.ts b/x-pack/plugins/osquery/common/search_strategy/osquery/index.ts index b089d1fcf6484..b8985297b3062 100644 --- a/x-pack/plugins/osquery/common/search_strategy/osquery/index.ts +++ b/x-pack/plugins/osquery/common/search_strategy/osquery/index.ts @@ -40,6 +40,7 @@ export interface RequestBasicOptions extends IEsSearchRequest { aggregations?: Record; docValueFields?: DocValueFields[]; factoryQueryType?: FactoryQueryTypes; + componentTemplateExists?: boolean; } /** A mapping of semantic fields to their document counterparts */ diff --git a/x-pack/plugins/osquery/common/search_strategy/osquery/results/index.ts b/x-pack/plugins/osquery/common/search_strategy/osquery/results/index.ts index 5a0e14f99ed70..d7777e389dde8 100644 --- a/x-pack/plugins/osquery/common/search_strategy/osquery/results/index.ts +++ b/x-pack/plugins/osquery/common/search_strategy/osquery/results/index.ts @@ -8,15 +8,13 @@ import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import type { IEsSearchResponse } from '@kbn/data-plugin/common'; -import type { Inspect, Maybe, PageInfoPaginated, SortField } from '../../common'; +import type { Inspect, Maybe, SortField } from '../../common'; import type { RequestOptionsPaginated } from '../..'; export type ResultEdges = estypes.SearchResponse['hits']['hits']; export interface ResultsStrategyResponse extends IEsSearchResponse { edges: ResultEdges; - totalCount: number; - pageInfo: PageInfoPaginated; inspect?: Maybe; } diff --git a/x-pack/plugins/osquery/common/types.ts b/x-pack/plugins/osquery/common/types.ts index ef2c077056b86..981dbef21de7c 100644 --- a/x-pack/plugins/osquery/common/types.ts +++ b/x-pack/plugins/osquery/common/types.ts @@ -5,12 +5,6 @@ * 2.0. */ -import type { - PackagePolicy, - PackagePolicyInput, - PackagePolicyInputStream, -} from '@kbn/fleet-plugin/common'; - export const savedQuerySavedObjectType = 'osquery-saved-query'; export const packSavedObjectType = 'osquery-pack'; export const packAssetSavedObjectType = 'osquery-pack-asset'; @@ -36,42 +30,3 @@ export type RequiredKeepUndefined = { [K in keyof T]-?: [T[K]] } extends infe ? { [K in keyof U]: U[K][0] } : never : never; - -export interface OsqueryManagerPackagePolicyConfigRecordEntry { - type: string; - value: string; - frozen?: boolean; -} - -export interface OsqueryManagerPackagePolicyConfigRecord { - id: OsqueryManagerPackagePolicyConfigRecordEntry; - query: OsqueryManagerPackagePolicyConfigRecordEntry; - interval: OsqueryManagerPackagePolicyConfigRecordEntry; - platform?: OsqueryManagerPackagePolicyConfigRecordEntry; - version?: OsqueryManagerPackagePolicyConfigRecordEntry; - ecs_mapping?: - | { - value: Record< - string, - { - field: string; - } - >; - } - | undefined; -} - -export interface OsqueryManagerPackagePolicyInputStream - extends Omit { - config?: OsqueryManagerPackagePolicyConfigRecord; - vars?: OsqueryManagerPackagePolicyConfigRecord; -} - -export interface OsqueryManagerPackagePolicyInput extends Omit { - streams: OsqueryManagerPackagePolicyInputStream[]; -} - -export interface OsqueryManagerPackagePolicy extends Omit { - inputs: OsqueryManagerPackagePolicyInput[]; - read_only?: boolean; -} diff --git a/x-pack/plugins/osquery/common/utils/build_query/filters.ts b/x-pack/plugins/osquery/common/utils/build_query/filters.ts index a9a9b3319661b..0d82a581e27d9 100644 --- a/x-pack/plugins/osquery/common/utils/build_query/filters.ts +++ b/x-pack/plugins/osquery/common/utils/build_query/filters.ts @@ -6,8 +6,26 @@ */ import { isEmpty, isString } from 'lodash/fp'; - +import type { PaginationInputPaginated, Inspect } from '../../search_strategy'; import type { ESQuery } from '../../typed_json'; export const createQueryFilterClauses = (filterQuery: ESQuery | string | undefined) => !isEmpty(filterQuery) ? [isString(filterQuery) ? JSON.parse(filterQuery) : filterQuery] : []; + +export const createFilter = (filterQuery: ESQuery | string | undefined) => + isString(filterQuery) ? filterQuery : JSON.stringify(filterQuery); + +export type InspectResponse = Inspect & { response: string[] }; + +export const generateTablePaginationOptions = ( + activePage: number, + limit: number +): PaginationInputPaginated => { + const cursorStart = activePage * limit; + + return { + activePage, + cursorStart, + querySize: limit, + }; +}; diff --git a/x-pack/plugins/osquery/cypress/integration/all/add_integration.spec.ts b/x-pack/plugins/osquery/cypress/integration/all/add_integration.spec.ts index 1ad43e5003827..a6850e7fdbc03 100644 --- a/x-pack/plugins/osquery/cypress/integration/all/add_integration.spec.ts +++ b/x-pack/plugins/osquery/cypress/integration/all/add_integration.spec.ts @@ -76,7 +76,8 @@ describe('ALL - Add Integration', () => { addIntegration(); cy.contains('osquery_manager-'); }); - it('should have integration and packs copied when upgrading integration', () => { + + it.skip('should have integration and packs copied when upgrading integration', () => { const packageName = 'osquery_manager'; const oldVersion = '1.2.0'; const newVersion = '1.3.1'; diff --git a/x-pack/plugins/osquery/cypress/integration/all/alerts.spec.ts b/x-pack/plugins/osquery/cypress/integration/all/alerts.spec.ts index 4ef3e263df01c..80516f480e803 100644 --- a/x-pack/plugins/osquery/cypress/integration/all/alerts.spec.ts +++ b/x-pack/plugins/osquery/cypress/integration/all/alerts.spec.ts @@ -58,11 +58,11 @@ describe('Alert Event Details', () => { cy.getBySel('ruleSwitch').should('have.attr', 'aria-checked', 'true'); }); - it('should be able to run live query and add to timeline (-depending on the previous test)', () => { + it.skip('should be able to run live query and add to timeline (-depending on the previous test)', () => { const TIMELINE_NAME = 'Untitled timeline'; cy.visit('/app/security/alerts'); cy.getBySel('header-page-title').contains('Alerts').should('exist'); - cy.getBySel('timeline-context-menu-button').first().click({ force: true }); + cy.getBySel('timeline-context-menu-button').first().click(); cy.getBySel('osquery-action-item').should('exist').contains('Run Osquery'); cy.getBySel('expand-event').first().click(); cy.getBySel('take-action-dropdown-btn').click(); diff --git a/x-pack/plugins/osquery/cypress/integration/all/live_query.spec.ts b/x-pack/plugins/osquery/cypress/integration/all/live_query.spec.ts index 930d1e29c2ebf..731802a021ae4 100644 --- a/x-pack/plugins/osquery/cypress/integration/all/live_query.spec.ts +++ b/x-pack/plugins/osquery/cypress/integration/all/live_query.spec.ts @@ -17,6 +17,7 @@ import { typeInOsqueryFieldInput, } from '../../tasks/live_query'; import { + LIVE_QUERY_EDITOR, RESULTS_TABLE, RESULTS_TABLE_BUTTON, RESULTS_TABLE_CELL_WRRAPER, @@ -92,4 +93,23 @@ describe('ALL - Live Query', () => { cy.react('ReactAce', { props: { value: 'select * from users' } }).should('exist'); }); + + it.skip('should run live pack', () => { + cy.contains('New live query').click(); + cy.contains('Run a set of queries in a pack.').click(); + cy.get(LIVE_QUERY_EDITOR).should('not.exist'); + cy.getBySel('select-live-pack').click(); + cy.contains('Integration').click(); + cy.contains('This table contains 1 rows.'); + cy.contains('Integration ('); + cy.contains('system_memory_linux_elastic'); + selectAllAgents(); + submitQuery(); + cy.getBySel('live-query-loading').should('exist'); + cy.getBySel('live-query-loading', { timeout: 10000 }).should('not.exist'); + cy.getBySel('toggleIcon-events').click(); + checkResults(); + navigateTo('/app/osquery'); + cy.contains('Integration'); + }); }); diff --git a/x-pack/plugins/osquery/cypress/integration/all/packs.spec.ts b/x-pack/plugins/osquery/cypress/integration/all/packs.spec.ts index 4a8842d21c9b1..260408ca428c1 100644 --- a/x-pack/plugins/osquery/cypress/integration/all/packs.spec.ts +++ b/x-pack/plugins/osquery/cypress/integration/all/packs.spec.ts @@ -96,7 +96,7 @@ describe('ALL - Packs', () => { cy.contains('ID must be unique').should('exist'); cy.react('EuiFlyoutFooter').react('EuiButtonEmpty').contains('Cancel').click(); }); - it('should open lens in new tab', () => { + it.skip('should open lens in new tab', () => { let lensUrl = ''; cy.window().then((win) => { cy.stub(win, 'open') diff --git a/x-pack/plugins/osquery/cypress/integration/roles/alert_test.spec.ts b/x-pack/plugins/osquery/cypress/integration/roles/alert_test.spec.ts index 5d25b6599b13c..b68cd0d17e466 100644 --- a/x-pack/plugins/osquery/cypress/integration/roles/alert_test.spec.ts +++ b/x-pack/plugins/osquery/cypress/integration/roles/alert_test.spec.ts @@ -13,7 +13,7 @@ import { preparePack } from '../../tasks/packs'; import { closeModalIfVisible } from '../../tasks/integrations'; import { navigateTo } from '../../tasks/navigation'; -describe('Alert_Test', () => { +describe.skip('Alert_Test', () => { before(() => { runKbnArchiverScript(ArchiverMethod.LOAD, 'pack'); runKbnArchiverScript(ArchiverMethod.LOAD, 'rule'); diff --git a/x-pack/plugins/osquery/cypress/integration/roles/t1_analyst.spec.ts b/x-pack/plugins/osquery/cypress/integration/roles/t1_analyst.spec.ts index 51270332e0a51..57995296cfb17 100644 --- a/x-pack/plugins/osquery/cypress/integration/roles/t1_analyst.spec.ts +++ b/x-pack/plugins/osquery/cypress/integration/roles/t1_analyst.spec.ts @@ -12,7 +12,7 @@ import { checkResults, selectAllAgents, submitQuery } from '../../tasks/live_que import { ArchiverMethod, runKbnArchiverScript } from '../../tasks/archiver'; import { getSavedQueriesDropdown, LIVE_QUERY_EDITOR } from '../../screens/live_query'; -describe('T1 Analyst - READ + runSavedQueries ', () => { +describe.skip('T1 Analyst - READ + runSavedQueries ', () => { const SAVED_QUERY_ID = 'Saved-Query-Id'; beforeEach(() => { @@ -50,7 +50,6 @@ describe('T1 Analyst - READ + runSavedQueries ', () => { cy.contains('select * from uptime'); cy.wait(1000); cy.react('EuiTableBody').first().react('DefaultItemAction').first().click(); - selectAllAgents(); cy.contains(SAVED_QUERY_ID); submitQuery(); checkResults(); diff --git a/x-pack/plugins/osquery/cypress/integration/roles/t2_analyst.spec.ts b/x-pack/plugins/osquery/cypress/integration/roles/t2_analyst.spec.ts index 901b18f1461c7..cf91a49e9dad6 100644 --- a/x-pack/plugins/osquery/cypress/integration/roles/t2_analyst.spec.ts +++ b/x-pack/plugins/osquery/cypress/integration/roles/t2_analyst.spec.ts @@ -19,7 +19,7 @@ import { import { ArchiverMethod, runKbnArchiverScript } from '../../tasks/archiver'; import { getSavedQueriesComplexTest } from '../../tasks/saved_queries'; -describe('T2 Analyst - READ + Write Live/Saved + runSavedQueries ', () => { +describe.skip('T2 Analyst - READ + Write Live/Saved + runSavedQueries ', () => { const SAVED_QUERY_ID = 'Saved-Query-Id'; const NEW_SAVED_QUERY_ID = 'Saved-Query-Id-T2'; const NEW_SAVED_QUERY_DESCRIPTION = 'Test saved query description T2'; diff --git a/x-pack/plugins/osquery/cypress/tasks/saved_queries.ts b/x-pack/plugins/osquery/cypress/tasks/saved_queries.ts index 66e606132b05e..d288584b6a169 100644 --- a/x-pack/plugins/osquery/cypress/tasks/saved_queries.ts +++ b/x-pack/plugins/osquery/cypress/tasks/saved_queries.ts @@ -75,7 +75,7 @@ export const getSavedQueriesComplexTest = (savedQueryId: string, savedQueryDescr // visit Status results cy.react('EuiTab', { props: { id: 'status' } }).click(); cy.react('EuiTableRow').should('have.lengthOf', 1); - cy.contains('Successful').siblings().contains(1); + // cy.contains('Successful').siblings().contains(1); // play saved query cy.contains('Saved queries').click(); diff --git a/x-pack/plugins/osquery/kibana.json b/x-pack/plugins/osquery/kibana.json index 1ea8468529b85..539c2f7dc18dc 100644 --- a/x-pack/plugins/osquery/kibana.json +++ b/x-pack/plugins/osquery/kibana.json @@ -12,6 +12,7 @@ "requiredPlugins": [ "actions", "data", + "dataViews", "discover", "features", "navigation", diff --git a/x-pack/plugins/osquery/public/action_results/action_agents_status.tsx b/x-pack/plugins/osquery/public/action_results/action_agents_status.tsx deleted file mode 100644 index f5b952af8acd4..0000000000000 --- a/x-pack/plugins/osquery/public/action_results/action_agents_status.tsx +++ /dev/null @@ -1,92 +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 { EuiFlexGroup, EuiFlexItem, EuiText } from '@elastic/eui'; -import { FormattedMessage } from '@kbn/i18n-react'; -import React, { useEffect, useMemo, useState } from 'react'; - -import { Direction } from '../../common/search_strategy'; -import { AgentStatusBar } from './action_agents_status_bar'; -import { ActionAgentsStatusBadges } from './action_agents_status_badges'; -import { useActionResults } from './use_action_results'; - -interface ActionAgentsStatusProps { - actionId: string; - expirationDate?: string; - agentIds?: string[]; -} - -const ActionAgentsStatusComponent: React.FC = ({ - actionId, - expirationDate, - agentIds, -}) => { - const [isLive, setIsLive] = useState(true); - const expired = useMemo( - () => (!expirationDate ? false : new Date(expirationDate) < new Date()), - [expirationDate] - ); - const { - // @ts-expect-error update types - data: { aggregations }, - } = useActionResults({ - actionId, - activePage: 0, - agentIds, - limit: 0, - direction: Direction.asc, - sortField: '@timestamp', - isLive, - }); - - const agentStatus = useMemo(() => { - const notRespondedCount = !agentIds?.length ? 0 : agentIds.length - aggregations.totalResponded; - - return { - success: aggregations.successful, - pending: notRespondedCount, - failed: aggregations.failed, - }; - }, [agentIds?.length, aggregations.failed, aggregations.successful, aggregations.totalResponded]); - - useEffect( - () => - setIsLive(() => { - if (!agentIds?.length || expired) return false; - - return !!(aggregations.totalResponded !== agentIds?.length); - }), - [agentIds?.length, aggregations.totalResponded, expired] - ); - - return ( - <> - - - - - - - - - - - - - - - - - ); -}; - -export const ActionAgentsStatus = React.memo(ActionAgentsStatusComponent); diff --git a/x-pack/plugins/osquery/public/action_results/action_results_summary.tsx b/x-pack/plugins/osquery/public/action_results/action_results_summary.tsx index e04f783608420..29d823560d6e3 100644 --- a/x-pack/plugins/osquery/public/action_results/action_results_summary.tsx +++ b/x-pack/plugins/osquery/public/action_results/action_results_summary.tsx @@ -5,8 +5,6 @@ * 2.0. */ -/* eslint-disable @typescript-eslint/no-unused-vars */ - import { i18n } from '@kbn/i18n'; import { EuiInMemoryTable, EuiCodeBlock } from '@elastic/eui'; import React, { useCallback, useEffect, useMemo, useState } from 'react'; @@ -33,10 +31,8 @@ const ActionResultsSummaryComponent: React.FC = ({ expirationDate, agentIds, }) => { - // @ts-expect-error update types - const [pageIndex, setPageIndex] = useState(0); - // @ts-expect-error update types - const [pageSize, setPageSize] = useState(50); + const [pageIndex] = useState(0); + const [pageSize] = useState(50); const expired = useMemo( () => (!expirationDate ? false : new Date(expirationDate) < new Date()), [expirationDate] diff --git a/x-pack/plugins/osquery/public/action_results/use_action_results.ts b/x-pack/plugins/osquery/public/action_results/use_action_results.ts index 629c490660a2e..964feb9eafb3b 100644 --- a/x-pack/plugins/osquery/public/action_results/use_action_results.ts +++ b/x-pack/plugins/osquery/public/action_results/use_action_results.ts @@ -5,9 +5,9 @@ * 2.0. */ +import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { flatten, reverse, uniqBy } from 'lodash/fp'; import { useQuery } from 'react-query'; - import { i18n } from '@kbn/i18n'; import { lastValueFrom } from 'rxjs'; import type { InspectResponse } from '../common/helpers'; @@ -19,7 +19,6 @@ import { import { useKibana } from '../common/lib/kibana'; import type { ResultEdges, - PageInfoPaginated, ActionResultsRequestOptions, ActionResultsStrategyResponse, Direction, @@ -35,8 +34,6 @@ export interface ResultsArgs { id: string; inspect: InspectResponse; isInspected: boolean; - pageInfo: PageInfoPaginated; - totalCount: number; } export interface UseActionResults { @@ -65,7 +62,7 @@ export const useActionResults = ({ const { data } = useKibana().services; const setErrorToast = useErrorToast(); - return useQuery( + return useQuery<{}, Error, ActionResultsStrategyResponse>( ['actionResults', { actionId }], async () => { const responseData = await lastValueFrom( @@ -87,22 +84,23 @@ export const useActionResults = ({ ); const totalResponded = - // @ts-expect-error update types responseData.rawResponse?.aggregations?.aggs.responses_by_action_id?.doc_count ?? 0; const totalRowCount = - // @ts-expect-error update types responseData.rawResponse?.aggregations?.aggs.responses_by_action_id?.rows_count?.value ?? 0; const aggsBuckets = - // @ts-expect-error update types responseData.rawResponse?.aggregations?.aggs.responses_by_action_id?.responses.buckets; - const cachedData = queryClient.getQueryData(['actionResults', { actionId }]); + const cachedData = queryClient.getQueryData([ + 'actionResults', + { actionId }, + ]); - // @ts-expect-error update types const previousEdges = cachedData?.edges.length - ? // @ts-expect-error update types - cachedData?.edges - : agentIds?.map((agentId) => ({ fields: { agent_id: [agentId] } })) ?? []; + ? cachedData?.edges + : agentIds?.map( + (agentId) => + ({ fields: { agent_id: [agentId] } } as unknown as estypes.SearchHit) + ) ?? []; return { ...responseData, @@ -110,9 +108,7 @@ export const useActionResults = ({ aggregations: { totalRowCount, totalResponded, - // @ts-expect-error update types successful: aggsBuckets?.find((bucket) => bucket.key === 'success')?.doc_count ?? 0, - // @ts-expect-error update types failed: aggsBuckets?.find((bucket) => bucket.key === 'error')?.doc_count ?? 0, }, inspect: getInspectResponse(responseData, {} as InspectResponse), @@ -124,7 +120,6 @@ export const useActionResults = ({ aggregations: { totalResponded: 0, successful: 0, - // @ts-expect-error update types pending: agentIds?.length ?? 0, failed: 0, }, @@ -133,7 +128,7 @@ export const useActionResults = ({ keepPreviousData: true, enabled: !skip && !!agentIds?.length, onSuccess: () => setErrorToast(), - onError: (error: Error) => + onError: (error) => setErrorToast(error, { title: i18n.translate('xpack.osquery.action_results.fetchError', { defaultMessage: 'Error while fetching action results', diff --git a/x-pack/plugins/osquery/public/actions/actions_table.tsx b/x-pack/plugins/osquery/public/actions/actions_table.tsx index 2f81394bccde8..25c35d09e1ba0 100644 --- a/x-pack/plugins/osquery/public/actions/actions_table.tsx +++ b/x-pack/plugins/osquery/public/actions/actions_table.tsx @@ -7,7 +7,15 @@ import { isArray, isEmpty, pickBy } from 'lodash'; import { i18n } from '@kbn/i18n'; -import { EuiBasicTable, EuiButtonIcon, EuiCodeBlock, formatDate } from '@elastic/eui'; +import { + EuiBasicTable, + EuiButtonIcon, + EuiCodeBlock, + formatDate, + EuiIcon, + EuiFlexItem, + EuiFlexGroup, +} from '@elastic/eui'; import React, { useState, useCallback, useMemo } from 'react'; import { useHistory } from 'react-router-dom'; @@ -47,14 +55,24 @@ const ActionsTableComponent = () => { setPageSize(size); }, []); - const renderQueryColumn = useCallback( - (_, item) => ( + const renderQueryColumn = useCallback((_, item) => { + if (item._source.pack_name) { + return ( + + + + + {item._source.pack_name} + + ); + } + + return ( - {item._source.data.query} + {item._source.queries[0].query} - ), - [] - ); + ); + }, []); const renderAgentsColumn = useCallback((_, item) => <>{item.fields.agents?.length ?? 0}, []); @@ -71,18 +89,43 @@ const ActionsTableComponent = () => { ); const handlePlayClick = useCallback( - (item) => + (item) => { + const packId = item._source.pack_id; + + if (packId) { + return push('/live_queries/new', { + form: pickBy( + { + packId: item._source.pack_id, + agentSelection: { + agents: item._source.agent_ids, + allAgentsSelected: item._source.agent_all, + platformsSelected: item._source.agent_platforms, + policiesSelected: item._source.agent_policy_ids, + }, + }, + (value) => !isEmpty(value) + ), + }); + } + push('/live_queries/new', { form: pickBy( { - agentIds: item.fields.agents, - query: item._source.data.query, - ecs_mapping: item._source.data.ecs_mapping, - savedQueryId: item._source.data.saved_query_id, + query: item._source.queries[0].query, + ecs_mapping: item._source.queries[0].ecs_mapping, + savedQueryId: item._source.queries[0].saved_query_id, + agentSelection: { + agents: item._source.agent_ids, + allAgentsSelected: item._source.agent_all, + platformsSelected: item._source.agent_platforms, + policiesSelected: item._source.agent_policy_ids, + }, }, (value) => !isEmpty(value) ), - }), + }); + }, [push] ); const isPlayButtonAvailable = useCallback( @@ -156,10 +199,10 @@ const ActionsTableComponent = () => { () => ({ pageIndex, pageSize, - totalItemCount: actionsData?.totalCount ?? 0, + totalItemCount: actionsData?.total ?? 0, pageSizeOptions: [20, 50, 100], }), - [actionsData?.totalCount, pageIndex, pageSize] + [actionsData?.total, pageIndex, pageSize] ); return ( diff --git a/x-pack/plugins/osquery/public/actions/use_action_details.ts b/x-pack/plugins/osquery/public/actions/use_action_details.ts deleted file mode 100644 index 39abf4ac23852..0000000000000 --- a/x-pack/plugins/osquery/public/actions/use_action_details.ts +++ /dev/null @@ -1,70 +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 { useQuery } from 'react-query'; - -import { i18n } from '@kbn/i18n'; -import { lastValueFrom } from 'rxjs'; -import { createFilter } from '../common/helpers'; -import { useKibana } from '../common/lib/kibana'; -import type { - ActionDetailsRequestOptions, - ActionDetailsStrategyResponse, -} from '../../common/search_strategy'; -import { OsqueryQueries } from '../../common/search_strategy'; -import type { ESTermQuery } from '../../common/typed_json'; -import { useErrorToast } from '../common/hooks/use_error_toast'; - -export interface ActionDetailsArgs { - actionDetails: Record; - id: string; -} - -interface UseActionDetails { - actionId: string; - filterQuery?: ESTermQuery | string; - skip?: boolean; -} - -export const useActionDetails = ({ actionId, filterQuery, skip = false }: UseActionDetails) => { - const { data } = useKibana().services; - const setErrorToast = useErrorToast(); - - return useQuery( - ['actionDetails', { actionId, filterQuery }], - async () => { - const responseData = await lastValueFrom( - data.search.search( - { - actionId, - factoryQueryType: OsqueryQueries.actionDetails, - filterQuery: createFilter(filterQuery), - }, - { - strategy: 'osquerySearchStrategy', - } - ) - ); - - if (!responseData.actionDetails) throw new Error(); - - return responseData; - }, - { - enabled: !skip, - onSuccess: () => setErrorToast(), - onError: (error: Error) => - setErrorToast(error, { - title: i18n.translate('xpack.osquery.action_details.fetchError', { - defaultMessage: 'Error while fetching action details', - }), - }), - refetchOnWindowFocus: false, - retryDelay: 1000, - } - ); -}; diff --git a/x-pack/plugins/osquery/public/actions/use_all_actions.ts b/x-pack/plugins/osquery/public/actions/use_all_actions.ts index a0a53ab4566bd..fc3f2a6d123ac 100644 --- a/x-pack/plugins/osquery/public/actions/use_all_actions.ts +++ b/x-pack/plugins/osquery/public/actions/use_all_actions.ts @@ -18,7 +18,6 @@ import { import { useKibana } from '../common/lib/kibana'; import type { ActionEdges, - PageInfoPaginated, ActionsRequestOptions, ActionsStrategyResponse, Direction, @@ -33,8 +32,6 @@ export interface ActionsArgs { id: string; inspect: InspectResponse; isInspected: boolean; - pageInfo: PageInfoPaginated; - totalCount: number; } interface UseAllActions { diff --git a/x-pack/plugins/osquery/public/actions/use_live_query_details.ts b/x-pack/plugins/osquery/public/actions/use_live_query_details.ts new file mode 100644 index 0000000000000..a31c493487057 --- /dev/null +++ b/x-pack/plugins/osquery/public/actions/use_live_query_details.ts @@ -0,0 +1,81 @@ +/* + * 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 { useQuery } from 'react-query'; + +import { i18n } from '@kbn/i18n'; +import { useKibana } from '../common/lib/kibana'; +import type { ESTermQuery } from '../../common/typed_json'; +import { useErrorToast } from '../common/hooks/use_error_toast'; + +export interface LiveQueryDetailsArgs { + actionDetails: Record; + id: string; +} + +interface UseLiveQueryDetails { + actionId?: string; + isLive?: boolean; + filterQuery?: ESTermQuery | string; + skip?: boolean; +} + +export interface LiveQueryDetailsItem { + action_id: string; + expiration: string; + '@timestamp': string; + agent_all: boolean; + agent_ids: string[]; + agent_platforoms: string[]; + agent_policy_ids: string[]; + agents: string[]; + user_id?: string; + pack_id?: string; + pack_name?: string; + pack_prebuilt?: boolean; + status?: string; + queries?: Array<{ + action_id: string; + id: string; + query: string; + agents: string[]; + ecs_mapping?: unknown; + version?: string; + platform?: string; + saved_query_id?: string; + expiration?: string; + }>; +} + +export const useLiveQueryDetails = ({ + actionId, + filterQuery, + isLive = false, + skip = false, +}: UseLiveQueryDetails) => { + const { http } = useKibana().services; + const setErrorToast = useErrorToast(); + + return useQuery<{ data: LiveQueryDetailsItem }, Error, LiveQueryDetailsItem>( + ['liveQueries', { actionId, filterQuery }], + () => http.get(`/api/osquery/live_queries/${actionId}`), + { + enabled: !skip && !!actionId, + refetchInterval: isLive ? 5000 : false, + onSuccess: () => setErrorToast(), + onError: (error) => + setErrorToast(error, { + title: i18n.translate('xpack.osquery.action_details.fetchError', { + defaultMessage: 'Error while fetching action details', + }), + }), + select: (response) => response.data, + refetchOnWindowFocus: false, + retryDelay: 5000, + } + ); +}; diff --git a/x-pack/plugins/osquery/public/agent_policies/use_agent_policy.ts b/x-pack/plugins/osquery/public/agent_policies/use_agent_policy.ts index 608357bd72912..f629a138f70f6 100644 --- a/x-pack/plugins/osquery/public/agent_policies/use_agent_policy.ts +++ b/x-pack/plugins/osquery/public/agent_policies/use_agent_policy.ts @@ -8,6 +8,7 @@ import { useQuery } from 'react-query'; import { i18n } from '@kbn/i18n'; +import type { AgentPolicy } from '@kbn/fleet-plugin/common'; import { useKibana } from '../common/lib/kibana'; import { useErrorToast } from '../common/hooks/use_error_toast'; @@ -21,8 +22,7 @@ export const useAgentPolicy = ({ policyId, skip, silent }: UseAgentPolicy) => { const { http } = useKibana().services; const setErrorToast = useErrorToast(); - // eslint-disable-next-line @typescript-eslint/no-explicit-any - return useQuery( + return useQuery<{ item: AgentPolicy }, Error, AgentPolicy>( ['agentPolicy', { policyId }], () => http.get(`/internal/osquery/fleet_wrapper/agent_policies/${policyId}`), { diff --git a/x-pack/plugins/osquery/public/agents/agents_table.tsx b/x-pack/plugins/osquery/public/agents/agents_table.tsx index e892a7f7a4840..e11cb9b8277d9 100644 --- a/x-pack/plugins/osquery/public/agents/agents_table.tsx +++ b/x-pack/plugins/osquery/public/agents/agents_table.tsx @@ -88,7 +88,7 @@ const AgentsTableComponent: React.FC = ({ agentSelection, onCh selectedGroups: SelectedGroups; } = generateAgentSelection(selection); if (newAgentSelection.allAgentsSelected) { - setNumAgentsSelected(agentGroupsData?.totalCount ?? 0); + setNumAgentsSelected(agentGroupsData?.total ?? 0); } else { const checkAgent = generateAgentCheck(selectedGroups); setNumAgentsSelected( @@ -135,11 +135,11 @@ const AgentsTableComponent: React.FC = ({ agentSelection, onCh } } - if (agentSelection.policiesSelected.length) { + if (agentSelection.policiesSelected?.length) { handleSelectedOptions(agentSelection.policiesSelected, AGENT_POLICY_LABEL); } - if (agentSelection.agents.length) { + if (agentSelection.agents?.length) { handleSelectedOptions(agentSelection.agents, AGENT_SELECTION_LABEL); } } @@ -149,7 +149,7 @@ const AgentsTableComponent: React.FC = ({ agentSelection, onCh if (agentsFetched && groupsFetched && agentGroupsData) { const grouper = new AgentGrouper(); // update the groups when groups or agents have changed - grouper.setTotalAgents(agentGroupsData?.totalCount); + grouper.setTotalAgents(agentGroupsData?.total); grouper.updateGroup(AGENT_GROUP_KEY.Platform, agentGroupsData?.groups.platforms); grouper.updateGroup(AGENT_GROUP_KEY.Policy, agentGroupsData?.groups.policies); // @ts-expect-error update types diff --git a/x-pack/plugins/osquery/public/agents/use_agent_groups.ts b/x-pack/plugins/osquery/public/agents/use_agent_groups.ts index 5076082563ba3..497819a15031d 100644 --- a/x-pack/plugins/osquery/public/agents/use_agent_groups.ts +++ b/x-pack/plugins/osquery/public/agents/use_agent_groups.ts @@ -29,7 +29,7 @@ export const useAgentGroups = () => { AgentsStrategyResponse, unknown, { - totalCount: number; + total: number; groups: ReturnType; } >( @@ -80,7 +80,7 @@ export const useAgentGroups = () => { ); return { - totalCount: response.totalCount, + total: response.total ?? 0, groups: { platforms, overlap, @@ -96,13 +96,8 @@ export const useAgentGroups = () => { }; }, placeholderData: { - totalCount: 0, + total: 0, edges: [], - pageInfo: { - activePage: 1, - fakeTotalCount: 100, - showMorePagesIndicator: true, - }, rawResponse: { took: 0, timed_out: false, diff --git a/x-pack/plugins/osquery/public/agents/use_all_agents.ts b/x-pack/plugins/osquery/public/agents/use_all_agents.ts index 39a77fa72fa4e..c5e7c2d703bcf 100644 --- a/x-pack/plugins/osquery/public/agents/use_all_agents.ts +++ b/x-pack/plugins/osquery/public/agents/use_all_agents.ts @@ -8,7 +8,7 @@ import { i18n } from '@kbn/i18n'; import { useQuery } from 'react-query'; -import type { GetAgentsResponse } from '@kbn/fleet-plugin/common'; +import type { ListResult, Agent } from '@kbn/fleet-plugin/common'; import { useErrorToast } from '../common/hooks/use_error_toast'; import { useKibana } from '../common/lib/kibana'; import { useOsqueryPolicies } from './use_osquery_policies'; @@ -26,7 +26,7 @@ export const useAllAgents = (searchValue = '', opts: RequestOptions = { perPage: const { data: osqueryPolicies, isFetched } = useOsqueryPolicies(); - return useQuery( + return useQuery, 'items'> & { agents: Agent[] }, unknown, Agent[]>( ['agents', osqueryPolicies, searchValue, perPage], () => { let kuery = ''; @@ -47,7 +47,6 @@ export const useAllAgents = (searchValue = '', opts: RequestOptions = { perPage: }); }, { - // @ts-expect-error update types select: (data) => data?.agents || [], enabled: isFetched && !!osqueryPolicies?.length, onSuccess: () => setErrorToast(), diff --git a/x-pack/plugins/osquery/public/assets/use_import_assets.ts b/x-pack/plugins/osquery/public/assets/use_import_assets.ts index f63f3e7096f03..feb2c48041567 100644 --- a/x-pack/plugins/osquery/public/assets/use_import_assets.ts +++ b/x-pack/plugins/osquery/public/assets/use_import_assets.ts @@ -23,20 +23,15 @@ export const useImportAssets = ({ successToastText }: UseImportAssetsProps) => { } = useKibana().services; const setErrorToast = useErrorToast(); - return useMutation( - () => - // eslint-disable-next-line @typescript-eslint/no-explicit-any - http.post('/internal/osquery/assets/update'), - { - onSuccess: () => { - setErrorToast(); - queryClient.invalidateQueries(PACKS_ID); - queryClient.invalidateQueries(INTEGRATION_ASSETS_STATUS_ID); - toasts.addSuccess(successToastText); - }, - onError: (error) => { - setErrorToast(error); - }, - } - ); + return useMutation(() => http.post('/internal/osquery/assets/update'), { + onSuccess: () => { + setErrorToast(); + queryClient.invalidateQueries(PACKS_ID); + queryClient.invalidateQueries(INTEGRATION_ASSETS_STATUS_ID); + toasts.addSuccess(successToastText); + }, + onError: (error) => { + setErrorToast(error); + }, + }); }; diff --git a/x-pack/plugins/osquery/public/common/helpers.ts b/x-pack/plugins/osquery/public/common/helpers.ts index 42860bfb80edc..6b0a5f2a51c39 100644 --- a/x-pack/plugins/osquery/public/common/helpers.ts +++ b/x-pack/plugins/osquery/public/common/helpers.ts @@ -31,7 +31,6 @@ export const generateTablePaginationOptions = ( return { activePage, cursorStart, - fakePossibleCount: 4 <= activePage && activePage > 0 ? limit * (activePage + 2) : limit * 5, querySize: limit, }; }; diff --git a/x-pack/plugins/osquery/public/common/hooks/use_logs_data_view.tsx b/x-pack/plugins/osquery/public/common/hooks/use_logs_data_view.tsx new file mode 100644 index 0000000000000..8da13f72a077d --- /dev/null +++ b/x-pack/plugins/osquery/public/common/hooks/use_logs_data_view.tsx @@ -0,0 +1,31 @@ +/* + * 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 { useQuery } from 'react-query'; +import type { DataView } from '@kbn/data-plugin/common'; + +import { useKibana } from '../lib/kibana'; + +export interface LogsDataView extends DataView { + id: string; +} + +export const useLogsDataView = () => { + const dataViews = useKibana().services.data.dataViews; + + return useQuery(['logsDataView'], async () => { + let dataView = (await dataViews.find('logs-osquery_manager.result*', 1))[0]; + if (!dataView && dataViews.getCanSaveSync()) { + dataView = await dataViews.createAndSave({ + title: 'logs-osquery_manager.result*', + timeFieldName: '@timestamp', + }); + } + + return dataView as LogsDataView; + }); +}; diff --git a/x-pack/plugins/osquery/public/common/validations.ts b/x-pack/plugins/osquery/public/common/validations.ts index 1dc2ddbf139b8..4a29d274fcc0c 100644 --- a/x-pack/plugins/osquery/public/common/validations.ts +++ b/x-pack/plugins/osquery/public/common/validations.ts @@ -7,12 +7,12 @@ import { i18n } from '@kbn/i18n'; -import type { ValidationFunc } from '../shared_imports'; +import type { FormData, ValidationFunc } from '../shared_imports'; import { fieldValidators } from '../shared_imports'; -// eslint-disable-next-line @typescript-eslint/no-explicit-any -export const queryFieldValidation: ValidationFunc = fieldValidators.emptyField( - i18n.translate('xpack.osquery.pack.queryFlyoutForm.emptyQueryError', { - defaultMessage: 'Query is a required field', - }) -); +export const queryFieldValidation: ValidationFunc = + fieldValidators.emptyField( + i18n.translate('xpack.osquery.pack.queryFlyoutForm.emptyQueryError', { + defaultMessage: 'Query is a required field', + }) + ); diff --git a/x-pack/plugins/osquery/public/components/main_navigation.tsx b/x-pack/plugins/osquery/public/components/main_navigation.tsx index 8757ee0ea576c..8e0c3d7a8d55c 100644 --- a/x-pack/plugins/osquery/public/components/main_navigation.tsx +++ b/x-pack/plugins/osquery/public/components/main_navigation.tsx @@ -27,7 +27,7 @@ export const MainNavigation = () => {