diff --git a/.buildkite/disabled_jest_configs.json b/.buildkite/disabled_jest_configs.json index 9727d38158520..ce6235823b0ab 100644 --- a/.buildkite/disabled_jest_configs.json +++ b/.buildkite/disabled_jest_configs.json @@ -1,4 +1,5 @@ [ "x-pack/plugins/triggers_actions_ui/jest.config.js", - "x-pack/plugins/watcher/jest.config.js" + "x-pack/plugins/watcher/jest.config.js", + "src/core/server/integration_tests/ui_settings/jest.integration.config.js" ] diff --git a/.buildkite/pipeline-utils/ci-stats/pick_test_group_run_order.ts b/.buildkite/pipeline-utils/ci-stats/pick_test_group_run_order.ts index b7c223b3ca595..dfb384d7e3998 100644 --- a/.buildkite/pipeline-utils/ci-stats/pick_test_group_run_order.ts +++ b/.buildkite/pipeline-utils/ci-stats/pick_test_group_run_order.ts @@ -234,6 +234,7 @@ export async function pickTestGroupRunOrder() { ? globby.sync(['**/jest.integration.config.js', '!**/__fixtures__/**'], { cwd: process.cwd(), absolute: false, + ignore: DISABLED_JEST_CONFIGS, }) : []; diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS deleted file mode 100644 index a7bb2c2d60b55..0000000000000 --- a/.github/CODEOWNERS +++ /dev/null @@ -1,1056 +0,0 @@ -# GitHub CODEOWNERS definition -# Identify which groups will be pinged by changes to different parts of the codebase. -# For more info, see https://help.github.com/articles/about-codeowners/ - -# The #CC# prefix delineates Code Coverage, -# used for the 'team' designator within Kibana Stats - -# Alerting commmunal ownership -/x-pack/plugins/rule_registry/ @elastic/response-ops @elastic/actionable-observability - -# Data Discovery -/src/plugins/discover/ @elastic/kibana-data-discovery -/src/plugins/saved_search/ @elastic/kibana-data-discovery -/x-pack/plugins/discover_enhanced/ @elastic/kibana-data-discovery -/test/functional/apps/discover/ @elastic/kibana-data-discovery -/test/functional/apps/context/ @elastic/kibana-data-discovery -/test/api_integration/apis/unified_field_list/ @elastic/kibana-data-discovery -/src/plugins/unified_field_list/ @elastic/kibana-data-discovery -/src/plugins/unified_histogram/ @elastic/kibana-data-discovery -/src/plugins/saved_objects_finder/ @elastic/kibana-data-discovery - -# Vis Editors -/x-pack/plugins/lens/ @elastic/kibana-visualizations -/src/plugins/charts/ @elastic/kibana-visualizations -/src/plugins/vis_default_editor/ @elastic/kibana-visualizations -/src/plugins/vis_types/metric/ @elastic/kibana-visualizations -/src/plugins/vis_types/table/ @elastic/kibana-visualizations -/src/plugins/vis_types/tagcloud/ @elastic/kibana-visualizations -/src/plugins/vis_types/timelion/ @elastic/kibana-visualizations -/src/plugins/vis_types/timeseries/ @elastic/kibana-visualizations -/src/plugins/vis_types/vega/ @elastic/kibana-visualizations -/src/plugins/vis_types/vislib/ @elastic/kibana-visualizations -/src/plugins/vis_types/xy/ @elastic/kibana-visualizations -/src/plugins/vis_types/pie/ @elastic/kibana-visualizations -/src/plugins/vis_types/heatmap/ @elastic/kibana-visualizations -/src/plugins/visualize/ @elastic/kibana-visualizations -/src/plugins/visualizations/ @elastic/kibana-visualizations -/src/plugins/chart_expressions/expression_tagcloud/ @elastic/kibana-visualizations -/src/plugins/chart_expressions/expression_metric/ @elastic/kibana-visualizations -/src/plugins/chart_expressions/expression_heatmap/ @elastic/kibana-visualizations -/src/plugins/chart_expressions/expression_gauge/ @elastic/kibana-visualizations -/src/plugins/chart_expressions/expression_partition_vis/ @elastic/kibana-visualizations -/src/plugins/chart_expressions/expression_xy/ @elastic/kibana-visualizations -/src/plugins/url_forwarding/ @elastic/kibana-visualizations -/x-pack/test/functional/apps/lens @elastic/kibana-visualizations -/x-pack/test/api_integration/apis/lens/ @elastic/kibana-visualizations -/test/functional/apps/visualize/ @elastic/kibana-visualizations -/src/plugins/expressions/ @elastic/kibana-visualizations -/src/plugins/unified_search/ @elastic/kibana-visualizations -/x-pack/plugins/graph/ @elastic/kibana-visualizations -/x-pack/test/functional/apps/graph @elastic/kibana-visualizations - -# Application Services -/examples/dashboard_embeddable_examples/ @elastic/kibana-app-services -/examples/demo_search/ @elastic/kibana-app-services -/examples/developer_examples/ @elastic/kibana-app-services -/examples/embeddable_examples/ @elastic/kibana-app-services -/examples/embeddable_explorer/ @elastic/kibana-app-services -/examples/field_formats_example/ @elastic/kibana-app-services -/examples/partial_results_example/ @elastic/kibana-app-services -/examples/search_examples/ @elastic/kibana-app-services -/src/plugins/data/ @elastic/kibana-visualizations @elastic/kibana-data-discovery -/src/plugins/data_views/ @elastic/kibana-app-services -/src/plugins/embeddable/ @elastic/kibana-app-services -/src/plugins/field_formats/ @elastic/kibana-app-services -/src/plugins/data_view_editor/ @elastic/kibana-app-services -/src/plugins/inspector/ @elastic/kibana-app-services -/src/plugins/kibana_utils/ @elastic/kibana-app-services -/src/plugins/navigation/ @elastic/kibana-app-services -/src/plugins/data_view_field_editor @elastic/kibana-app-services -/src/plugins/data_view_management/ @elastic/kibana-app-services -/src/plugins/inspector/ @elastic/kibana-app-services -/x-pack/plugins/embeddable_enhanced/ @elastic/kibana-app-services -/x-pack/plugins/runtime_fields @elastic/kibana-app-services -/src/plugins/dashboard/public/application/embeddable/viewport/print_media @elastic/kibana-app-services -/x-pack/test/search_sessions_integration/ @elastic/kibana-app-services -/test/plugin_functional/test_suites/panel_actions @elastic/kibana-app-services -/test/plugin_functional/test_suites/data_plugin @elastic/kibana-app-services - -# Global Experience - -/src/plugins/bfetch/ @elastic/kibana-global-experience -/src/plugins/files @elastic/kibana-global-experience -/src/plugins/screenshot_mode @elastic/kibana-global-experience -/src/plugins/share/ @elastic/kibana-global-experience -/src/plugins/ui_actions/ @elastic/kibana-global-experience -/src/plugins/ui_actions_enhanced/ @elastic/kibana-global-experience - -/x-pack/plugins/notifications/ @elastic/kibana-global-experience - -## Examples -/examples/bfetch_explorer/ @elastic/kibana-global-experience -/examples/files_example @elastic/kibana-global-experience -/examples/state_containers_examples/ @elastic/kibana-global-experience -/examples/ui_action_examples/ @elastic/kibana-global-experience -/examples/ui_actions_explorer/ @elastic/kibana-global-experience -/x-pack/examples/ui_actions_enhanced_examples/ @elastic/kibana-global-experience - -### Overview Plugin and Packages -/src/plugins/kibana_overview/ @elastic/kibana-global-experience - -### Global Experience Reporting -/x-pack/examples/reporting_example/ @elastic/kibana-global-experience -/x-pack/examples/screenshotting_example/ @elastic/kibana-global-experience -/x-pack/plugins/reporting/ @elastic/kibana-global-experience -/x-pack/test/functional/apps/dashboard/reporting/ @elastic/kibana-global-experience -/x-pack/test/functional/apps/reporting/ @elastic/kibana-global-experience -/x-pack/test/functional/apps/reporting_management/ @elastic/kibana-global-experience -/x-pack/test/examples/screenshotting/ @elastic/kibana-global-experience -/x-pack/test/functional/es_archives/lens/reporting/ @elastic/kibana-global-experience -/x-pack/test/functional/es_archives/reporting/ @elastic/kibana-global-experience -/x-pack/test/functional/fixtures/kbn_archiver/reporting/ @elastic/kibana-global-experience -/x-pack/test/reporting_api_integration/ @elastic/kibana-global-experience -/x-pack/test/reporting_functional/ @elastic/kibana-global-experience -/x-pack/test/stack_functional_integration/apps/reporting/ @elastic/kibana-global-experience -/docs/user/reporting @elastic/kibana-global-experience -/docs/settings/reporting-settings.asciidoc @elastic/kibana-global-experience -/docs/setup/configuring-reporting.asciidoc @elastic/kibana-global-experience - -### Global Experience Tagging -/src/plugins/saved_objects_tagging_oss @elastic/kibana-global-experience -/x-pack/plugins/saved_objects_tagging/ @elastic/kibana-global-experience -/x-pack/test/saved_object_tagging/ @elastic/kibana-global-experience - -### Kibana React (to be deprecated) -/src/plugins/kibana_react/ @elastic/kibana-global-experience -/src/plugins/kibana_react/public/code_editor @elastic/kibana-global-experience @elastic/kibana-presentation - -### Home Plugin and Packages -/src/plugins/home/public @elastic/kibana-global-experience -/src/plugins/home/server/*.ts @elastic/kibana-global-experience -/src/plugins/home/server/services/ @elastic/kibana-global-experience - -### Code Coverage -#CC# /src/plugins/home/public @elastic/kibana-global-experience -#CC# /src/plugins/home/server/services/ @elastic/kibana-global-experience -#CC# /src/plugins/home/ @elastic/kibana-global-experience -#CC# /x-pack/plugins/reporting/ @elastic/kibana-global-experience - -### Observability Plugins - -# Observability Shared -/x-pack/plugins/observability/public/components/shared/date_picker/ @elastic/uptime - -# Unified Observability - on hold due to team capacity shortage -# For now, if you're changing these pages, get a review from someone who understand the changes -# /x-pack/plugins/observability/public/context @elastic/unified-observability -# /x-pack/test/observability_functional @elastic/unified-observability - -# Home/Overview/Landing Pages -/x-pack/plugins/observability/public/pages/home @elastic/observability-design -/x-pack/plugins/observability/public/pages/landing @elastic/observability-design -/x-pack/plugins/observability/public/pages/overview @elastic/observability-design - -# Actionable Observability -/x-pack/plugins/observability/common/rules @elastic/actionable-observability -/x-pack/plugins/observability/public/rules @elastic/actionable-observability -/x-pack/plugins/observability/public/pages/alerts @elastic/actionable-observability -/x-pack/plugins/observability/public/pages/cases @elastic/actionable-observability -/x-pack/plugins/observability/public/pages/rules @elastic/actionable-observability -/x-pack/plugins/observability/public/pages/rule_details @elastic/actionable-observability -/x-pack/test/observability_functional @elastic/actionable-observability - -# Infra Monitoring -/x-pack/plugins/infra/ @elastic/infra-monitoring-ui -/x-pack/test/functional/apps/infra @elastic/infra-monitoring-ui -/x-pack/test/api_integration/apis/infra @elastic/infra-monitoring-ui - -# Elastic Stack Monitoring -/x-pack/plugins/monitoring/ @elastic/infra-monitoring-ui -/x-pack/test/functional/apps/monitoring @elastic/infra-monitoring-ui -/x-pack/test/api_integration/apis/monitoring @elastic/infra-monitoring-ui -/x-pack/test/api_integration/apis/monitoring_collection @elastic/infra-monitoring-ui - -# Fleet -/fleet_packages.json @elastic/fleet -/x-pack/plugins/fleet/ @elastic/fleet -/x-pack/test/fleet_api_integration @elastic/fleet -/x-pack/test/fleet_cypress @elastic/fleet -/x-pack/test/fleet_functional @elastic/fleet -/src/dev/build/tasks/bundle_fleet_packages.ts - -# APM -/x-pack/plugins/apm/ @elastic/apm-ui -/x-pack/test/functional/apps/apm/ @elastic/apm-ui -/x-pack/test/apm_api_integration/ @elastic/apm-ui -/src/apm.js @elastic/kibana-core @vigneshshanmugam -/src/core/types/elasticsearch @elastic/apm-ui -/packages/kbn-utility-types/src/dot.ts @dgieselaar -/packages/kbn-utility-types/src/dot_test.ts @dgieselaar -#CC# /src/plugins/apm_oss/ @elastic/apm-ui -#CC# /x-pack/plugins/observability/ @elastic/apm-ui - -# Uptime -/x-pack/plugins/synthetics @elastic/uptime -/x-pack/plugins/ux @elastic/uptime -/x-pack/test/functional_with_es_ssl/apps/uptime @elastic/uptime -/x-pack/test/functional/apps/uptime @elastic/uptime -/x-pack/test/functional/es_archives/uptime @elastic/uptime -/x-pack/test/functional/services/uptime @elastic/uptime -/x-pack/test/api_integration/apis/uptime @elastic/uptime -/x-pack/plugins/observability/public/components/shared/exploratory_view @elastic/uptime - - -# Client Side Monitoring / Uptime (lives in APM directories but owned by Uptime) -/x-pack/plugins/apm/public/application/uxApp.tsx @elastic/uptime -/x-pack/plugins/apm/public/components/app/rum_dashboard @elastic/uptime -/x-pack/test/apm_api_integration/tests/csm/ @elastic/uptime - -# Profiling -/x-pack/plugins/profiling @elastic/profiling-ui - -# Observability onboarding tour -/x-pack/plugins/observability/public/components/shared/tour @elastic/platform-onboarding -/x-pack/test/functional/apps/infra/tour.ts @elastic/platform-onboarding - -### END Observability Plugins - -# Presentation -/src/plugins/dashboard/ @elastic/kibana-presentation -/src/plugins/expression_error/ @elastic/kibana-presentation -/src/plugins/expression_image/ @elastic/kibana-presentation -/src/plugins/expression_metric/ @elastic/kibana-presentation -/src/plugins/expression_repeat_image/ @elastic/kibana-presentation -/src/plugins/expression_reveal_image/ @elastic/kibana-presentation -/src/plugins/expression_shape/ @elastic/kibana-presentation -/src/plugins/input_control_vis/ @elastic/kibana-presentation -/src/plugins/vis_type_markdown/ @elastic/kibana-presentation -/src/plugins/presentation_util/ @elastic/kibana-presentation -/src/plugins/controls/ @elastic/kibana-presentation -/test/functional/apps/dashboard/ @elastic/kibana-presentation -/test/functional/apps/dashboard_elements/ @elastic/kibana-presentation -/test/functional/services/dashboard/ @elastic/kibana-presentation -/x-pack/plugins/canvas/ @elastic/kibana-presentation -/x-pack/plugins/dashboard_enhanced/ @elastic/kibana-presentation -/x-pack/test/functional/apps/canvas/ @elastic/kibana-presentation -#CC# /src/plugins/kibana_react/public/code_editor/ @elastic/kibana-presentation - -# Machine Learning -/x-pack/plugins/ml/ @elastic/ml-ui -/x-pack/plugins/ml/common/openapi/ @elastic/mlr-docs -/x-pack/test/accessibility/apps/ml.ts @elastic/ml-ui -/x-pack/test/accessibility/apps/ml_embeddables_in_dashboard.ts @elastic/ml-ui -/x-pack/test/api_integration/apis/ml/ @elastic/ml-ui -/x-pack/test/api_integration_basic/apis/ml/ @elastic/ml-ui -/x-pack/test/functional/apps/ml/ @elastic/ml-ui -/x-pack/test/functional/es_archives/ml/ @elastic/ml-ui -/x-pack/test/functional/services/ml/ @elastic/ml-ui -/x-pack/test/functional_basic/apps/ml/ @elastic/ml-ui -/x-pack/test/functional_with_es_ssl/apps/ml/ @elastic/ml-ui -/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/ml_rule_types/ @elastic/ml-ui -/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/transform_rule_types/ @elastic/ml-ui -/x-pack/test/screenshot_creation/apps/ml_docs @elastic/ml-ui -/x-pack/test/screenshot_creation/services/ml_screenshots.ts @elastic/ml-ui -/docs/api/machine-learning/ @elastic/mlr-docs - -# Additional plugins and packages maintained by the ML team. -/x-pack/plugins/aiops/ @elastic/ml-ui -/x-pack/plugins/data_visualizer/ @elastic/ml-ui -/x-pack/plugins/file_upload/ @elastic/ml-ui -/x-pack/plugins/transform/ @elastic/ml-ui -/x-pack/test/accessibility/apps/transform.ts @elastic/ml-ui -/x-pack/test/api_integration/apis/transform/ @elastic/ml-ui -/x-pack/test/api_integration_basic/apis/transform/ @elastic/ml-ui -/x-pack/test/functional/apps/transform/ @elastic/ml-ui -/x-pack/test/functional/services/transform/ @elastic/ml-ui -/x-pack/test/functional_basic/apps/transform/ @elastic/ml-ui -/examples/response_stream/ @elastic/ml-ui - -# Maps -#CC# /x-pack/plugins/maps/ @elastic/kibana-gis -/x-pack/plugins/maps/ @elastic/kibana-gis -/x-pack/test/api_integration/apis/maps/ @elastic/kibana-gis -/x-pack/test/functional/apps/maps/ @elastic/kibana-gis -/x-pack/test/functional/es_archives/maps/ @elastic/kibana-gis -/x-pack/plugins/stack_alerts/server/rule_types/geo_containment @elastic/kibana-gis -/x-pack/plugins/stack_alerts/public/rule_types/geo_containment @elastic/kibana-gis -#CC# /x-pack/plugins/file_upload @elastic/kibana-gis -/x-pack/plugins/file_upload @elastic/kibana-gis - -# Operations -/src/dev/license_checker/config.ts @elastic/kibana-operations -/src/dev/ @elastic/kibana-operations -/src/setup_node_env/ @elastic/kibana-operations -/src/cli/keystore/ @elastic/kibana-operations -/.ci/es-snapshots/ @elastic/kibana-operations -/.github/workflows/ @elastic/kibana-operations -/vars/ @elastic/kibana-operations -/.bazelignore @elastic/kibana-operations -/.bazeliskversion @elastic/kibana-operations -/.bazelrc @elastic/kibana-operations -/.bazelrc.common @elastic/kibana-operations -/.bazelversion @elastic/kibana-operations -/WORKSPACE.bazel @elastic/kibana-operations -/.buildkite/ @elastic/kibana-operations -/kbn_pm/ @elastic/kibana-operations - -# Quality Assurance -/src/dev/code_coverage @elastic/kibana-qa -/vars/*Coverage.groovy @elastic/kibana-qa -/test/functional/services/common @elastic/kibana-qa -/test/functional/services/lib @elastic/kibana-qa -/test/functional/services/remote @elastic/kibana-qa -/test/visual_regression @elastic/kibana-qa -/x-pack/test/visual_regression @elastic/kibana-qa - -# Core -/examples/hello_world/ @elastic/kibana-core -/src/core/ @elastic/kibana-core -/config/kibana.yml @elastic/kibana-core -/typings/ @elastic/kibana-core -/x-pack/plugins/global_search_providers @elastic/kibana-core -/x-pack/plugins/banners/ @elastic/kibana-core -/x-pack/plugins/features/ @elastic/kibana-core -/x-pack/plugins/licensing/ @elastic/kibana-core -/x-pack/plugins/global_search/ @elastic/kibana-core -/x-pack/plugins/cloud/ @elastic/kibana-core -/x-pack/plugins/cloud_integrations/ @elastic/kibana-core -/x-pack/test/saved_objects_field_count/ @elastic/kibana-core -/src/plugins/saved_objects_management/ @elastic/kibana-core -/src/plugins/advanced_settings/ @elastic/kibana-core -/x-pack/plugins/global_search_bar/ @elastic/kibana-core -/test/analytics @elastic/kibana-core -#CC# /src/core/server/csp/ @elastic/kibana-core -#CC# /src/plugins/saved_objects/ @elastic/kibana-core -#CC# /x-pack/plugins/cloud/ @elastic/kibana-core -#CC# /x-pack/plugins/features/ @elastic/kibana-core -#CC# /x-pack/plugins/global_search/ @elastic/kibana-core -#CC# /src/plugins/newsfeed @elastic/kibana-core -#CC# /x-pack/plugins/global_search_providers/ @elastic/kibana-core - -# Kibana Telemetry -/src/plugins/kibana_usage_collection/ @elastic/kibana-core -/src/plugins/newsfeed/ @elastic/kibana-core -/src/plugins/telemetry/ @elastic/kibana-core -/src/plugins/telemetry_collection_manager/ @elastic/kibana-core -/src/plugins/telemetry_management_section/ @elastic/kibana-core -/src/plugins/usage_collection/ @elastic/kibana-core -/x-pack/plugins/telemetry_collection_xpack/ @elastic/kibana-core -/.telemetryrc.json @elastic/kibana-core -/x-pack/.telemetryrc.json @elastic/kibana-core -/src/plugins/telemetry/schema/ @elastic/kibana-core @elastic/kibana-telemetry -/x-pack/plugins/telemetry_collection_xpack/schema/ @elastic/kibana-core @elastic/kibana-telemetry - -# Kibana Localization -/src/dev/i18n/ @elastic/kibana-localization @elastic/kibana-core -/src/core/public/i18n/ @elastic/kibana-localization @elastic/kibana-core -#CC# /x-pack/plugins/translations/ @elastic/kibana-localization @elastic/kibana-core - -# Kibana Platform Security -/src/plugins/interactive_setup/ @elastic/kibana-security -/src/plugins/telemetry/server/config/telemetry_labels.ts @elastic/kibana-security -/test/interactive_setup_api_integration/ @elastic/kibana-security -/test/interactive_setup_functional/ @elastic/kibana-security -/test/plugin_functional/test_suites/core_plugins/rendering.ts @elastic/kibana-security -/x-pack/plugins/spaces/ @elastic/kibana-security -/x-pack/plugins/encrypted_saved_objects/ @elastic/kibana-security -/x-pack/plugins/security/ @elastic/kibana-security -/x-pack/test/api_integration/apis/security/ @elastic/kibana-security -/x-pack/test/api_integration/apis/spaces/ @elastic/kibana-security -/x-pack/test/ui_capabilities/ @elastic/kibana-security -/x-pack/test/encrypted_saved_objects_api_integration/ @elastic/kibana-security -/x-pack/test/functional/apps/security/ @elastic/kibana-security -/x-pack/test/functional/apps/spaces/ @elastic/kibana-security -/x-pack/test/security_api_integration/ @elastic/kibana-security -/x-pack/test/security_functional/ @elastic/kibana-security -/x-pack/test/spaces_api_integration/ @elastic/kibana-security -/x-pack/test/saved_object_api_integration/ @elastic/kibana-security -/examples/preboot_example/ @elastic/kibana-security @elastic/kibana-core -/examples/user_profile_examples/ @elastic/kibana-security -#CC# /x-pack/plugins/security/ @elastic/kibana-security - -# Response Ops team -/x-pack/plugins/alerting/ @elastic/response-ops -/x-pack/plugins/actions/ @elastic/response-ops -/x-pack/plugins/event_log/ @elastic/response-ops -/x-pack/plugins/task_manager/ @elastic/response-ops -/x-pack/plugins/stack_connectors/ @elastic/response-ops -/x-pack/plugins/stack_connectors/public/connector_types/stack/ @elastic/response-ops @elastic/response-ops-execution -/x-pack/plugins/stack_connectors/server/connector_types/stack/ @elastic/response-ops @elastic/response-ops-execution -/x-pack/plugins/stack_connectors/public/connector_types/cases/ @elastic/response-ops @elastic/response-ops-cases -/x-pack/plugins/stack_connectors/server/connector_types/cases/ @elastic/response-ops @elastic/response-ops-cases -/x-pack/test/alerting_api_integration/ @elastic/response-ops -/x-pack/test/alerting_api_integration/basic/tests/actions/connector_types/stack/ @elastic/response-ops @elastic/response-ops-execution -/x-pack/test/alerting_api_integration/basic/tests/actions/connector_types/cases/ @elastic/response-ops @elastic/response-ops-cases -/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/connector_types/stack/ @elastic/response-ops @elastic/response-ops-execution -/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/connector_types/cases/ @elastic/response-ops @elastic/response-ops-cases -/x-pack/test/plugin_api_integration/test_suites/task_manager/ @elastic/response-ops -/x-pack/plugins/triggers_actions_ui/ @elastic/response-ops -/x-pack/test/functional_with_es_ssl/apps/triggers_actions_ui/ @elastic/response-ops -/x-pack/test/functional_with_es_ssl/fixtures/plugins/alerts/ @elastic/response-ops -/docs/user/alerting/ @elastic/response-ops @elastic/mlr-docs -/docs/management/connectors/ @elastic/response-ops @elastic/mlr-docs -/x-pack/plugins/stack_alerts/ @elastic/response-ops -/x-pack/plugins/cases/ @elastic/response-ops -/x-pack/test/cases_api_integration/ @elastic/response-ops -/x-pack/test/functional/services/cases/ @elastic/response-ops -/x-pack/test/functional_with_es_ssl/apps/cases/ @elastic/response-ops -/x-pack/test/api_integration/apis/cases/ @elastic/response-ops -/docs/api/cases @elastic/mlr-docs -/x-pack/plugins/cases/docs/openapi @elastic/mlr-docs - -# Enterprise Search -/x-pack/plugins/enterprise_search @elastic/enterprise-search-frontend -/x-pack/test/functional_enterprise_search/ @elastic/enterprise-search-frontend -/x-pack/plugins/enterprise_search/public/applications/shared/doc_links @elastic/ent-search-docs-team - -# Management Experience - Deployment Management -/src/plugins/dev_tools/ @elastic/platform-deployment-management -/src/plugins/console/ @elastic/platform-deployment-management -/src/plugins/es_ui_shared/ @elastic/platform-deployment-management -/src/plugins/management/ @elastic/platform-deployment-management -/x-pack/plugins/cross_cluster_replication/ @elastic/platform-deployment-management -/x-pack/plugins/index_lifecycle_management/ @elastic/platform-deployment-management -/x-pack/plugins/grokdebugger/ @elastic/platform-deployment-management -/x-pack/plugins/index_management/ @elastic/platform-deployment-management -/x-pack/plugins/license_api_guard/ @elastic/platform-deployment-management -/x-pack/plugins/license_management/ @elastic/platform-deployment-management -/x-pack/plugins/painless_lab/ @elastic/platform-deployment-management -/x-pack/plugins/remote_clusters/ @elastic/platform-deployment-management -/x-pack/plugins/rollup/ @elastic/platform-deployment-management -/x-pack/plugins/searchprofiler/ @elastic/platform-deployment-management -/x-pack/plugins/snapshot_restore/ @elastic/platform-deployment-management -/x-pack/plugins/upgrade_assistant/ @elastic/platform-deployment-management -/x-pack/plugins/watcher/ @elastic/platform-deployment-management -/x-pack/plugins/ingest_pipelines/ @elastic/platform-deployment-management -#CC# /x-pack/plugins/cross_cluster_replication/ @elastic/platform-deployment-management - -# Management Experience - Platform Onboarding -/src/plugins/guided_onboarding/ @elastic/platform-onboarding -/examples/guided_onboarding_example/ @elastic/platform-onboarding - -# Security Solution -/x-pack/test/endpoint_api_integration_no_ingest/ @elastic/security-solution -/x-pack/test/security_solution_endpoint/ @elastic/security-solution -/x-pack/test/functional/es_archives/endpoint/ @elastic/security-solution -/x-pack/test/plugin_functional/plugins/resolver_test/ @elastic/security-solution -/x-pack/test/plugin_functional/test_suites/resolver/ @elastic/security-solution -/x-pack/plugins/security_solution/ @elastic/security-solution -/x-pack/test/detection_engine_api_integration @elastic/security-solution -/x-pack/test/lists_api_integration @elastic/security-solution -/x-pack/test/api_integration/apis/security_solution @elastic/security-solution -#CC# /x-pack/plugins/security_solution/ @elastic/security-solution - -# Security Solution sub teams - -## Security Solution sub teams - Threat Hunting Investigations -/x-pack/plugins/timelines @elastic/security-threat-hunting-investigations - -/x-pack/plugins/security_solution/common/search_strategy/timeline @elastic/security-threat-hunting-investigations -/x-pack/plugins/security_solution/common/types/timeline @elastic/security-threat-hunting-investigations - -/x-pack/plugins/security_solution/cypress/e2e/timeline_templates @elastic/security-threat-hunting-investigations -/x-pack/plugins/security_solution/cypress/e2e/timeline @elastic/security-threat-hunting-investigations -/x-pack/plugins/security_solution/cypress/e2e/detection_alerts @elastic/security-threat-hunting-investigations -/x-pack/plugins/security_solution/cypress/e2e/urls @elastic/security-threat-hunting-investigations - -/x-pack/plugins/security_solution/public/common/components/alerts_viewer @elastic/security-threat-hunting-investigations -/x-pack/plugins/security_solution/public/detections/components/alerts_table/timeline_action @elastic/security-threat-hunting-investigations -/x-pack/plugins/security_solution/public/common/components/event_details @elastic/security-threat-hunting-investigations -/x-pack/plugins/security_solution/public/common/components/events_viewer @elastic/security-threat-hunting-investigations -/x-pack/plugins/security_solution/public/common/components/markdown_editor @elastic/security-threat-hunting-investigations -/x-pack/plugins/security_solution/public/detections/components/alerts_kpis @elastic/security-threat-hunting-investigations -/x-pack/plugins/security_solution/public/detections/components/alerts_table @elastic/security-threat-hunting-investigations -/x-pack/plugins/security_solution/public/detections/components/alerts_info @elastic/security-threat-hunting-investigations -/x-pack/plugins/security_solution/public/resolver @elastic/security-threat-hunting-investigations -/x-pack/plugins/security_solution/public/timelines @elastic/security-threat-hunting-investigations - -/x-pack/plugins/security_solution/server/lib/timeline @elastic/security-threat-hunting-investigations - -## Security Solution sub teams - Threat Hunting Explore -/x-pack/plugins/security_solution/common/search_strategy/security_solution/hosts @elastic/security-threat-hunting-explore -/x-pack/plugins/security_solution/common/search_strategy/security_solution/matrix_histogram @elastic/security-threat-hunting-explore -/x-pack/plugins/security_solution/common/search_strategy/security_solution/network @elastic/security-threat-hunting-explore -/x-pack/plugins/security_solution/common/search_strategy/security_solution/user @elastic/security-threat-hunting-explore - -/x-pack/plugins/security_solution/cypress/e2e/cases @elastic/security-threat-hunting-explore -/x-pack/plugins/security_solution/cypress/e2e/filters @elastic/security-threat-hunting-explore -/x-pack/plugins/security_solution/cypress/e2e/host_details @elastic/security-threat-hunting-explore -/x-pack/plugins/security_solution/cypress/e2e/hosts @elastic/security-threat-hunting-explore -/x-pack/plugins/security_solution/cypress/e2e/network @elastic/security-threat-hunting-explore -/x-pack/plugins/security_solution/cypress/e2e/overview @elastic/security-threat-hunting-explore -/x-pack/plugins/security_solution/cypress/e2e/pagination @elastic/security-threat-hunting-explore -/x-pack/plugins/security_solution/cypress/e2e/users @elastic/security-threat-hunting-explore -/x-pack/plugins/security_solution/cypress/screens/hosts @elastic/security-threat-hunting-explore -/x-pack/plugins/security_solution/cypress/screens/network @elastic/security-threat-hunting-explore -/x-pack/plugins/security_solution/cypress/tasks/hosts @elastic/security-threat-hunting-explore -/x-pack/plugins/security_solution/cypress/tasks/network @elastic/security-threat-hunting-explore -/x-pack/plugins/security_solution/cypress/upgrade_e2e/threat_hunting/cases @elastic/security-threat-hunting-explore - -/x-pack/plugins/security_solution/public/common/components/guided_onboarding_tour @elastic/security-threat-hunting-explore -/x-pack/plugins/security_solution/public/common/components/charts @elastic/security-threat-hunting-explore -/x-pack/plugins/security_solution/public/common/components/header_page @elastic/security-threat-hunting-explore -/x-pack/plugins/security_solution/public/common/components/header_section @elastic/security-threat-hunting-explore -/x-pack/plugins/security_solution/public/common/components/inspect @elastic/security-threat-hunting-explore -/x-pack/plugins/security_solution/public/common/components/last_event_time @elastic/security-threat-hunting-explore -/x-pack/plugins/security_solution/public/common/components/links @elastic/security-threat-hunting-explore -/x-pack/plugins/security_solution/public/common/components/matrix_histogram @elastic/security-threat-hunting-explore -/x-pack/plugins/security_solution/public/common/components/navigation @elastic/security-threat-hunting-explore -/x-pack/plugins/security_solution/public/common/components/news_feed @elastic/security-threat-hunting-explore -/x-pack/plugins/security_solution/public/common/components/overview_description_list @elastic/security-threat-hunting-explore -/x-pack/plugins/security_solution/public/common/components/paginated_table @elastic/security-threat-hunting-explore -/x-pack/plugins/security_solution/public/common/components/sidebar_header @elastic/security-threat-hunting-explore -/x-pack/plugins/security_solution/public/common/components/stat_items @elastic/security-threat-hunting-explore -/x-pack/plugins/security_solution/public/common/components/tables @elastic/security-threat-hunting-explore -/x-pack/plugins/security_solution/public/common/components/top_n @elastic/security-threat-hunting-explore -/x-pack/plugins/security_solution/public/common/components/with_hover_actions @elastic/security-threat-hunting-explore -/x-pack/plugins/security_solution/public/common/containers/hosts_risk @elastic/security-threat-hunting-explore -/x-pack/plugins/security_solution/public/common/containers/matrix_histogram @elastic/security-threat-hunting-explore -/x-pack/plugins/security_solution/public/common/lib/cell_actions @elastic/security-threat-hunting-explore -/x-pack/plugins/security_solution/public/cases @elastic/security-threat-hunting-explore -/x-pack/plugins/security_solution/public/hosts @elastic/security-threat-hunting-explore -/x-pack/plugins/security_solution/public/network @elastic/security-threat-hunting-explore -/x-pack/plugins/security_solution/public/overview @elastic/security-threat-hunting-explore -/x-pack/plugins/security_solution/public/users @elastic/security-threat-hunting-explore - -/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/hosts @elastic/security-threat-hunting-explore -/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/matrix_histogram @elastic/security-threat-hunting-explore -/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/network @elastic/security-threat-hunting-explore -/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/users @elastic/security-threat-hunting-explore - -## Security Solution sub teams - Detections and Response Alerts -/x-pack/plugins/security_solution/common/detection_engine/schemas/alerts @elastic/security-detections-response-alerts -/x-pack/plugins/security_solution/common/field_maps @elastic/security-detections-response-alerts - -/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui @elastic/security-detections-response-alerts -/x-pack/plugins/security_solution/public/detections/pages/alerts @elastic/security-detections-response-alerts - -/x-pack/plugins/security_solution/server/lib/detection_engine/migrations @elastic/security-detections-response-alerts -/x-pack/plugins/security_solution/server/lib/detection_engine/rule_preview @elastic/security-detections-response-alerts -/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types @elastic/security-detections-response-alerts -/x-pack/plugins/security_solution/server/lib/detection_engine/signals @elastic/security-detections-response-alerts -/x-pack/plugins/security_solution/server/lib/detection_engine/routes/index @elastic/security-detections-response-alerts -/x-pack/plugins/security_solution/server/lib/detection_engine/routes/signals @elastic/security-detections-response-alerts - -## Security Solution sub teams - Detections and Response Rules -/x-pack/plugins/security_solution/common/detection_engine/fleet_integrations @elastic/security-detections-response-rules -/x-pack/plugins/security_solution/common/detection_engine/prebuilt_rules @elastic/security-detections-response-rules -/x-pack/plugins/security_solution/common/detection_engine/rule_management @elastic/security-detections-response-rules -/x-pack/plugins/security_solution/common/detection_engine/rule_monitoring @elastic/security-detections-response-rules -/x-pack/plugins/security_solution/common/detection_engine/rule_schema @elastic/security-detections-response-rules @elastic/security-detections-response-alerts - -/x-pack/plugins/security_solution/public/common/components/health_truncate_text @elastic/security-detections-response-rules -/x-pack/plugins/security_solution/public/common/components/links_to_docs @elastic/security-detections-response-rules -/x-pack/plugins/security_solution/public/common/components/ml_popover @elastic/security-detections-response-rules -/x-pack/plugins/security_solution/public/common/components/popover_items @elastic/security-detections-response-rules -/x-pack/plugins/security_solution/public/detection_engine/fleet_integrations @elastic/security-detections-response-rules -/x-pack/plugins/security_solution/public/detection_engine/rule_details_ui @elastic/security-detections-response-rules -/x-pack/plugins/security_solution/public/detection_engine/rule_management @elastic/security-detections-response-rules -/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui @elastic/security-detections-response-rules -/x-pack/plugins/security_solution/public/detection_engine/rule_monitoring @elastic/security-detections-response-rules -/x-pack/plugins/security_solution/public/detections/components/callouts @elastic/security-detections-response-rules -/x-pack/plugins/security_solution/public/detections/components/modals/ml_job_upgrade_modal @elastic/security-detections-response-rules -/x-pack/plugins/security_solution/public/detections/components/rules @elastic/security-detections-response-rules -/x-pack/plugins/security_solution/public/detections/components/rules/rule_preview @elastic/security-detections-response-alerts -/x-pack/plugins/security_solution/public/detections/containers/detection_engine/rules @elastic/security-detections-response-rules -/x-pack/plugins/security_solution/public/detections/mitre @elastic/security-detections-response-rules -/x-pack/plugins/security_solution/public/detections/pages/detection_engine/rules @elastic/security-detections-response-rules -/x-pack/plugins/security_solution/public/rules @elastic/security-detections-response-rules - -/x-pack/plugins/security_solution/server/lib/detection_engine/fleet_integrations @elastic/security-detections-response-rules -/x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules @elastic/security-detections-response-rules -/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management @elastic/security-detections-response-rules -/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring @elastic/security-detections-response-rules -/x-pack/plugins/security_solution/server/lib/detection_engine/rule_schema @elastic/security-detections-response-rules @elastic/security-detections-response-alerts - -/x-pack/plugins/security_solution/server/utils @elastic/security-detections-response-rules - -## Security Solution sub teams - Security Platform -/x-pack/plugins/lists @elastic/security-solution-platform - -/x-pack/plugins/security_solution/cypress/e2e/data_sources @elastic/security-solution-platform -/x-pack/plugins/security_solution/cypress/e2e/exceptions @elastic/security-solution-platform -/x-pack/plugins/security_solution/cypress/e2e/value_lists @elastic/security-solution-platform - -/x-pack/plugins/security_solution/common/detection_engine/rule_exceptions @elastic/security-solution-platform - -/x-pack/plugins/security_solution/public/detection_engine/rule_exceptions @elastic/security-solution-platform -/x-pack/plugins/security_solution/public/detection_engine/rule_exceptions_ui @elastic/security-solution-platform -/x-pack/plugins/security_solution/public/common/components/exceptions @elastic/security-solution-platform -/x-pack/plugins/security_solution/public/exceptions @elastic/security-solution-platform -/x-pack/plugins/security_solution/public/detections/containers/detection_engine/lists @elastic/security-solution-platform -/x-pack/plugins/security_solution/public/common/components/sourcerer @elastic/security-solution-platform - -/x-pack/plugins/security_solution/server/lib/detection_engine/rule_actions_legacy @elastic/security-solution-platform -/x-pack/plugins/security_solution/server/lib/detection_engine/rule_exceptions @elastic/security-solution-platform -/x-pack/plugins/security_solution/server/lib/sourcerer @elastic/security-solution-platform - -## Security Threat Intelligence - Under Security Platform -/x-pack/plugins/security_solution/public/common/components/threat_match @elastic/security-solution-platform - -## Security Solution cross teams ownership -/x-pack/plugins/security_solution/cypress/fixtures @elastic/security-detections-response @elastic/security-threat-hunting -/x-pack/plugins/security_solution/cypress/helpers @elastic/security-detections-response @elastic/security-threat-hunting -/x-pack/plugins/security_solution/cypress/e2e/detection_rules @elastic/security-detections-response-rules @elastic/security-detections-response-alerts -/x-pack/plugins/security_solution/cypress/objects @elastic/security-detections-response @elastic/security-threat-hunting -/x-pack/plugins/security_solution/cypress/plugins @elastic/security-detections-response @elastic/security-threat-hunting -/x-pack/plugins/security_solution/cypress/screens/common @elastic/security-detections-response @elastic/security-threat-hunting -/x-pack/plugins/security_solution/cypress/support @elastic/security-detections-response @elastic/security-threat-hunting -/x-pack/plugins/security_solution/cypress/urls @elastic/security-threat-hunting-investigations @elastic/security-solution-platform - -/x-pack/plugins/security_solution/common/ecs @elastic/security-threat-hunting-investigations -/x-pack/plugins/security_solution/common/test @elastic/security-detections-response-rules @elastic/security-detections-response-alerts - -/x-pack/plugins/security_solution/public/common/components/callouts @elastic/security-detections-response -/x-pack/plugins/security_solution/public/common/components/hover_actions @elastic/security-threat-hunting-explore @elastic/security-threat-hunting-investigations - -/x-pack/plugins/security_solution/server/lib/detection_engine/rule_actions @elastic/security-solution-platform @elastic/security-detections-response-rules -/x-pack/plugins/security_solution/server/routes @elastic/security-detections-response @elastic/security-threat-hunting - - -## Security Solution sub teams - security-onboarding-and-lifecycle-mgt -/x-pack/plugins/security_solution/public/management/ @elastic/security-onboarding-and-lifecycle-mgt -/x-pack/plugins/security_solution/public/common/lib/endpoint*/ @elastic/security-onboarding-and-lifecycle-mgt -/x-pack/plugins/security_solution/public/common/components/endpoint/ @elastic/security-onboarding-and-lifecycle-mgt -/x-pack/plugins/security_solution/common/endpoint/ @elastic/security-onboarding-and-lifecycle-mgt -/x-pack/plugins/security_solution/server/endpoint/ @elastic/security-onboarding-and-lifecycle-mgt -/x-pack/plugins/security_solution/server/lists_integration/endpoint/ @elastic/security-onboarding-and-lifecycle-mgt -/x-pack/plugins/security_solution/server/lib/license/ @elastic/security-onboarding-and-lifecycle-mgt -/x-pack/plugins/security_solution/server/fleet_integration/ @elastic/security-onboarding-and-lifecycle-mgt -/x-pack/plugins/security_solution/scripts/endpoint/event_filters/ @elastic/security-onboarding-and-lifecycle-mgt -/x-pack/plugins/security_solution/scripts/endpoint/trusted_apps/ @elastic/security-onboarding-and-lifecycle-mgt -/x-pack/test/security_solution_endpoint/apps/endpoint/ @elastic/security-onboarding-and-lifecycle-mgt -/x-pack/test/security_solution_endpoint_api_int/ @elastic/security-onboarding-and-lifecycle-mgt - -## Security Solution sub teams - security-telemetry (Data Engineering) -x-pack/plugins/security_solution/server/usage/ @elastic/security-data-analytics -x-pack/plugins/security_solution/server/lib/telemetry/ @elastic/security-data-analytics - -## Security Solution sub teams - security-engineering-productivity -x-pack/plugins/security_solution/cypress/ccs_e2e @elastic/security-engineering-productivity -x-pack/plugins/security_solution/cypress/upgrade_e2e @elastic/security-engineering-productivity -x-pack/plugins/security_solution/cypress/README.md @elastic/security-engineering-productivity -x-pack/test/security_solution_cypress @elastic/security-engineering-productivity - -## Security Solution sub teams - adaptive-workload-protection -x-pack/plugins/kubernetes_security @elastic/awp-viz -x-pack/plugins/session_view @elastic/awp-viz -x-pack/plugins/security_solution/public/common/components/sessions_viewer @elastic/awp-viz -x-pack/plugins/security_solution/public/kubernetes @elastic/awp-viz - -## Security Solution sub teams - Protections Experience -x-pack/plugins/threat_intelligence @elastic/protections-experience -x-pack/plugins/security_solution/public/threat_intelligence @elastic/protections-experience -x-pack/test/threat_intelligence_cypress @elastic/protections-experience - - -# Security Intelligence And Analytics -/x-pack/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/content/prepackaged_rules @elastic/security-intelligence-analytics - - -# Security Asset Management -/x-pack/plugins/osquery @elastic/security-asset-management -/x-pack/plugins/security_solution/common/detection_engine/rule_response_actions @elastic/security-asset-management -/x-pack/plugins/security_solution/public/detection_engine/rule_response_actions @elastic/security-asset-management -/x-pack/plugins/security_solution/server/lib/detection_engine/rule_response_actions @elastic/security-asset-management - -# Cloud Security Posture -/x-pack/plugins/cloud_security_posture/ @elastic/kibana-cloud-security-posture -/x-pack/plugins/security_solution/public/cloud_security_posture @elastic/kibana-cloud-security-posture -/x-pack/test/api_integration/apis/cloud_security_posture/ @elastic/kibana-cloud-security-posture - -# Security Solution onboarding tour -/x-pack/plugins/security_solution/public/common/components/guided_onboarding @elastic/platform-onboarding -/x-pack/plugins/security_solution/cypress/e2e/guided_onboarding @elastic/platform-onboarding - -# Design (at the bottom for specificity of SASS files) -**/*.scss @elastic/kibana-design - -# Observability design -/x-pack/plugins/apm/**/*.scss @elastic/observability-design -/x-pack/plugins/infra/**/*.scss @elastic/observability-design -/x-pack/plugins/fleet/**/*.scss @elastic/observability-design -/x-pack/plugins/observability/**/*.scss @elastic/observability-design -/x-pack/plugins/monitoring/**/*.scss @elastic/observability-design - -# Ent. Search design -/x-pack/plugins/enterprise_search/**/*.scss @elastic/ent-search-design - -# Security design -/x-pack/plugins/endpoint/**/*.scss @elastic/security-design -/x-pack/plugins/security_solution/**/*.scss @elastic/security-design - -# Logstash -#CC# /x-pack/plugins/logstash/ @elastic/logstash - -# EUI design -/src/plugins/kibana_react/public/page_template/ @elastic/eui-design @elastic/kibana-global-experience - -# Application Experience - - -# Landing page for guided onboarding in Home plugin -/src/plugins/home/public/application/components/guided_onboarding @elastic/platform-onboarding - -#### -## Everything below this comment is automatically generated based on kibana.jsonc -## "owner" fields. This file is automatically updated by CI or can be updated locally -## by running `node scripts/generate codeowners`. -#### - -packages/analytics/client @elastic/kibana-core -packages/analytics/shippers/elastic_v3/browser @elastic/kibana-core -packages/analytics/shippers/elastic_v3/common @elastic/kibana-core -packages/analytics/shippers/elastic_v3/server @elastic/kibana-core -packages/analytics/shippers/fullstory @elastic/kibana-core -packages/analytics/shippers/gainsight @elastic/kibana-core -packages/content-management/inspector @elastic/shared-ux -packages/content-management/table_list @elastic/kibana-global-experience -packages/core/analytics/core-analytics-browser @elastic/kibana-core -packages/core/analytics/core-analytics-browser-internal @elastic/kibana-core -packages/core/analytics/core-analytics-browser-mocks @elastic/kibana-core -packages/core/analytics/core-analytics-server @elastic/kibana-core -packages/core/analytics/core-analytics-server-internal @elastic/kibana-core -packages/core/analytics/core-analytics-server-mocks @elastic/kibana-core -packages/core/application/core-application-browser @elastic/kibana-core -packages/core/application/core-application-browser-internal @elastic/kibana-core -packages/core/application/core-application-browser-mocks @elastic/kibana-core -packages/core/application/core-application-common @elastic/kibana-core -packages/core/apps/core-apps-browser-internal @elastic/kibana-core -packages/core/apps/core-apps-browser-mocks @elastic/kibana-core -packages/core/apps/core-apps-server-internal @elastic/kibana-core -packages/core/base/core-base-browser-internal @elastic/kibana-core -packages/core/base/core-base-browser-mocks @elastic/kibana-core -packages/core/base/core-base-common @elastic/kibana-core -packages/core/base/core-base-common-internal @elastic/kibana-core -packages/core/base/core-base-server-internal @elastic/kibana-core -packages/core/base/core-base-server-mocks @elastic/kibana-core -packages/core/capabilities/core-capabilities-browser-internal @elastic/kibana-core -packages/core/capabilities/core-capabilities-browser-mocks @elastic/kibana-core -packages/core/capabilities/core-capabilities-common @elastic/kibana-core -packages/core/capabilities/core-capabilities-server @elastic/kibana-core -packages/core/capabilities/core-capabilities-server-internal @elastic/kibana-core -packages/core/capabilities/core-capabilities-server-mocks @elastic/kibana-core -packages/core/chrome/core-chrome-browser @elastic/kibana-core -packages/core/chrome/core-chrome-browser-internal @elastic/kibana-core -packages/core/chrome/core-chrome-browser-mocks @elastic/kibana-core -packages/core/config/core-config-server-internal @elastic/kibana-core -packages/core/deprecations/core-deprecations-browser @elastic/kibana-core -packages/core/deprecations/core-deprecations-browser-internal @elastic/kibana-core -packages/core/deprecations/core-deprecations-browser-mocks @elastic/kibana-core -packages/core/deprecations/core-deprecations-common @elastic/kibana-core -packages/core/deprecations/core-deprecations-server @elastic/kibana-core -packages/core/deprecations/core-deprecations-server-internal @elastic/kibana-core -packages/core/deprecations/core-deprecations-server-mocks @elastic/kibana-core -packages/core/doc-links/core-doc-links-browser @elastic/kibana-core -packages/core/doc-links/core-doc-links-browser-internal @elastic/kibana-core -packages/core/doc-links/core-doc-links-browser-mocks @elastic/kibana-core -packages/core/doc-links/core-doc-links-server @elastic/kibana-core -packages/core/doc-links/core-doc-links-server-internal @elastic/kibana-core -packages/core/doc-links/core-doc-links-server-mocks @elastic/kibana-core -packages/core/elasticsearch/core-elasticsearch-client-server-internal @elastic/kibana-core -packages/core/elasticsearch/core-elasticsearch-client-server-mocks @elastic/kibana-core -packages/core/elasticsearch/core-elasticsearch-server @elastic/kibana-core -packages/core/elasticsearch/core-elasticsearch-server-internal @elastic/kibana-core -packages/core/elasticsearch/core-elasticsearch-server-mocks @elastic/kibana-core -packages/core/environment/core-environment-server-internal @elastic/kibana-core -packages/core/environment/core-environment-server-mocks @elastic/kibana-core -packages/core/execution-context/core-execution-context-browser @elastic/kibana-core -packages/core/execution-context/core-execution-context-browser-internal @elastic/kibana-core -packages/core/execution-context/core-execution-context-browser-mocks @elastic/kibana-core -packages/core/execution-context/core-execution-context-common @elastic/kibana-core -packages/core/execution-context/core-execution-context-server @elastic/kibana-core -packages/core/execution-context/core-execution-context-server-internal @elastic/kibana-core -packages/core/execution-context/core-execution-context-server-mocks @elastic/kibana-core -packages/core/fatal-errors/core-fatal-errors-browser @elastic/kibana-core -packages/core/fatal-errors/core-fatal-errors-browser-internal @elastic/kibana-core -packages/core/fatal-errors/core-fatal-errors-browser-mocks @elastic/kibana-core -packages/core/http/core-http-browser @elastic/kibana-core -packages/core/http/core-http-browser-internal @elastic/kibana-core -packages/core/http/core-http-browser-mocks @elastic/kibana-core -packages/core/http/core-http-common @elastic/kibana-core -packages/core/http/core-http-context-server-internal @elastic/kibana-core -packages/core/http/core-http-context-server-mocks @elastic/kibana-core -packages/core/http/core-http-request-handler-context-server @elastic/kibana-core -packages/core/http/core-http-request-handler-context-server-internal @elastic/kibana-core -packages/core/http/core-http-resources-server @elastic/kibana-core -packages/core/http/core-http-resources-server-internal @elastic/kibana-core -packages/core/http/core-http-resources-server-mocks @elastic/kibana-core -packages/core/http/core-http-router-server-internal @elastic/kibana-core -packages/core/http/core-http-router-server-mocks @elastic/kibana-core -packages/core/http/core-http-server @elastic/kibana-core -packages/core/http/core-http-server-internal @elastic/kibana-core -packages/core/http/core-http-server-mocks @elastic/kibana-core -packages/core/i18n/core-i18n-browser @elastic/kibana-core -packages/core/i18n/core-i18n-browser-internal @elastic/kibana-core -packages/core/i18n/core-i18n-browser-mocks @elastic/kibana-core -packages/core/i18n/core-i18n-server @elastic/kibana-core -packages/core/i18n/core-i18n-server-internal @elastic/kibana-core -packages/core/i18n/core-i18n-server-mocks @elastic/kibana-core -packages/core/injected-metadata/core-injected-metadata-browser @elastic/kibana-core -packages/core/injected-metadata/core-injected-metadata-browser-internal @elastic/kibana-core -packages/core/injected-metadata/core-injected-metadata-browser-mocks @elastic/kibana-core -packages/core/injected-metadata/core-injected-metadata-common-internal @elastic/kibana-core -packages/core/integrations/core-integrations-browser-internal @elastic/kibana-core -packages/core/integrations/core-integrations-browser-mocks @elastic/kibana-core -packages/core/lifecycle/core-lifecycle-browser @elastic/kibana-core -packages/core/lifecycle/core-lifecycle-browser-internal @elastic/kibana-core -packages/core/lifecycle/core-lifecycle-browser-mocks @elastic/kibana-core -packages/core/lifecycle/core-lifecycle-server @elastic/kibana-core -packages/core/lifecycle/core-lifecycle-server-internal @elastic/kibana-core -packages/core/lifecycle/core-lifecycle-server-mocks @elastic/kibana-core -packages/core/logging/core-logging-browser-internal @elastic/kibana-core -packages/core/logging/core-logging-browser-mocks @elastic/kibana-core -packages/core/logging/core-logging-common-internal @elastic/kibana-core -packages/core/logging/core-logging-server @elastic/kibana-core -packages/core/logging/core-logging-server-internal @elastic/kibana-core -packages/core/logging/core-logging-server-mocks @elastic/kibana-core -packages/core/metrics/core-metrics-collectors-server-internal @elastic/kibana-core -packages/core/metrics/core-metrics-collectors-server-mocks @elastic/kibana-core -packages/core/metrics/core-metrics-server @elastic/kibana-core -packages/core/metrics/core-metrics-server-internal @elastic/kibana-core -packages/core/metrics/core-metrics-server-mocks @elastic/kibana-core -packages/core/mount-utils/core-mount-utils-browser @elastic/kibana-core -packages/core/mount-utils/core-mount-utils-browser-internal @elastic/kibana-core -packages/core/node/core-node-server @elastic/kibana-core -packages/core/node/core-node-server-internal @elastic/kibana-core -packages/core/node/core-node-server-mocks @elastic/kibana-core -packages/core/notifications/core-notifications-browser @elastic/kibana-core -packages/core/notifications/core-notifications-browser-internal @elastic/kibana-core -packages/core/notifications/core-notifications-browser-mocks @elastic/kibana-core -packages/core/overlays/core-overlays-browser @elastic/kibana-core -packages/core/overlays/core-overlays-browser-internal @elastic/kibana-core -packages/core/overlays/core-overlays-browser-mocks @elastic/kibana-core -packages/core/plugins/core-plugins-base-server-internal @elastic/kibana-core -packages/core/plugins/core-plugins-browser @elastic/kibana-core -packages/core/plugins/core-plugins-browser-internal @elastic/kibana-core -packages/core/plugins/core-plugins-browser-mocks @elastic/kibana-core -packages/core/plugins/core-plugins-server @elastic/kibana-core -packages/core/plugins/core-plugins-server-internal @elastic/kibana-core -packages/core/plugins/core-plugins-server-mocks @elastic/kibana-core -packages/core/preboot/core-preboot-server @elastic/kibana-core -packages/core/preboot/core-preboot-server-internal @elastic/kibana-core -packages/core/preboot/core-preboot-server-mocks @elastic/kibana-core -packages/core/rendering/core-rendering-browser-internal @elastic/kibana-core -packages/core/rendering/core-rendering-browser-mocks @elastic/kibana-core -packages/core/rendering/core-rendering-server-internal @elastic/kibana-core -packages/core/rendering/core-rendering-server-mocks @elastic/kibana-core -packages/core/root/core-root-browser-internal @elastic/kibana-core -packages/core/root/core-root-server-internal @elastic/kibana-core -packages/core/saved-objects/core-saved-objects-api-browser @elastic/kibana-core -packages/core/saved-objects/core-saved-objects-api-server @elastic/kibana-core -packages/core/saved-objects/core-saved-objects-api-server-internal @elastic/kibana-core -packages/core/saved-objects/core-saved-objects-api-server-mocks @elastic/kibana-core -packages/core/saved-objects/core-saved-objects-base-server-internal @elastic/kibana-core -packages/core/saved-objects/core-saved-objects-base-server-mocks @elastic/kibana-core -packages/core/saved-objects/core-saved-objects-browser @elastic/kibana-core -packages/core/saved-objects/core-saved-objects-browser-internal @elastic/kibana-core -packages/core/saved-objects/core-saved-objects-browser-mocks @elastic/kibana-core -packages/core/saved-objects/core-saved-objects-common @elastic/kibana-core -packages/core/saved-objects/core-saved-objects-import-export-server-internal @elastic/kibana-core -packages/core/saved-objects/core-saved-objects-import-export-server-mocks @elastic/kibana-core -packages/core/saved-objects/core-saved-objects-migration-server-internal @elastic/kibana-core -packages/core/saved-objects/core-saved-objects-migration-server-mocks @elastic/kibana-core -packages/core/saved-objects/core-saved-objects-server @elastic/kibana-core -packages/core/saved-objects/core-saved-objects-server-internal @elastic/kibana-core -packages/core/saved-objects/core-saved-objects-server-mocks @elastic/kibana-core -packages/core/saved-objects/core-saved-objects-utils-server @elastic/kibana-core -packages/core/status/core-status-common @elastic/kibana-core -packages/core/status/core-status-common-internal @elastic/kibana-core -packages/core/status/core-status-server @elastic/kibana-core -packages/core/status/core-status-server-internal @elastic/kibana-core -packages/core/status/core-status-server-mocks @elastic/kibana-core -packages/core/test-helpers/core-test-helpers-deprecations-getters @elastic/kibana-core -packages/core/test-helpers/core-test-helpers-http-setup-browser @elastic/kibana-core -packages/core/test-helpers/core-test-helpers-so-type-serializer @elastic/kibana-core -packages/core/test-helpers/core-test-helpers-test-utils @elastic/kibana-core -packages/core/theme/core-theme-browser @elastic/kibana-core -packages/core/theme/core-theme-browser-internal @elastic/kibana-core -packages/core/theme/core-theme-browser-mocks @elastic/kibana-core -packages/core/ui-settings/core-ui-settings-browser @elastic/kibana-core -packages/core/ui-settings/core-ui-settings-browser-internal @elastic/kibana-core -packages/core/ui-settings/core-ui-settings-browser-mocks @elastic/kibana-core -packages/core/ui-settings/core-ui-settings-common @elastic/kibana-core -packages/core/ui-settings/core-ui-settings-server @elastic/kibana-core -packages/core/ui-settings/core-ui-settings-server-internal @elastic/kibana-core -packages/core/ui-settings/core-ui-settings-server-mocks @elastic/kibana-core -packages/core/usage-data/core-usage-data-base-server-internal @elastic/kibana-core -packages/core/usage-data/core-usage-data-server @elastic/kibana-core -packages/core/usage-data/core-usage-data-server-internal @elastic/kibana-core -packages/core/usage-data/core-usage-data-server-mocks @elastic/kibana-core -packages/home/sample_data_card @elastic/kibana-global-experience -packages/home/sample_data_tab @elastic/kibana-global-experience -packages/home/sample_data_types @elastic/kibana-global-experience -packages/kbn-ace @elastic/platform-deployment-management -packages/kbn-alerts @elastic/security-solution -packages/kbn-ambient-storybook-types @elastic/kibana-operations -packages/kbn-ambient-ui-types @elastic/kibana-operations -packages/kbn-analytics @elastic/kibana-core -packages/kbn-apm-config-loader @elastic/kibana-core @vigneshshanmugam -packages/kbn-apm-synthtrace @elastic/apm-ui -packages/kbn-apm-utils @elastic/apm-ui -packages/kbn-axe-config @elastic/kibana-qa -packages/kbn-babel-plugin-synthetic-packages @elastic/kibana-operations -packages/kbn-babel-preset @elastic/kibana-operations -packages/kbn-bazel-packages @elastic/kibana-operations -packages/kbn-bazel-runner @elastic/kibana-operations -packages/kbn-cases-components @elastic/response-ops -packages/kbn-chart-icons @elastic/kibana-visualizations -packages/kbn-ci-stats-core @elastic/kibana-operations -packages/kbn-ci-stats-performance-metrics @elastic/kibana-operations -packages/kbn-ci-stats-reporter @elastic/kibana-operations -packages/kbn-cli-dev-mode @elastic/kibana-operations -packages/kbn-coloring @elastic/kibana-visualizations -packages/kbn-config @elastic/kibana-core -packages/kbn-config-mocks @elastic/kibana-core -packages/kbn-config-schema @elastic/kibana-core -packages/kbn-crypto @elastic/kibana-security -packages/kbn-crypto-browser @elastic/kibana-core -packages/kbn-datemath @elastic/kibana-app-services -packages/kbn-dev-cli-errors @elastic/kibana-operations -packages/kbn-dev-cli-runner @elastic/kibana-operations -packages/kbn-dev-proc-runner @elastic/kibana-operations -packages/kbn-dev-utils @elastic/kibana-operations -packages/kbn-doc-links @elastic/kibana-docs -packages/kbn-docs-utils @elastic/kibana-operations -packages/kbn-ebt-tools @elastic/kibana-core -packages/kbn-es @elastic/kibana-operations -packages/kbn-es-archiver @elastic/kibana-operations -packages/kbn-es-errors @elastic/kibana-core -packages/kbn-es-query @elastic/kibana-app-services -packages/kbn-es-types @elastic/kibana-core @elastic/apm-ui -packages/kbn-eslint-config @elastic/kibana-operations -packages/kbn-eslint-plugin-disable @elastic/kibana-operations -packages/kbn-eslint-plugin-eslint @elastic/kibana-operations -packages/kbn-eslint-plugin-imports @elastic/kibana-operations -packages/kbn-expect @elastic/kibana-operations -packages/kbn-failed-test-reporter-cli @elastic/kibana-operations -packages/kbn-field-types @elastic/kibana-app-services -packages/kbn-find-used-node-modules @elastic/kibana-operations -packages/kbn-flot-charts @elastic/kibana-operations -packages/kbn-ftr-common-functional-services @elastic/kibana-operations -packages/kbn-ftr-screenshot-filename @elastic/kibana-operations -packages/kbn-generate @elastic/kibana-operations -packages/kbn-get-repo-files @elastic/kibana-operations -packages/kbn-guided-onboarding @elastic/platform-onboarding -packages/kbn-handlebars @elastic/kibana-security -packages/kbn-hapi-mocks @elastic/kibana-core -packages/kbn-health-gateway-server @elastic/kibana-core -packages/kbn-i18n @elastic/kibana-core -packages/kbn-i18n-react @elastic/kibana-core -packages/kbn-import-resolver @elastic/kibana-operations -packages/kbn-interpreter @elastic/kibana-visualizations -packages/kbn-io-ts-utils @elastic/apm-ui -packages/kbn-jest-serializers @elastic/kibana-operations -packages/kbn-journeys @elastic/kibana-operations -packages/kbn-kibana-manifest-schema @elastic/kibana-operations -packages/kbn-language-documentation-popover @elastic/kibana-visualizations -packages/kbn-logging @elastic/kibana-core -packages/kbn-logging-mocks @elastic/kibana-core -packages/kbn-managed-vscode-config @elastic/kibana-operations -packages/kbn-managed-vscode-config-cli @elastic/kibana-operations -packages/kbn-mapbox-gl @elastic/kibana-gis -packages/kbn-monaco @elastic/kibana-app-services -packages/kbn-optimizer @elastic/kibana-operations -packages/kbn-optimizer-webpack-helpers @elastic/kibana-operations -packages/kbn-osquery-io-ts-types @elastic/security-asset-management -packages/kbn-performance-testing-dataset-extractor @elastic/kibana-performance-testing -packages/kbn-plugin-discovery @elastic/kibana-operations -packages/kbn-plugin-generator @elastic/kibana-operations -packages/kbn-plugin-helpers @elastic/kibana-operations -packages/kbn-react-field @elastic/kibana-app-services -packages/kbn-repo-source-classifier @elastic/kibana-operations -packages/kbn-repo-source-classifier-cli @elastic/kibana-operations -packages/kbn-rule-data-utils @elastic/security-detections-response @elastic/actionable-observability @elastic/response-ops -packages/kbn-safer-lodash-set @elastic/kibana-security -packages/kbn-securitysolution-autocomplete @elastic/security-solution-platform -packages/kbn-securitysolution-es-utils @elastic/security-solution-platform -packages/kbn-securitysolution-exception-list-components @elastic/security-solution-platform -packages/kbn-securitysolution-hook-utils @elastic/security-solution-platform -packages/kbn-securitysolution-io-ts-alerting-types @elastic/security-solution-platform -packages/kbn-securitysolution-io-ts-list-types @elastic/security-solution-platform -packages/kbn-securitysolution-io-ts-types @elastic/security-solution-platform -packages/kbn-securitysolution-io-ts-utils @elastic/security-solution-platform -packages/kbn-securitysolution-list-api @elastic/security-solution-platform -packages/kbn-securitysolution-list-constants @elastic/security-solution-platform -packages/kbn-securitysolution-list-hooks @elastic/security-solution-platform -packages/kbn-securitysolution-list-utils @elastic/security-solution-platform -packages/kbn-securitysolution-rules @elastic/security-solution-platform -packages/kbn-securitysolution-t-grid @elastic/security-solution-platform -packages/kbn-securitysolution-utils @elastic/security-solution-platform -packages/kbn-server-http-tools @elastic/kibana-core -packages/kbn-server-route-repository @elastic/apm-ui -packages/kbn-shared-svg @elastic/apm-ui -packages/kbn-shared-ux-utility @elastic/kibana-global-experience -packages/kbn-some-dev-log @elastic/kibana-operations -packages/kbn-sort-package-json @elastic/kibana-operations -packages/kbn-spec-to-console @elastic/platform-deployment-management -packages/kbn-std @elastic/kibana-core -packages/kbn-stdio-dev-helpers @elastic/kibana-operations -packages/kbn-storybook @elastic/kibana-operations -packages/kbn-synthetic-package-map @elastic/kibana-operations -packages/kbn-telemetry-tools @elastic/kibana-core -packages/kbn-test @elastic/kibana-operations -packages/kbn-test-jest-helpers @elastic/kibana-operations -packages/kbn-test-subj-selector @elastic/kibana-operations -packages/kbn-timelion-grammar @elastic/kibana-visualizations -packages/kbn-tinymath @elastic/kibana-visualizations -packages/kbn-tooling-log @elastic/kibana-operations -packages/kbn-type-summarizer @elastic/kibana-operations -packages/kbn-type-summarizer-cli @elastic/kibana-operations -packages/kbn-type-summarizer-core @elastic/kibana-operations -packages/kbn-typed-react-router-config @elastic/apm-ui -packages/kbn-ui-framework @elastic/kibana-design -packages/kbn-ui-shared-deps-npm @elastic/kibana-operations -packages/kbn-ui-shared-deps-src @elastic/kibana-operations -packages/kbn-ui-theme @elastic/kibana-operations -packages/kbn-user-profile-components @elastic/kibana-security -packages/kbn-utility-types @elastic/kibana-core -packages/kbn-utility-types-jest @elastic/kibana-operations -packages/kbn-utils @elastic/kibana-operations -packages/kbn-yarn-lock-validator @elastic/kibana-operations -packages/shared-ux/avatar/solution @elastic/kibana-global-experience -packages/shared-ux/avatar/user_profile/impl @elastic/kibana-global-experience -packages/shared-ux/button_toolbar @elastic/kibana-global-experience -packages/shared-ux/button/exit_full_screen/impl @elastic/kibana-global-experience -packages/shared-ux/button/exit_full_screen/mocks @elastic/kibana-global-experience -packages/shared-ux/button/exit_full_screen/types @elastic/kibana-global-experience -packages/shared-ux/card/no_data/impl @elastic/kibana-global-experience -packages/shared-ux/card/no_data/mocks @elastic/kibana-global-experience -packages/shared-ux/card/no_data/types @elastic/kibana-global-experience -packages/shared-ux/link/redirect_app/impl @elastic/kibana-global-experience -packages/shared-ux/link/redirect_app/mocks @elastic/kibana-global-experience -packages/shared-ux/link/redirect_app/types @elastic/kibana-global-experience -packages/shared-ux/markdown/impl @elastic/kibana-global-experience -packages/shared-ux/markdown/mocks @elastic/kibana-global-experience -packages/shared-ux/markdown/types @elastic/kibana-global-experience -packages/shared-ux/page/analytics_no_data/impl @elastic/kibana-global-experience -packages/shared-ux/page/analytics_no_data/mocks @elastic/kibana-global-experience -packages/shared-ux/page/analytics_no_data/types @elastic/kibana-global-experience -packages/shared-ux/page/kibana_no_data/impl @elastic/kibana-global-experience -packages/shared-ux/page/kibana_no_data/mocks @elastic/kibana-global-experience -packages/shared-ux/page/kibana_no_data/types @elastic/kibana-global-experience -packages/shared-ux/page/kibana_template/impl @elastic/kibana-global-experience -packages/shared-ux/page/kibana_template/mocks @elastic/kibana-global-experience -packages/shared-ux/page/kibana_template/types @elastic/kibana-global-experience -packages/shared-ux/page/no_data_config/impl @elastic/kibana-global-experience -packages/shared-ux/page/no_data_config/mocks @elastic/kibana-global-experience -packages/shared-ux/page/no_data_config/types @elastic/kibana-global-experience -packages/shared-ux/page/no_data/impl @elastic/kibana-global-experience -packages/shared-ux/page/no_data/mocks @elastic/kibana-global-experience -packages/shared-ux/page/no_data/types @elastic/kibana-global-experience -packages/shared-ux/page/solution_nav @elastic/kibana-global-experience -packages/shared-ux/prompt/no_data_views/impl @elastic/kibana-global-experience -packages/shared-ux/prompt/no_data_views/mocks @elastic/kibana-global-experience -packages/shared-ux/prompt/no_data_views/types @elastic/kibana-global-experience -packages/shared-ux/router/impl @elastic/kibana-global-experience -packages/shared-ux/router/mocks @elastic/kibana-global-experience -packages/shared-ux/router/types @elastic/kibana-global-experience -packages/shared-ux/storybook/config @elastic/kibana-global-experience -packages/shared-ux/storybook/mock @elastic/kibana-global-experience -x-pack/packages/ml/agg_utils @elastic/ml-ui -x-pack/packages/ml/aiops_components @elastic/ml-ui -x-pack/packages/ml/aiops_utils @elastic/ml-ui -x-pack/packages/ml/is_populated_object @elastic/ml-ui -x-pack/packages/ml/string_hash @elastic/ml-ui diff --git a/docs/api-generated/cases/case-apis-passthru.asciidoc b/docs/api-generated/cases/case-apis-passthru.asciidoc index b90c15ba05981..ebee51dab6d8d 100644 --- a/docs/api-generated/cases/case-apis-passthru.asciidoc +++ b/docs/api-generated/cases/case-apis-passthru.asciidoc @@ -2077,13 +2077,13 @@ Any modifications made to this file will be overwritten.

alert_identifiers - Alert identifiers Up

-
The alert identifier. It is required only when type is alert. If it is an array, index must also be an array with the same length or number of elements. This functionality is in technical preview and may be changed or removed in a future release. Elastic will apply best effort to fix any issues, but features in technical preview are not subject to the support SLA of official GA features.
+
The alert identifiers. It is required only when type is alert. You can use an array of strings to add multiple alerts to a case, provided that they all relate to the same rule; index must also be an array with the same length or number of elements. Adding multiple alerts in this manner is recommended rather than calling the API multiple times. This functionality is in technical preview and may be changed or removed in a future release. Elastic will apply best effort to fix any issues, but features in technical preview are not subject to the support SLA of official GA features.

alert_indices - Alert indices Up

-
The alert index. It is required only when type is alert. If it is an array, alertId must also be an array with the same length or number of elements. This functionality is in technical preview and may be changed or removed in a future release. Elastic will apply best effort to fix any issues, but features in technical preview are not subject to the support SLA of official GA features.
+
The alert indices. It is required only when type is alert. If you are adding multiple alerts to a case, use an array of strings; the position of each index name in the array must match the position of the corresponding alert identifier in the alertId array. This functionality is in technical preview and may be changed or removed in a future release. Elastic will apply best effort to fix any issues, but features in technical preview are not subject to the support SLA of official GA features.
@@ -2663,7 +2663,7 @@ Any modifications made to this file will be overwritten.

rule - Alerting rule Up

-
The rule that is associated with the alert. It is required only when type is alert. This functionality is in technical preview and may be changed or removed in a future release. Elastic will apply best effort to fix any issues, but features in technical preview are not subject to the support SLA of official GA features.
+
The rule that is associated with the alerts. It is required only when type is alert. This functionality is in technical preview and may be changed or removed in a future release. Elastic will apply best effort to fix any issues, but features in technical preview are not subject to the support SLA of official GA features.
id (optional)
String The rule identifier.
name (optional)
String The rule name.
diff --git a/docs/api/actions-and-connectors.asciidoc b/docs/api/actions-and-connectors.asciidoc index 991dfb5ade1d4..1e8b5d426e310 100644 --- a/docs/api/actions-and-connectors.asciidoc +++ b/docs/api/actions-and-connectors.asciidoc @@ -1,27 +1,26 @@ [[actions-and-connectors-api]] == Action and connector APIs -Manage Actions and Connectors. - The following connector APIs are available: -* <> to retrieve a single connector by ID +* <> to retrieve a single connector by ID -* <> to retrieve all connectors +* <> to retrieve all connectors -* <> to retrieve a list of all connector types +* <> to retrieve a list of all connector types -* <> to create connectors +* <> to create connectors -* <> to update the attributes for an existing connector +* <> to update the attributes for an existing connector -* <> to execute a connector by ID +* <> to execute a connector by ID -* <> to delete a connector by ID +* <> to delete a connector by ID For deprecated APIs, refer to <>. -For information about the actions and connectors that {kib} supports, refer to <>. +For information about the actions and connectors that {kib} supports, refer to +<>. include::actions-and-connectors/create.asciidoc[leveloffset=+1] include::actions-and-connectors/delete.asciidoc[leveloffset=+1] diff --git a/docs/api/actions-and-connectors/create.asciidoc b/docs/api/actions-and-connectors/create.asciidoc index b277a49d43723..cdaab61e5581e 100644 --- a/docs/api/actions-and-connectors/create.asciidoc +++ b/docs/api/actions-and-connectors/create.asciidoc @@ -15,9 +15,8 @@ Creates a connector. === {api-prereq-title} -You must have `all` privileges for the *Actions and Connectors* feature in the -*Management* section of the -<>. +You must have `all` privileges for the *{connectors-feature}* feature in the +*Management* section of the <>. [[create-connector-api-path-params]] === {api-path-parms-title} diff --git a/docs/api/actions-and-connectors/delete.asciidoc b/docs/api/actions-and-connectors/delete.asciidoc index 1ef917f58d24f..fcf3ca3e8b69e 100644 --- a/docs/api/actions-and-connectors/delete.asciidoc +++ b/docs/api/actions-and-connectors/delete.asciidoc @@ -19,7 +19,7 @@ WARNING: When you delete a connector, _it cannot be recovered_. [discrete] === {api-prereq-title} -You must have `all` privileges for the *Actions and Connectors* feature in the +You must have `all` privileges for the *{connectors-feature}* feature in the *Management* section of the <>. diff --git a/docs/api/actions-and-connectors/execute.asciidoc b/docs/api/actions-and-connectors/execute.asciidoc index b5c59bb86bc70..a3e10efc5720b 100644 --- a/docs/api/actions-and-connectors/execute.asciidoc +++ b/docs/api/actions-and-connectors/execute.asciidoc @@ -16,7 +16,7 @@ Runs a connector by ID. [[execute-connector-api-prereq]] === {api-prereq-title} -You must have `read` privileges for the *Actions and Connectors* feature in the +You must have `read` privileges for the *{connectors-feature}* feature in the *Management* section of the <>. @@ -60,8 +60,7 @@ refer to <>. `documents`:: (Required, array of objects) The documents to index in JSON format. -For more information, refer to -{kibana-ref}/index-action-type.html[Index connector and action]. +For more information, refer to <>. ===== .Jira connectors @@ -158,10 +157,124 @@ the knowledge base. ======= ====== -For more information, refer to -{kibana-ref}/jira-action-type.html[{jira} connector and action]. +For more information, refer to <>. ===== +.{opsgenie} connectors +[%collapsible%open] +===== +`subAction`:: +(Required, string) The action to test. Valid values include: `createAlert` and +`closeAlert`. + +`subActionParams`:: +(Required, object) The set of configuration properties, which vary depending on +the `subAction` value. ++ +.Properties when `subAction` is `createAlert` +[%collapsible%open] +====== +`actions`:::: +(Optional, array of strings) The custom actions available to the alert. + +`alias`:::: +(Optional, string) The unique identifier used for alert de-duplication in {opsgenie}. + +`description`:::: +(Optional, string) A description that provides detailed information about the alert. + +`details`:::: +(Optional, object) The custom properties of the alert. For example: +`{"key1":"value1","key2":"value2"}`. + +`entity`:::: +(Optional, string) The domain of the alert. For example, the application or server +name. + +`message`:::: +(Required, string) The alert message. + +`note`:::: +(Optional, string) Additional information for the alert. + +`priority`:::: +(Optional, string) The priority level for the alert. Valid values are: `P1`, +`P2`, `P3`, `P4`, and `P5`. + +`responders`:::: +(Optional, array of objects) The entities to receive notifications about the +alert. If `type` is `user`, either `id` or `username` is required. If `type` is +`team`, either `id` or `name` is required. ++ +.Properties of `responders` objects +[%collapsible%open] +======= +`id`:::: +(Required^*^, string) The identifier for the entity. + +`name`:::: +(Required^*^, string) The name of the entity. + +`type`:::: +(Required, string) Valid values are `escalation`, `schedule`, `team`, and `user`. + +`username`:::: +(Required^*^, string) A valid email address for the user. +======= + +`source`:::: +(Optional, string) The display name for the source of the alert. + +`tags`:::: +(Optional, array of strings) The tags for the alert. + +`user`:::: +(Optional, string) The display name for the owner. + +`visibleTo`:::: +(Optional, array of objects) The teams and users that the alert will be visible +to without sending a notification. Only one of `id`, `name`, or `username` is +required. ++ +.Properties of `visibleTo` objects +[%collapsible%open] +======= +`id`:::: +(Required^*^, string) The identifier for the entity. + +`name`:::: +(Required^*^, string) The name of the entity. + +`type`:::: +(Required, string) Valid values are `team` and `user`. + +`username`:::: +(Required^*^, string) The user name. This property is required only when the +`type` is `user`. +======= +====== ++ +.Properties when `subAction` is `closeAlert` +[%collapsible%open] +====== +`alias`:::: +(Required, string) The unique identifier used for alert de-duplication in {opsgenie}. +The alias must match the value used when creating the alert. + +`note`:::: +(Optional, string) Additional information for the alert. + +`source`:::: +(Optional, string) The display name for the source of the alert. + +`user`:::: +(Optional, string) The display name for the owner. +====== + +For more information, refer to <>. +===== + + .{sn-itom} connectors [%collapsible%open] ===== diff --git a/docs/api/actions-and-connectors/get.asciidoc b/docs/api/actions-and-connectors/get.asciidoc index 2d5cc4edd4276..23266e1351d07 100644 --- a/docs/api/actions-and-connectors/get.asciidoc +++ b/docs/api/actions-and-connectors/get.asciidoc @@ -17,7 +17,7 @@ Retrieves a connector by ID. [discrete] === {api-prereq-title} -You must have `read` privileges for the *Actions and Connectors* feature in the +You must have `read` privileges for the *{connectors-feature}* feature in the *Management* section of the <>. diff --git a/docs/api/actions-and-connectors/get_all.asciidoc b/docs/api/actions-and-connectors/get_all.asciidoc index b2ebe316fc5b2..aced6e91914fa 100644 --- a/docs/api/actions-and-connectors/get_all.asciidoc +++ b/docs/api/actions-and-connectors/get_all.asciidoc @@ -17,7 +17,7 @@ Retrieves all connectors. [discrete] === {api-prereq-title} -You must have `read` privileges for the *Actions and Connectors* feature in the +You must have `read` privileges for the *{connectors-feature}* feature in the *Management* section of the <>. diff --git a/docs/api/actions-and-connectors/update.asciidoc b/docs/api/actions-and-connectors/update.asciidoc index 58056cb8085f9..16fb327e61931 100644 --- a/docs/api/actions-and-connectors/update.asciidoc +++ b/docs/api/actions-and-connectors/update.asciidoc @@ -16,7 +16,7 @@ Updates the attributes for a connector. [discrete] === {api-prereq-title} -You must have `all` privileges for the *Actions and Connectors* feature in the +You must have `all` privileges for the *{connectors-feature}* feature in the *Management* section of the <>. diff --git a/docs/api/alerting/create_rule.asciidoc b/docs/api/alerting/create_rule.asciidoc index 24abf15d02dea..b7c27b75c1801 100644 --- a/docs/api/alerting/create_rule.asciidoc +++ b/docs/api/alerting/create_rule.asciidoc @@ -21,7 +21,7 @@ the `consumer` and `rule_type_id` of the rules you're creating. For example, the *Management* > *Stack Rules* feature, *Analytics* > *Discover* and *{ml-app}* features, *{observability}*, and *Security* features. If the rule has `actions`, you must also have `read` privileges for the *Management* > -*Actions and Connectors* feature. For more details, refer to +*{connectors-feature}* feature. For more details, refer to <>. === {api-description-title} diff --git a/docs/api/alerting/mute_alert.asciidoc b/docs/api/alerting/mute_alert.asciidoc index 4feb03f72afdc..92c42e1be682c 100644 --- a/docs/api/alerting/mute_alert.asciidoc +++ b/docs/api/alerting/mute_alert.asciidoc @@ -20,7 +20,7 @@ the `consumer` and `rule_type_id` of the rules you're creating. For example, the *Management* > *Stack Rules* feature, *Analytics* > *Discover* and *{ml-app}* features, *{observability}*, and *Security* features. If the rule has `actions`, you must also have `read` privileges for the *Management* > -*Actions and Connectors* feature. For more details, refer to +*{connectors-feature}* feature. For more details, refer to <>. [[mute-alert-api-path-params]] diff --git a/docs/api/alerting/mute_all_alerts.asciidoc b/docs/api/alerting/mute_all_alerts.asciidoc index 329d05257d4f5..043b329a14dd4 100644 --- a/docs/api/alerting/mute_all_alerts.asciidoc +++ b/docs/api/alerting/mute_all_alerts.asciidoc @@ -20,7 +20,7 @@ the `consumer` and `rule_type_id` of the rules you're creating. For example, the *Management* > *Stack Rules* feature, *Analytics* > *Discover* and *{ml-app}* features, *{observability}*, and *Security* features. If the rule has `actions`, you must also have `read` privileges for the *Management* > -*Actions and Connectors* feature. For more details, refer to +*{connectors-feature}* feature. For more details, refer to <>. === {api-description-title} diff --git a/docs/api/alerting/unmute_alert.asciidoc b/docs/api/alerting/unmute_alert.asciidoc index d962b480b3ab8..6bda4cb5c039a 100644 --- a/docs/api/alerting/unmute_alert.asciidoc +++ b/docs/api/alerting/unmute_alert.asciidoc @@ -20,7 +20,7 @@ the `consumer` and `rule_type_id` of the rules you're creating. For example, the *Management* > *Stack Rules* feature, *Analytics* > *Discover* and *{ml-app}* features, *{observability}*, and *Security* features. If the rule has `actions`, you must also have `read` privileges for the *Management* > -*Actions and Connectors* feature. For more details, refer to +*{connectors-feature}* feature. For more details, refer to <>. [[unmute-alert-api-path-params]] diff --git a/docs/api/alerting/unmute_all_alerts.asciidoc b/docs/api/alerting/unmute_all_alerts.asciidoc index ea10b9434e918..7c0972bb0c53b 100644 --- a/docs/api/alerting/unmute_all_alerts.asciidoc +++ b/docs/api/alerting/unmute_all_alerts.asciidoc @@ -20,7 +20,7 @@ the `consumer` and `rule_type_id` of the rules you're creating. For example, the *Management* > *Stack Rules* feature, *Analytics* > *Discover* and *{ml-app}* features, *{observability}*, and *Security* features. If the rule has `actions`, you must also have `read` privileges for the *Management* > -*Actions and Connectors* feature. For more details, refer to +*{connectors-feature}* feature. For more details, refer to <>. === {api-description-title} diff --git a/docs/api/alerting/update_rule.asciidoc b/docs/api/alerting/update_rule.asciidoc index 19a9c7c0144b0..fe5e91212d7d1 100644 --- a/docs/api/alerting/update_rule.asciidoc +++ b/docs/api/alerting/update_rule.asciidoc @@ -20,7 +20,7 @@ the `consumer` and `rule_type_id` of the rule you're updating. For example, the *Management* > *Stack Rules* feature, *Analytics* > *Discover* and *{ml-app}* features, *{observability}*, or *Security* features. If the rule has `actions`, you must also have `read` privileges for the *Management* > -*Actions and Connectors* feature. For more details, refer to +*{connectors-feature}* feature. For more details, refer to <>. === {api-description-title} diff --git a/docs/api/cases/cases-api-add-comment.asciidoc b/docs/api/cases/cases-api-add-comment.asciidoc index 918f579f1c0de..ea2c54cb49f1d 100644 --- a/docs/api/cases/cases-api-add-comment.asciidoc +++ b/docs/api/cases/cases-api-add-comment.asciidoc @@ -39,22 +39,28 @@ default space is used. === {api-request-body-title} `alertId`:: -(Required*, string or array of strings) The alert identifier. It is required -only when `type` is `alert`. If it is an array, `index` must also be an array. preview:[] +(Required*, string or array of strings) The alert identifiers. It is required +only when `type` is `alert`. You can use an array of strings to add multiple +alerts to a case, provided that they all relate to the same rule; `index` must +also be an array with the same length or number of elements. Adding multiple +alerts in this manner is recommended rather than calling the API multiple times. +preview:[] `comment`:: (Required*, string) The new comment. It is required only when `type` is `user`. `index`:: -(Required*, string or array of strings) The alert index. It is required only -when `type` is `alert`. If it is an array, `alertId` must also be an array. preview:[] +(Required*, string or array of strings) The alert indices. It is required only +when `type` is `alert`. If you are adding multiple alerts to a case, use an array +of strings; the position of each index name in the array must match the position +of the corresponding alert identifier in the `alertId` array. preview:[] `owner`:: (Required, string) The application that owns the case. Valid values are: `cases`, `observability`, or `securitySolution`. `rule`:: -(Required*, object) The rule that is associated with the alert. It is required +(Required*, object) The rule that is associated with the alerts. It is required only when `type` is `alert`. preview:[] + .Properties of `rule` diff --git a/docs/api/cases/cases-api-find-connectors.asciidoc b/docs/api/cases/cases-api-find-connectors.asciidoc index aee6900155726..6968bc55d88bb 100644 --- a/docs/api/cases/cases-api-find-connectors.asciidoc +++ b/docs/api/cases/cases-api-find-connectors.asciidoc @@ -24,7 +24,7 @@ For the most up-to-date API details, refer to the === {api-prereq-title} -You must have `read` privileges for the *Actions and Connectors* feature in the +You must have `read` privileges for the *{connectors-feature}* feature in the *Management* section of the <>. diff --git a/docs/api/cases/cases-api-push.asciidoc b/docs/api/cases/cases-api-push.asciidoc index 2eb8d70e4634e..5f7a0c268ff1c 100644 --- a/docs/api/cases/cases-api-push.asciidoc +++ b/docs/api/cases/cases-api-push.asciidoc @@ -20,7 +20,7 @@ For the most up-to-date API details, refer to the === {api-prereq-title} -You must have `all` privileges for the *Actions and Connectors* feature in the +You must have `all` privileges for the *{connectors-feature}* feature in the *Management* section of the <>. You must also have `all` privileges for the *Cases* feature in the *Management*, *{observability}*, or diff --git a/docs/api/cases/cases-api-update-comment.asciidoc b/docs/api/cases/cases-api-update-comment.asciidoc index 4f2e89a7997ea..13adb2218029e 100644 --- a/docs/api/cases/cases-api-update-comment.asciidoc +++ b/docs/api/cases/cases-api-update-comment.asciidoc @@ -39,9 +39,11 @@ default space is used. === {api-request-body-title} `alertId`:: -(Required*, string or array of strings) The identifier for the alert. It is -required only when `type` is `alert`. If it is an array, `index` must also be an -array.preview:[] +(Required*, string or array of strings) The alert identifiers. It is +required only when `type` is `alert`. If you are adding multiple alerts to a +case, use an array of strings; `index` must also be an array with the same +length or number of elements in that case. Addings multiple alerts in this manner +is recommended rather than calling the API multiple times. `comment`:: (Required*, string) The updated comment. It is required only when `type` is @@ -52,9 +54,10 @@ array.preview:[] <>. `index`:: -(Required*, string or array of strings) The alert index. It is required only -when `type` is `alert`. If it is an array, `alertId` must also be an array. -preview:[] +(Required*, string or array of strings) The alert indices. It is required only +when `type` is `alert`. If you are adding multiple alerts to a case, use an +array of strings; `alertId` must also be an array with the same length or number +of elements. preview:[] `owner`:: (Required, string) The application that owns the case. It can be `cases`, diff --git a/docs/apm/apm-alerts.asciidoc b/docs/apm/apm-alerts.asciidoc index d8ce1fafc783c..102a31be4c4a9 100644 --- a/docs/apm/apm-alerts.asciidoc +++ b/docs/apm/apm-alerts.asciidoc @@ -100,7 +100,8 @@ Click **Save**. The alert has been created and is now active! [[apm-alert-manage]] === Manage alerts and rules -From the APM app, select **Alerts and rules** > **Manage rules** to be taken to the Kibana **Rules and Connectors** page. +From the APM app, select **Alerts and rules** > **Manage rules** to be taken to +the {kib} *{rules-ui}* page. From this page, you can disable, mute, and delete APM alerts. [float] diff --git a/docs/developer/best-practices/index.asciidoc b/docs/developer/best-practices/index.asciidoc index c3f8239e9af91..c610c787d2b8d 100644 --- a/docs/developer/best-practices/index.asciidoc +++ b/docs/developer/best-practices/index.asciidoc @@ -22,7 +22,7 @@ Are you planning with scalability in mind? Did you know {kib} makes a public statement about our commitment to creating an accessible product for people with disabilities? -https://www.elastic.co/guide/en/kibana/master/accessibility.html[We do]! +<>! It’s very important all of our apps are accessible. * Learn how https://elastic.github.io/eui/#/guidelines/accessibility[EUI diff --git a/docs/management/action-types.asciidoc b/docs/management/action-types.asciidoc index 74738a8fddeb1..9a48f3c9b9ae4 100644 --- a/docs/management/action-types.asciidoc +++ b/docs/management/action-types.asciidoc @@ -87,10 +87,11 @@ For a comparison of the Elastic subscription levels, go to [[connector-management]] === Managing connectors -Rules use connectors to route actions to different destinations like log files, ticketing systems, and messaging tools. While each {kib} app can offer their own types of rules, they typically share connectors. The *Connectors* tab offers a central place to view and manage all the connectors in the current space. +Rules use connectors to route actions to different destinations like log files, ticketing systems, and messaging tools. While each {kib} app can offer their own types of rules, they typically share connectors. *{stack-manage-app} > {connectors-ui}* offers a central place to view and manage all the connectors in the current space. [role="screenshot"] image::images/connector-listing.png[Example connector listing in the {rules-ui} UI] +// NOTE: This is an autogenerated screenshot. Do not edit it directly. [float] === Required permissions @@ -101,15 +102,16 @@ features. For more information, go to <>. [float] === Connector networking configuration -Use the <> to customize connector networking configurations, such as proxies, certificates, or TLS settings. You can set configurations that apply to all your connectors or use `xpack.actions.customHostSettings` to set per-host configurations. +Use the <> to customize connector networking configurations, such as proxies, certificates, or TLS settings. You can set configurations that apply to all your connectors or use `xpack.actions.customHostSettings` to set per-host configurations. [float] [[connectors-list]] === Connector list -The *Connectors* tab lists all connectors in the current space. The search bar -can be used to find specific connectors by name and type. The *Type* dropdown -also enables you to filter to a subset of connector types. +In *{stack-manage-app} > {connectors-ui}*, you can find a list of the connectors +in the current space. You can use the search bar to find specific connectors by +name and type. The *Type* dropdown also enables you to filter to a subset of +connector types. [role="screenshot"] image::images/connector-filter-by-type.png[Filtering the connector list by types of connectors] @@ -150,7 +152,7 @@ To import and export connectors, use the image::images/connectors-import-banner.png[Connectors import banner, width=50%] If a connector is missing sensitive information after the import, a **Fix** -button appears in *{rules-ui}*. +button appears in *{connectors-ui}*. [role="screenshot"] image::images/connectors-with-missing-secrets.png[Connectors with missing secrets] diff --git a/docs/management/cases/add-connectors.asciidoc b/docs/management/cases/add-connectors.asciidoc index 49176e5e8c035..dac588b99950d 100644 --- a/docs/management/cases/add-connectors.asciidoc +++ b/docs/management/cases/add-connectors.asciidoc @@ -20,9 +20,9 @@ appropriate {kib} feature privileges. Refer to <>. [[create-case-connectors]] == Create connectors -You can create connectors in *Management > {stack-manage-app} > {rules-ui}*, as -described in <>. Alternatively, you can create them in -*Management > {stack-manage-app} > Cases*: +You can create connectors in *{stack-manage-app} > {connectors-ui}*, +as described in <>. Alternatively, you can create them in +*{stack-manage-app} > Cases*: . Click *Edit external connection*. + @@ -47,7 +47,7 @@ configuration details. You can create additional connectors, update existing connectors, change the default connector, and change case closure options. -. Go to *Management > {stack-manage-app} > Cases*, click *Edit external connection*. +. Go to *{stack-manage-app} > Cases*, click *Edit external connection*. . To change whether cases are automatically closed after they are sent to an external system, update the case closure options. diff --git a/docs/management/cases/setup-cases.asciidoc b/docs/management/cases/setup-cases.asciidoc index 51165cd7c4691..9131a92e7049d 100644 --- a/docs/management/cases/setup-cases.asciidoc +++ b/docs/management/cases/setup-cases.asciidoc @@ -13,11 +13,11 @@ privileges: | Give full access to manage cases a| * `All` for the *Cases* feature under *Management*. -* `All` for the *Actions and Connectors* feature under *Management*. +* `All` for the *{connectors-feature}* feature under *Management*. [NOTE] ==== -The *Actions and Connectors* feature privilege is required to create, add, +The *{connectors-feature}* feature privilege is required to create, add, delete, and modify case connectors and to send updates to external systems. By default, `All` for the *Cases* feature includes authority to delete cases diff --git a/docs/management/connectors/action-types/email.asciidoc b/docs/management/connectors/action-types/email.asciidoc index f926d86e7767f..d348ede2f84e1 100644 --- a/docs/management/connectors/action-types/email.asciidoc +++ b/docs/management/connectors/action-types/email.asciidoc @@ -170,7 +170,7 @@ A string that corresponds to *Client Secret*. Should be stored in the [float] [[define-email-ui]] -==== Define connector in Stack Management +==== Define connector in {stack-manage-app} Define email connector properties. diff --git a/docs/management/connectors/action-types/index.asciidoc b/docs/management/connectors/action-types/index.asciidoc index 6bc2d7dac6983..87751a10328b7 100644 --- a/docs/management/connectors/action-types/index.asciidoc +++ b/docs/management/connectors/action-types/index.asciidoc @@ -59,7 +59,7 @@ A string that corresponds to *Execution time field*. [float] [[define-index-ui]] -==== Define connector in Stack Management +==== Define connector in {stack-manage-app} Define Index connector properties. diff --git a/docs/management/connectors/action-types/jira.asciidoc b/docs/management/connectors/action-types/jira.asciidoc index aa6e92f965e82..b85e1361844e2 100644 --- a/docs/management/connectors/action-types/jira.asciidoc +++ b/docs/management/connectors/action-types/jira.asciidoc @@ -13,7 +13,7 @@ The Jira connector uses the https://developer.atlassian.com/cloud/jira/platform/ Jira connectors have the following configuration properties. -Name:: The name of the connector. The name is used to identify a connector in the **Stack Management** UI connector listing, and in the connector list when configuring an action. +Name:: The name of the connector. URL:: Jira instance URL. Project key:: Jira project key. Email:: The account email for HTTP Basic authentication. @@ -54,7 +54,7 @@ Secrets defines sensitive information for the connector type. [float] [[define-jira-ui]] -==== Define connector in Stack Management +==== Define connector in {stack-manage-app} Define Jira connector properties. diff --git a/docs/management/connectors/action-types/opsgenie.asciidoc b/docs/management/connectors/action-types/opsgenie.asciidoc index 9ca081b1e55f1..384595be2fae8 100644 --- a/docs/management/connectors/action-types/opsgenie.asciidoc +++ b/docs/management/connectors/action-types/opsgenie.asciidoc @@ -156,8 +156,6 @@ User:: The display name of the owner (optional). After obtaining an Opsgenie instance, configure the API integration. For details, refer to the https://support.atlassian.com/opsgenie/docs/create-a-default-api-integration/[Opsgenie documentation]. -After creating an Opsgenie instance, https://support.atlassian.com/opsgenie/docs/create-a-default-api-integration/[configure the API integration]. - If you're using a free trial, go to the `Teams` dashboard and select the appropriate team. image::management/connectors/images/opsgenie-teams.png[Opsgenie teams dashboard] diff --git a/docs/management/connectors/action-types/pagerduty.asciidoc b/docs/management/connectors/action-types/pagerduty.asciidoc index 5e12eddaa5c77..aba9db8f997f7 100644 --- a/docs/management/connectors/action-types/pagerduty.asciidoc +++ b/docs/management/connectors/action-types/pagerduty.asciidoc @@ -48,7 +48,7 @@ Secrets defines sensitive information for the connector type. [float] [[define-pagerduty-ui]] -==== Define connector in Stack Management +==== Define connector in {stack-manage-app} Define PagerDuty connector properties. @@ -128,20 +128,20 @@ image::images/pagerduty-integration.png[PagerDuty Integrations tab] [[pagerduty-in-elastic]] *In Elastic* -. Create a PagerDuty Connector in Kibana. You can: +. Create a PagerDuty connector in Kibana. You can: + * Create a connector as part of creating an rule by selecting PagerDuty in the *Actions* section of the rule configuration and selecting *Add new*. -* Alternatively, create a connector. To create a connector, open the main menu, click *Stack Management > Rules and Connectors*, select *Connectors*, click *Create connector*, then select the PagerDuty option. +* Alternatively, create a connector. To create a connector, go to *{stack-manage-app} > {connectors-ui}*, click *Create connector*, then select the PagerDuty option. . Configure the connector by giving it a name and entering the Integration Key, optionally entering a custom API URL. + -See <> for how to obtain the endpoint and key information from PagerDuty and -<> for more details. +See <> for how to obtain the endpoint and key information from PagerDuty and +<> for more details. -. Save the Connector. +. Save the connector. -. To create a rule, open the main menu, then click *Stack Management > Rules and Connectors* or the application of your choice. +. To create a rule, go to *{stack-manage-app} > {rules-ui}* or the application of your choice. . Set up an action using your PagerDuty connector, by determining: + @@ -151,5 +151,5 @@ See <> for how to obtain the endpoint and Depending on your custom needs, assign them variables from the rule context. To see the available context variables, click on the *Add variable* icon next to each corresponding field. For more details on these parameters, see the -<> and the PagerDuty +<> and the PagerDuty https://v2.developer.pagerduty.com/v2/docs/send-an-event-events-api-v2[API v2 documentation]. diff --git a/docs/management/connectors/action-types/resilient.asciidoc b/docs/management/connectors/action-types/resilient.asciidoc index ef8196bea0aab..3ba0e8e701dfd 100644 --- a/docs/management/connectors/action-types/resilient.asciidoc +++ b/docs/management/connectors/action-types/resilient.asciidoc @@ -13,7 +13,7 @@ The IBM Resilient connector uses the https://developer.ibm.com/security/resilien IBM Resilient connectors have the following configuration properties. -Name:: The name of the connector. The name is used to identify a connector in the **Stack Management** UI connector listing, and in the connector list when configuring an action. +Name:: The name of the connector. URL:: IBM Resilient instance URL. Organization ID:: IBM Resilient organization ID. API key ID:: The authentication key ID for HTTP Basic authentication. @@ -54,7 +54,7 @@ Secrets defines sensitive information for the connector type. [float] [[define-resilient-ui]] -==== Define connector in Stack Management +==== Define connector in {stack-manage-app} Define IBM Resilient connector properties. diff --git a/docs/management/connectors/action-types/server-log.asciidoc b/docs/management/connectors/action-types/server-log.asciidoc index 0810724d39ead..7d9171ca99ed8 100644 --- a/docs/management/connectors/action-types/server-log.asciidoc +++ b/docs/management/connectors/action-types/server-log.asciidoc @@ -13,7 +13,7 @@ This connector writes an entry to the {kib} server log. Server log connectors have the following configuration properties. -Name:: The name of the connector. The name is used to identify a connector in the management UI connector listing, or in the connector list when configuring an action. +Name:: The name of the connector. [float] [[Preconfigured-server-log-configuration]] @@ -28,7 +28,7 @@ Name:: The name of the connector. The name is used to identify a connector [float] [[define-serverlog-ui]] -==== Define connector in Stack Management +==== Define connector in {stack-manage-app} Define Server log connector properties. diff --git a/docs/management/connectors/action-types/servicenow-itom.asciidoc b/docs/management/connectors/action-types/servicenow-itom.asciidoc index 609ac85c931b6..6016ee3d6f8c7 100644 --- a/docs/management/connectors/action-types/servicenow-itom.asciidoc +++ b/docs/management/connectors/action-types/servicenow-itom.asciidoc @@ -54,7 +54,7 @@ include::servicenow.asciidoc[tag=servicenow-endpoint] {sn-itom} connectors have the following configuration properties. -Name:: The name of the connector. The name is used to identify a connector in the **Stack Management** connector listing, and in the connector list when configuring an action. +Name:: The name of the connector. Is OAuth:: The type of authentication to use. URL:: {sn} instance URL. Username:: Username for HTTP Basic authentication. @@ -125,7 +125,7 @@ Secrets defines sensitive information for the connector type. [float] [[define-servicenow-itom-ui]] -=== Define connector in Stack Management +=== Define connector in {stack-manage-app} Define {sn-itom} connector properties. Choose whether to use OAuth for authentication. diff --git a/docs/management/connectors/action-types/servicenow-sir.asciidoc b/docs/management/connectors/action-types/servicenow-sir.asciidoc index 44c034cd35f61..e9a9c80b13a45 100644 --- a/docs/management/connectors/action-types/servicenow-sir.asciidoc +++ b/docs/management/connectors/action-types/servicenow-sir.asciidoc @@ -82,7 +82,7 @@ IMPORTANT: Deprecated connectors will continue to function with the rules they w To update a deprecated connector: -. Open the main menu and go to *Stack Management -> Rules and connectors -> Connectors*. +. Open the main menu and go to *{stack-manage-app} > {connectors-ui}*. . Select the deprecated connector to open the *Edit connector* flyout. . In the warning message, click *Update this connector*. . Complete the guided steps in the *Edit connector* flyout. @@ -97,7 +97,7 @@ To update a deprecated connector: {sn-sir} connectors have the following configuration properties. -Name:: The name of the connector. The name is used to identify a connector in the **Stack Management** UI connector listing, and in the connector list when configuring an action. +Name:: The name of the connector. Is OAuth:: The type of authentication to use. URL:: {sn} instance URL. Username:: Username for HTTP Basic authentication. @@ -173,7 +173,7 @@ Secrets defines sensitive information for the connector type. [float] [[define-servicenow-sir-ui]] -=== Define connector in Stack Management +=== Define connector in {stack-manage-app} Define {sn} SecOps connector properties. Choose whether to use OAuth for authentication. diff --git a/docs/management/connectors/action-types/servicenow.asciidoc b/docs/management/connectors/action-types/servicenow.asciidoc index 658532d1226f9..b5c5bcecc1800 100644 --- a/docs/management/connectors/action-types/servicenow.asciidoc +++ b/docs/management/connectors/action-types/servicenow.asciidoc @@ -166,7 +166,7 @@ IMPORTANT: Deprecated connectors will continue to function with the rules they w To update a deprecated connector: -. Open the main menu and go to *Stack Management -> Rules and connectors -> Connectors*. +. Open the main menu and go to *{stack-manage-app} > {connectors-ui}*. . Select the deprecated connector to open the *Edit connector* flyout. . In the warning message, click *Update this connector*. . Complete the guided steps in the *Edit connector* flyout. @@ -181,7 +181,7 @@ To update a deprecated connector: {sn-itsm} connectors have the following configuration properties. -Name:: The name of the connector. The name is used to identify a connector in the **Stack Management** UI connector listing, and in the connector list when configuring an action. +Name:: The name of the connector. Is OAuth:: The type of authentication to use. URL:: {sn} instance URL. Username:: Username for HTTP Basic authentication. @@ -257,7 +257,7 @@ Secrets defines sensitive information for the connector type. [float] [[define-servicenow-ui]] -=== Define connector in Stack Management +=== Define connector in {stack-manage-app} Define {sn-itsm} connector properties. Choose whether to use OAuth for authentication. diff --git a/docs/management/connectors/action-types/slack.asciidoc b/docs/management/connectors/action-types/slack.asciidoc index 19abf9119b837..cd6860d6d3027 100644 --- a/docs/management/connectors/action-types/slack.asciidoc +++ b/docs/management/connectors/action-types/slack.asciidoc @@ -13,14 +13,14 @@ The Slack connector uses https://api.slack.com/incoming-webhooks[Slack Incoming Slack connectors have the following configuration properties. -Name:: The name of the connector. The name is used to identify a connector in the management UI connector listing, or in the connector list when configuring an action. +Name:: The name of the connector. Webhook URL:: The URL of the incoming webhook. See https://api.slack.com/messaging/webhooks#getting_started[Slack Incoming Webhooks] for instructions on generating this URL. If you are using the <> setting, make sure the hostname is added to the allowed hosts. [float] [[slack-connector-networking-configuration]] ==== Connector networking configuration -Use the <> to customize connector networking configurations, such as proxies, certificates, or TLS settings. You can set configurations that apply to all your connectors or use `xpack.actions.customHostSettings` to set per-host configurations. +Use the <> to customize connector networking configurations, such as proxies, certificates, or TLS settings. You can set configurations that apply to all your connectors or use `xpack.actions.customHostSettings` to set per-host configurations. [float] [[Preconfigured-slack-configuration]] @@ -41,7 +41,7 @@ Secrets defines sensitive information for the connector type. [float] [[define-slack-ui]] -==== Define connector in Stack Management +==== Define connector in {stack-manage-app} Define Slack connector properties. diff --git a/docs/management/connectors/action-types/swimlane.asciidoc b/docs/management/connectors/action-types/swimlane.asciidoc index 88447bb496a86..ff4f1bcb05fe0 100644 --- a/docs/management/connectors/action-types/swimlane.asciidoc +++ b/docs/management/connectors/action-types/swimlane.asciidoc @@ -13,7 +13,7 @@ The Swimlane connector uses the https://swimlane.com/knowledge-center/docs/devel Swimlane connectors have the following configuration properties. -Name:: The name of the connector. The name is used to identify a connector in the **Stack Management** UI connector listing, and in the connector list when configuring an action. +Name:: The name of the connector. URL:: Swimlane instance URL. Application ID:: Swimlane application ID. API token:: Swimlane API authentication token for HTTP Basic authentication. @@ -81,7 +81,7 @@ Secrets defines sensitive information for the connector type. [float] [[define-swimlane-ui]] -==== Define connector in Stack Management +==== Define connector in {stack-manage-app} Define Swimlane connector properties. diff --git a/docs/management/connectors/action-types/teams.asciidoc b/docs/management/connectors/action-types/teams.asciidoc index 32cfaaf801d70..f80e3e010f995 100644 --- a/docs/management/connectors/action-types/teams.asciidoc +++ b/docs/management/connectors/action-types/teams.asciidoc @@ -13,7 +13,7 @@ The Microsoft Teams connector uses https://docs.microsoft.com/en-us/microsofttea Microsoft Teams connectors have the following configuration properties. -Name:: The name of the connector. The name is used to identify a connector in the management UI connector listing, or in the connector list when configuring an action. +Name:: The name of the connector. Webhook URL:: The URL of the incoming webhook. See https://docs.microsoft.com/en-us/microsoftteams/platform/webhooks-and-connectors/how-to/add-incoming-webhook#add-an-incoming-webhook-to-a-teams-channel[Add Incoming Webhooks] for instructions on generating this URL. If you are using the <> setting, make sure the hostname is added to the allowed hosts. [float] @@ -41,7 +41,7 @@ Secrets defines sensitive information for the connector type. [float] [[define-teams-ui]] -==== Define connector in Stack Management +==== Define connector in {stack-manage-app} Define Teams connector properties. diff --git a/docs/management/connectors/action-types/webhook.asciidoc b/docs/management/connectors/action-types/webhook.asciidoc index 4c001920f716c..9f6d41c8cb85b 100644 --- a/docs/management/connectors/action-types/webhook.asciidoc +++ b/docs/management/connectors/action-types/webhook.asciidoc @@ -13,7 +13,7 @@ The Webhook connector uses https://github.com/axios/axios[axios] to send a POST Webhook connectors have the following configuration properties. -Name:: The name of the connector. The name is used to identify a connector in the management UI connector listing, or in the connector list when configuring an action. +Name:: The name of the connector. URL:: The request URL. If you are using the <> setting, make sure the hostname is added to the allowed hosts. Method:: HTTP request method, either `post`(default) or `put`. Headers:: A set of key-value pairs sent as headers with the request @@ -60,7 +60,7 @@ Secrets defines sensitive information for the connector type. [float] [[define-webhook-ui]] -==== Define connector in Stack Management +==== Define connector in {stack-manage-app} Define Webhook connector properties. diff --git a/docs/management/connectors/action-types/xmatters.asciidoc b/docs/management/connectors/action-types/xmatters.asciidoc index 8eae305d9f92d..e4ad978dc35dd 100644 --- a/docs/management/connectors/action-types/xmatters.asciidoc +++ b/docs/management/connectors/action-types/xmatters.asciidoc @@ -12,7 +12,7 @@ The xMatters connector uses the https://help.xmatters.com/integrations/#cshid=El xMatters connectors have the following configuration properties: -Name:: The name of the connector. The name is used to identify a connector in the management UI connector listing, or in the connector list when configuring an action. +Name:: The name of the connector. Authentication Type:: The type of authentication used in the request made to xMatters. URL:: The request URL for the Elastic Alerts trigger in xMatters. If you are using the <> setting, make sure the hostname is added to the allowed hosts. Username:: Username for HTTP Basic Authentication. @@ -22,7 +22,7 @@ Password:: Password for HTTP Basic Authentication. [[xmatters-connector-networking-configuration]] ==== Connector networking configuration -Use the <> to customize connector networking configurations, such as proxies, certificates, or TLS settings. You can set configurations that apply to all your connectors or use `xpack.actions.customHostSettings` to set per-host configurations. +Use the <> to customize connector networking configurations, such as proxies, certificates, or TLS settings. You can set configurations that apply to all your connectors or use `xpack.actions.customHostSettings` to set per-host configurations. [float] [[Preconfigured-xmatters-configuration]] @@ -70,7 +70,7 @@ Secrets defines sensitive information for the connector type: [float] [[define-xmatters-ui]] -==== Define connector in Stack Management +==== Define connector in {stack-manage-app} Define xMatters connector properties. Choose between basic and URL authentication for the requests: diff --git a/docs/management/connectors/images/connector-delete.png b/docs/management/connectors/images/connector-delete.png index 0791bb86b5e31..fb86f58e0e7dc 100644 Binary files a/docs/management/connectors/images/connector-delete.png and b/docs/management/connectors/images/connector-delete.png differ diff --git a/docs/management/connectors/images/connector-filter-by-type.png b/docs/management/connectors/images/connector-filter-by-type.png index b9383c189256d..fec610e48050e 100644 Binary files a/docs/management/connectors/images/connector-filter-by-type.png and b/docs/management/connectors/images/connector-filter-by-type.png differ diff --git a/docs/management/connectors/images/connector-listing.png b/docs/management/connectors/images/connector-listing.png index 52217b31331f2..aef38f84d4b54 100644 Binary files a/docs/management/connectors/images/connector-listing.png and b/docs/management/connectors/images/connector-listing.png differ diff --git a/docs/management/connectors/images/connectors-with-missing-secrets.png b/docs/management/connectors/images/connectors-with-missing-secrets.png index e20973b5640de..fbbdbcc5fd789 100644 Binary files a/docs/management/connectors/images/connectors-with-missing-secrets.png and b/docs/management/connectors/images/connectors-with-missing-secrets.png differ diff --git a/docs/management/connectors/images/pre-configured-connectors-managing.png b/docs/management/connectors/images/pre-configured-connectors-managing.png index b7fe88ccf2fa9..772bafab4c791 100644 Binary files a/docs/management/connectors/images/pre-configured-connectors-managing.png and b/docs/management/connectors/images/pre-configured-connectors-managing.png differ diff --git a/docs/management/connectors/index.asciidoc b/docs/management/connectors/index.asciidoc index fe65120e4b2b9..b443ffd967a6f 100644 --- a/docs/management/connectors/index.asciidoc +++ b/docs/management/connectors/index.asciidoc @@ -3,6 +3,7 @@ include::action-types/resilient.asciidoc[] include::action-types/index.asciidoc[] include::action-types/jira.asciidoc[] include::action-types/teams.asciidoc[] +include::action-types/opsgenie.asciidoc[] include::action-types/pagerduty.asciidoc[] include::action-types/server-log.asciidoc[] include::action-types/servicenow.asciidoc[leveloffset=+1] @@ -10,9 +11,8 @@ include::action-types/servicenow-sir.asciidoc[leveloffset=+1] include::action-types/servicenow-itom.asciidoc[leveloffset=+1] include::action-types/swimlane.asciidoc[] include::action-types/slack.asciidoc[] +include::action-types/tines.asciidoc[leveloffset=+1] include::action-types/webhook.asciidoc[] include::action-types/cases-webhook.asciidoc[leveloffset=+1] -include::action-types/opsgenie.asciidoc[] include::action-types/xmatters.asciidoc[] -include::action-types/tines.asciidoc[leveloffset=+1] include::pre-configured-connectors.asciidoc[] diff --git a/docs/management/connectors/pre-configured-connectors.asciidoc b/docs/management/connectors/pre-configured-connectors.asciidoc index 7498784ef389e..ad580d87e712b 100644 --- a/docs/management/connectors/pre-configured-connectors.asciidoc +++ b/docs/management/connectors/pre-configured-connectors.asciidoc @@ -66,9 +66,8 @@ Sensitive properties, such as passwords, can also be stored in the [[managing-pre-configured-connectors]] ==== View preconfigured connectors -When you open the main menu, click *Stack Management > Rules and Connectors*. -Preconfigured connectors appear on the -<>, regardless of which space you are +When you open the main menu, click *{stack-manage-app} > {connectors-ui}*. +Preconfigured connectors appear regardless of which space you are in. They are tagged as “preconfigured”, and you cannot delete them. [role="screenshot"] diff --git a/docs/maps/asset-tracking-tutorial.asciidoc b/docs/maps/asset-tracking-tutorial.asciidoc index 4e6efff35b3a3..c87cdfde9ee68 100644 --- a/docs/maps/asset-tracking-tutorial.asciidoc +++ b/docs/maps/asset-tracking-tutorial.asciidoc @@ -8,7 +8,7 @@ In this tutorial, you’ll look at live urban transit data from the city of Port You’ll learn to: -- Use {filebeat} to ingest the TriMet REST API into Elasticsearch. +- Use {agent} to ingest the TriMet REST API into {es}. - Create a map with layers that visualize asset tracks and last-known locations. - Use symbols and colors to style data values and show which direction an asset is heading. - Set up tracking containment alerts to monitor moving vehicles. @@ -23,11 +23,11 @@ image::maps/images/asset-tracking-tutorial/construction_zones.png[] - If you don’t already have {kib}, set it up with https://www.elastic.co/cloud/elasticsearch-service/signup?baymax=docs-body&elektra=docs[our free trial]. Download the deployment credentials. - Obtain an API key for https://developer.trimet.org/[TriMet web services] at https://developer.trimet.org/appid/registration/. -- https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-installation-configuration.html[Install Filebeat]. +- {fleet-guide}/fleet-overview.html[Fleet] is enabled on your cluster, and one or more {fleet-guide}/elastic-agent-installation.html[{agent}s] is enrolled. [float] === Part 1: Ingest the Portland bus data -To get to the fun of visualizing and alerting on Portland buses, you must first create a {filebeat} input to ingest the TriMet Portland bus data into {es}. +To get to the fun of visualizing and alerting on Portland buses, you must first add the *Custom API* integration to an Elastic Agent policy to get the TriMet Portland bus data into {es}. [float] ==== Step 1: Set up an Elasticsearch index @@ -270,47 +270,39 @@ PUT _ingest/pipeline/tri_met_tracks ---------------------------------- [float] -==== Step 2: Start {filebeat} +==== Step 2: Configure {agent} -. Replace the contents in your `filebeat.yml` file with the following: -+ -[source,yaml] ----------------------------------- -filebeat.inputs: -# Fetch trimet bus data every minute. -- type: httpjson - interval: 1m - request.url: "https://developer.trimet.org/ws/v2/vehicles?appID=" - response.split: - target: body.resultSet.vehicle - processors: - - decode_json_fields: - fields: ["message"] - target: "trimet" +. From the {kib} main menu, click *Fleet*, then the *Agent policies* tab. - pipeline: "tri_met_tracks" +. Click the name of the agent policy where you want to add the *Custom API* integration. The configuration changes you make only apply to the policy you select. +. Click the name of the *Custom API* integration, or add the integration if the agent policy does not yet have it. -# ---------------------------- Elastic Cloud Output ---------------------------- -cloud.id: -cloud.auth: +. From the *Edit Custom API integration* page, expand the *Change defaults* section. ----------------------------------- +. Set the *Dataset name* to *httpjson.trimet*. + +. Set the *Ingest Pipeline* to *tri_met_pipeline*. + +. Set the *Request URL* to *https://developer.trimet.org/ws/v2/vehicles?appID=*. -. Replace `` with your TriMet application id. -. Replace `` with your Elastic Cloud deployment credentials. -. Replace `` with your {ece}/ece-cloud-id.html[elastic cloud id]. -. Open a terminal window, and then navigate to the {filebeat} folder. -. In your `filebeat` folder, run {filebeat} with the edited config: +. Set *Response Split* to *target: body.resultSet.vehicle*. + +. At the bottom of the configuration, expand *Advanced options*. + +. Set *Processors* to: + -[source,bash] +[source,yaml] ---------------------------------- -/bin/filebeat -c filebeat.yml +- decode_json_fields: + fields: ["message"] + target: "trimet" ---------------------------------- -. Wait for {filebeat} to start shipping data to Elastic Cloud. {filebeat} should not produce any output to stdout. +. Leave everything else as defaults. + +. Click *Save integration* to deploy the configuration to any {agent} with the policy assigned. -. Leave the terminal window open and {filebeat} running throughout this tutorial. [float] ==== Step 3: Create a data view for the tri_met_tracks {es} index @@ -450,7 +442,7 @@ image::maps/images/asset-tracking-tutorial/construction_zones.png[] Create a new alert by defining a rule and a connector. The rule includes the conditions that will trigger the alert, and the connector defines what action takes place once the alert is triggered. In this case, each alert will log a message to the Kibana log. -. Open *Stack Management*, and then click *Rules and Connectors*. +. Open *{stack-manage-app}*, and then click *{rules-ui}*. . Click *Create rule*. . Name the rule *Bus Alerts*. . Set *Check every* to *5 seconds*. @@ -489,9 +481,6 @@ image::maps/images/asset-tracking-tutorial/tracking_containment_configuration.pn . Click *Save*. -The *Bus Alert connector* is added to the *Rules and Connectors* page. For more information on common connectors, refer to the <> and <> connectors. - -[role="screenshot"] -image::maps/images/asset-tracking-tutorial/rules_and_connectors.png[] +The *Bus Alert connector* is added to the *{connectors-ui}* page. For more information on common connectors, refer to the <> and <> connectors. Congratulations! You have completed the tutorial and have the recipe for tracking assets. You can now try replicating this same analysis with your own data. diff --git a/docs/maps/images/asset-tracking-tutorial/rules_and_connectors.png b/docs/maps/images/asset-tracking-tutorial/rules_and_connectors.png deleted file mode 100644 index 35d89dd42ab27..0000000000000 Binary files a/docs/maps/images/asset-tracking-tutorial/rules_and_connectors.png and /dev/null differ diff --git a/docs/setup/connect-to-elasticsearch.asciidoc b/docs/setup/connect-to-elasticsearch.asciidoc index 9e1ee62f093fe..f459150b0ee8d 100644 --- a/docs/setup/connect-to-elasticsearch.asciidoc +++ b/docs/setup/connect-to-elasticsearch.asciidoc @@ -13,7 +13,7 @@ All integrations are available in a single view, and image::images/add-integration.png[Integrations page from which you can choose integrations to start collecting and analyzing data] NOTE: When an integration is available for both -https://www.elastic.co/guide/en/fleet/master/beats-agent-comparison.html[Elastic Agent and Beats], +{fleet-guide}/beats-agent-comparison.html[Elastic Agent and Beats], the *Integrations* view defaults to the Elastic Agent integration, if it is generally available (GA). To show a diff --git a/docs/user/alerting/alerting-getting-started.asciidoc b/docs/user/alerting/alerting-getting-started.asciidoc index 708c4f0ddfeff..e169bcfc24869 100644 --- a/docs/user/alerting/alerting-getting-started.asciidoc +++ b/docs/user/alerting/alerting-getting-started.asciidoc @@ -3,32 +3,32 @@ -- -Alerting allows you to define *rules* to detect complex conditions within different {kib} apps and trigger actions when those conditions are met. Alerting is integrated with {observability-guide}/create-alerts.html[*Observability*], {security-guide}/prebuilt-rules.html[*Security*], <> and {ml-docs}/ml-configuring-alerts.html[*{ml-app}*], can be centrally managed from the <> UI, and provides a set of built-in <> and <> (known as stack rules) for you to use. +Alerting allows you to define _rules_ to detect complex conditions within different {kib} apps and trigger actions when those conditions are met. Alerting is integrated with {observability-guide}/create-alerts.html[*Observability*], {security-guide}/prebuilt-rules.html[*Security*], <> and {ml-docs}/ml-configuring-alerts.html[*{ml-app}*], can be centrally managed from the <> UI, and provides a set of built-in <> and <> (known as stack rules) for you to use. image::images/alerting-overview.png[{rules-ui} UI] [IMPORTANT] ============================================== -To make sure you can access alerting and actions, see the <> section. +To make sure you can access alerting and actions, see the <> section. ============================================== [float] == Concepts and terminology -Alerting works by running checks on a schedule to detect conditions defined by a *rule*. When a condition is met, the rule tracks it as an *alert* and responds by triggering one or more *actions*. -Actions typically involve interaction with {kib} services or third party integrations. *Connectors* allow actions to talk to these services and integrations. +Alerting works by running checks on a schedule to detect conditions defined by a rule. When a condition is met, the rule tracks it as an _alert_ and responds by triggering one or more _actions_. +Actions typically involve interaction with {kib} services or third party integrations. _Connectors_ allow actions to talk to these services and integrations. This section describes all of these elements and how they operate together. [float] === Rules -A rule specifies a background task that runs on the {kib} server to check for specific conditions. {kib} provides two types of rules: stack rules that are built into {kib} and the rules that are registered by {kib} apps. Refer to <> for more information. +A rule specifies a background task that runs on the {kib} server to check for specific conditions. {kib} provides two types of rules: stack rules that are built into {kib} and the rules that are registered by {kib} apps. For more information, refer to <>. A rule consists of three main parts: -* *Conditions*: what needs to be detected? -* *Schedule*: when/how often should detection checks run? -* *Actions*: what happens when a condition is detected? +* _Conditions_: what needs to be detected? +* _Schedule_: when/how often should detection checks run? +* _Actions_: what happens when a condition is detected? For example, when monitoring a set of servers, a rule might: @@ -46,10 +46,10 @@ The following sections describe each part of the rule in more detail. Under the hood, {kib} rules detect conditions by running a JavaScript function on the {kib} server, which gives it the flexibility to support a wide range of conditions, anything from the results of a simple {es} query to heavy computations involving data from multiple sources or external systems. -These conditions are packaged and exposed as *rule types*. A rule type hides the underlying details of the condition, and exposes a set of parameters +These conditions are packaged and exposed as _rule types_. A rule type hides the underlying details of the condition, and exposes a set of parameters to control the details of the conditions to detect. -For example, an <> lets you specify the index to query, an aggregation field, and a time window, but the details of the underlying {es} query are hidden. +For example, an <> lets you specify the index to query, an aggregation field, and a time window, but the details of the underlying {es} query are hidden. See <> for the rules provided by {kib} and how they express their conditions. @@ -72,8 +72,8 @@ Actions are invocations of connectors, which allow interaction with {kib} servic When defining actions in a rule, you specify: -* The *connector type*: the type of service or integration to use -* The connection for that type by referencing a <> +* The _connector type_: the type of service or integration to use +* The connection for that type by referencing a <> * A mapping of rule values to properties exposed for that type of action The result is a template: all the parameters needed to invoke a service are supplied except for specific values that are only known at the time the rule condition is detected. @@ -101,40 +101,43 @@ image::images/alerts.svg[{kib} tracks each detected condition as an alert and ta === Connectors Actions often involve connecting with services inside {kib} or integrating with third-party systems. -Rather than repeatedly entering connection information and credentials for each action, {kib} simplifies action setup using *connectors*. +Rather than repeatedly entering connection information and credentials for each action, {kib} simplifies action setup using connectors. -*Connectors* provide a central place to store connection information for services and integrations. For example if four rules send email notifications via the same SMTP service, they can all reference the same SMTP connector. When the SMTP settings change, you can update them once in the connector, instead of having to update four rules. +Connectors provide a central place to store connection information for services and integrations. For example if four rules send email notifications via the same SMTP service, they can all reference the same SMTP connector. When the SMTP settings change, you can update them once in the connector, instead of having to update four rules. image::images/rule-concepts-connectors.svg[Connectors provide a central place to store service connection settings] [float] == Putting it all together -A *rule* consists of conditions, *actions*, and a schedule. When conditions are met, *alerts* are created that render *actions* and invoke them. To make action setup and update easier, actions use *connectors* that centralize the information used to connect with {kib} services and third-party integrations. The following example ties these concepts together: +A rule consists of conditions, actions, and a schedule. When conditions are met, alerts are created that render actions and invoke them. To make action setup and update easier, actions use connectors that centralize the information used to connect with {kib} services and third-party integrations. The following example ties these concepts together: image::images/rule-concepts-summary.svg[Rules, connectors, alerts and actions work together to convert detection into action] -. Anytime a *rule*'s conditions are met, an *alert* is created. This example checks for servers with average CPU > 0.9. Three servers meet the condition, so three alerts are created. -. Alerts create *actions* as long as they are not muted or throttled. When actions are created, the template that was setup in the rule is filled with actual values. In this example, three actions are created, and the template string {{server}} is replaced with the server name for each alert. -. {kib} invokes the actions, sending them to a third party *integration* like an email service. -. If the third party integration has connection parameters or credentials, {kib} will fetch these from the *connector* referenced in the action. +. Anytime a rule's conditions are met, an alert is created. This example checks for servers with average CPU > 0.9. Three servers meet the condition, so three alerts are created. +. Alerts create actions as long as they are not muted or throttled. When actions are created, the template that was setup in the rule is filled with actual values. In this example, three actions are created, and the template string {{server}} is replaced with the server name for each alert. +. {kib} invokes the actions, sending them to a third party integration like an email service. +. If the third party integration has connection parameters or credentials, {kib} will fetch these from the connector referenced in the action. [float] [[alerting-concepts-differences]] == Differences from {watcher} -Alerting and <> are both used to detect conditions and can trigger actions in response, but they are completely independent alerting systems. +<> and the {kib} {alert-features} are both used to detect +conditions and can trigger actions in response, but they are completely +independent alerting systems. -This section will clarify some of the important differences in the function and intent of the two systems. +This section will clarify some of the important differences in the function and +intent of the two systems. -Functionally, Alerting differs in that: +Functionally, the {alert-features} differ in that: * Scheduled checks are run on {kib} instead of {es} -* {kib} <> through *rule types*, whereas watches provide low-level control over inputs, conditions, and transformations. -* {kib} rules track and persist the state of each detected condition through *alerts*. This makes it possible to mute and throttle individual alerts, and detect changes in state such as resolution. -* Actions are linked to *alerts* in Alerting. Actions are fired for each occurrence of a detected condition, rather than for the entire rule. +* {kib} <> through rule types, whereas watches provide low-level control over inputs, conditions, and transformations. +* {kib} rules track and persist the state of each detected condition through alerts. This makes it possible to mute and throttle individual alerts, and detect changes in state such as resolution. +* Actions are linked to alerts in Alerting. Actions are fired for each occurrence of a detected condition, rather than for the entire rule. -At a higher level, Alerting allows rich integrations across use cases like <>, <>, <>, and <>. -Prepackaged *rule types* simplify setup and hide the details of complex, domain-specific detections, while providing a consistent interface across {kib}. +At a higher level, the {alert-features} allow rich integrations across use cases like <>, <>, <>, and <>. +Prepackaged rule types simplify setup and hide the details of complex, domain-specific detections, while providing a consistent interface across {kib}. -- diff --git a/docs/user/alerting/alerting-troubleshooting.asciidoc b/docs/user/alerting/alerting-troubleshooting.asciidoc index 62604c465dafc..6f3246956be49 100644 --- a/docs/user/alerting/alerting-troubleshooting.asciidoc +++ b/docs/user/alerting/alerting-troubleshooting.asciidoc @@ -31,7 +31,8 @@ and Task Manager <>. [float] [[alerting-managment-detail]] === Using rules and connectors list for the current state and finding issues -*{rules-ui}* in *{stack-manage-app}* lists the rules and connectors available in the space you're currently in. When you click a rule name, you are navigated to the <> for the rule, where you can see currently active alerts. + +*{rules-ui}* in *{stack-manage-app}* lists the rules available in the space you're currently in. When you click a rule name, you are navigated to the <> for the rule, where you can see currently active alerts. The start date on this page indicates when a rule is triggered, and for what alerts. In addition, the duration of the condition indicates how long the instance is active. [role="screenshot"] image::images/rule-details-alerts-inactive.png[Alerting management details] @@ -64,7 +65,7 @@ curl -X POST -k \ -d '{"params":{"subject":"hallo","message":"hallo!","to":["me@example.com"]}}' -------------------------------------------------- -experimental[] In addition, there is a command-line client that uses legacy {rules-ui} APIs, which can be easier to use, but must be updated for the new APIs. +experimental[] In addition, there is a command-line client that uses legacy rule APIs, which can be easier to use, but must be updated for the new APIs. CLI tools to list, create, edit, and delete alerts (rules) and actions (connectors) are available in https://github.com/pmuellr/kbn-action[kbn-action], which you can install as follows: [source, txt] -------------------------------------------------- @@ -93,8 +94,8 @@ image::images/rules-management-health.png[Rule management page with the errors b [[task-manager-diagnostics]] === Task Manager diagnostics -Under the hood, {rules-ui} uses a plugin called Task Manager, which handles the scheduling, running, and error handling of the tasks. -This means that failure cases in {rules-ui} will, at times, be revealed by the Task Manager mechanism, rather than the Rules mechanism. +Under the hood, the {alert-features} use a plugin called Task Manager, which handles the scheduling, running, and error handling of the tasks. +This means that failure cases in {alert-features} will, at times, be revealed by the Task Manager mechanism, rather than the Rules mechanism. Task Manager provides a visible status which can be used to diagnose issues and is very well documented <> and <>. Task Manager uses the `.kibana_task_manager` index, an internal index that contains all the saved objects that represent the tasks in the system. @@ -191,7 +192,7 @@ In addition to the above methods, refer to the following approaches and common i * <> * <> -* <> +* <> [discrete] [[alerting-limitations]] diff --git a/docs/user/alerting/create-and-manage-rules.asciidoc b/docs/user/alerting/create-and-manage-rules.asciidoc index 9aeeeabe08c7e..15de5944b59fc 100644 --- a/docs/user/alerting/create-and-manage-rules.asciidoc +++ b/docs/user/alerting/create-and-manage-rules.asciidoc @@ -13,7 +13,7 @@ central place to: * Drill down to <> [role="screenshot"] -image:images/rules-and-connectors-ui.png[Example rule listing in {rules-ui}] +image:images/rules-ui.png[Example rule listing in {rules-ui}] For more information on alerting concepts and the types of rules and connectors available, go to <>. diff --git a/docs/user/alerting/images/alerting-overview.png b/docs/user/alerting/images/alerting-overview.png index b9368f737b550..af2b14b272bb5 100644 Binary files a/docs/user/alerting/images/alerting-overview.png and b/docs/user/alerting/images/alerting-overview.png differ diff --git a/docs/user/alerting/images/individual-enable-disable.png b/docs/user/alerting/images/individual-enable-disable.png index cca96a119da3b..14a06b7cbe657 100644 Binary files a/docs/user/alerting/images/individual-enable-disable.png and b/docs/user/alerting/images/individual-enable-disable.png differ diff --git a/docs/user/alerting/images/rules-and-connectors-ui.png b/docs/user/alerting/images/rules-and-connectors-ui.png deleted file mode 100644 index ad04bfbc470ee..0000000000000 Binary files a/docs/user/alerting/images/rules-and-connectors-ui.png and /dev/null differ diff --git a/docs/user/alerting/images/rules-ui.png b/docs/user/alerting/images/rules-ui.png new file mode 100644 index 0000000000000..cfe4670254ee6 Binary files /dev/null and b/docs/user/alerting/images/rules-ui.png differ diff --git a/docs/user/alerting/images/snooze-panel.png b/docs/user/alerting/images/snooze-panel.png index 79b64b914338d..55d3e372c4436 100644 Binary files a/docs/user/alerting/images/snooze-panel.png and b/docs/user/alerting/images/snooze-panel.png differ diff --git a/docs/user/alerting/rule-types/index-threshold.asciidoc b/docs/user/alerting/rule-types/index-threshold.asciidoc index 03f855a861022..b19dc83ae0351 100644 --- a/docs/user/alerting/rule-types/index-threshold.asciidoc +++ b/docs/user/alerting/rule-types/index-threshold.asciidoc @@ -48,9 +48,9 @@ image::user/alerting/images/rule-types-index-threshold-preview.png[Five clauses [float] ==== Example -In this example, you will use the {kib} <> to set up and tune the conditions on an index threshold rule. For this example, you want to detect when any of the top four sites serve more than 420,000 bytes over a 24 hour period. +In this example, you will use the {kib} <> to set up and tune the conditions on an index threshold rule. For this example, you want to detect when any of the top four sites serve more than 420,000 bytes over a 24 hour period. -. Open the main menu, then click **Stack Management > Rules and Connectors**. +. Open the main menu, then click *{stack-manage-app} > {rules-ui}*. . Create a new rule that is checked every four hours and triggers actions when the rule status changes. + diff --git a/docs/user/alerting/troubleshooting/testing-connectors.asciidoc b/docs/user/alerting/troubleshooting/testing-connectors.asciidoc index 4207a6af23239..3170ec27ccdb9 100644 --- a/docs/user/alerting/troubleshooting/testing-connectors.asciidoc +++ b/docs/user/alerting/troubleshooting/testing-connectors.asciidoc @@ -3,11 +3,11 @@ === Test connectors -In *{stack-manage-app} > {rules-ui}*, you can test a newly created connector by navigating to the Test tab of Connector Edit flyout or by clicking "Save & test" button on Create flyout: +In *{stack-manage-app} > {connectors-ui}*, you can test a newly created connector by navigating to the Test tab of Connector Edit flyout or by clicking "Save & test" button on Create flyout: [role="screenshot"] image::user/alerting/images/connector-save-and-test.png[Rule management page with the errors banner] -or by directly opening the proper connector Edit flyout: +or by directly opening the proper connector edit flyout: [role="screenshot"] image::user/alerting/images/email-connector-test.png[Rule management page with the errors banner] diff --git a/docs/user/images/rules-and-connectors.png b/docs/user/images/rules-and-connectors.png deleted file mode 100644 index 1a85eeb6c0bc2..0000000000000 Binary files a/docs/user/images/rules-and-connectors.png and /dev/null differ diff --git a/docs/user/introduction.asciidoc b/docs/user/introduction.asciidoc index fa5801e622706..f3281b9bed175 100644 --- a/docs/user/introduction.asciidoc +++ b/docs/user/introduction.asciidoc @@ -127,10 +127,7 @@ When the alert triggers, you can send a notification to a system that is part of email, Slack, PagerDuty, ServiceNow, and other third party integrations. A dedicated view for creating, searching, -and editing rules is in <>. - -[role="screenshot"] -image::images/rules-and-connectors.png[Rules and Connectors view] +and editing rules is in <>. [float] [[organize-and-secure]] diff --git a/docs/user/management.asciidoc b/docs/user/management.asciidoc index 02261d062e826..67ccadf696411 100644 --- a/docs/user/management.asciidoc +++ b/docs/user/management.asciidoc @@ -74,13 +74,15 @@ You can add and remove remote clusters, and check their connectivity. [cols="50, 50"] |=== -| <> -| Centrally <> across {kib}. Create and <> for triggering actions. +| <> +| Centrally <> across {kib}. | <> | Create and manage cases to investigate issues. +| <> +| Create and <> for triggering actions. + | <> | Monitor the generation of reports—PDF, PNG, and CSV—and download reports that you previously generated. A report can contain a dashboard, visualization, saved search, or Canvas workpad. diff --git a/docs/user/monitoring/kibana-alerts.asciidoc b/docs/user/monitoring/kibana-alerts.asciidoc index eedc19a189887..a291f50364099 100644 --- a/docs/user/monitoring/kibana-alerts.asciidoc +++ b/docs/user/monitoring/kibana-alerts.asciidoc @@ -23,7 +23,8 @@ The default action for all {stack-monitor-app} rules is to write to {kib} logs and display a notification in the UI. To review and modify existing *{stack-monitor-app}* rules, click *Enter setup mode* on the *Cluster overview* page. -Alternatively, to manage all rules, including create and delete functionality go to *Stack Management > Rules and Connectors*. +Alternatively, to manage all rules, including create and delete functionality +go to *{stack-manage-app} > {rules-ui}*. [discrete] [[kibana-alerts-cpu-threshold]] diff --git a/docs/user/production-considerations/task-manager-troubleshooting.asciidoc b/docs/user/production-considerations/task-manager-troubleshooting.asciidoc index de765ea542ecd..75f7973bc3af9 100644 --- a/docs/user/production-considerations/task-manager-troubleshooting.asciidoc +++ b/docs/user/production-considerations/task-manager-troubleshooting.asciidoc @@ -1002,7 +1002,7 @@ Task Manager has run out of Available Workers: server log [12:41:33.672] [info][plugins][taskManager][taskManager] [Task Ownership]: Task Manager has skipped Claiming Ownership of available tasks at it has ran out Available Workers. -------------------------------------------------- -This log message tells us that Task Manager is not managing to keep up with the sheer amount of work it has been tasked with completing. This might mean that Rules are not running at the frequency that was expected (instead of running every 5 minutes, it runs every 7-8 minutes, just as an example). +This log message tells us that Task Manager is not managing to keep up with the sheer amount of work it has been tasked with completing. This might mean that rules are not running at the frequency that was expected (instead of running every 5 minutes, it runs every 7-8 minutes, just as an example). By default Task Manager is limited to 10 tasks and this can be bumped up by setting a higher number in the kibana.yml file using the `xpack.task_manager.max_workers` configuration. It is important to keep in mind that a higher number of tasks running at any given time means more load on both Kibana and Elasticsearch, so only change this setting if increasing load in your environment makes sense. diff --git a/package.json b/package.json index 7ad2173ff9f15..b5e7099ce6459 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ ], "private": true, "version": "8.6.0", - "branch": "main", + "branch": "8.6", "types": "./kibana.d.ts", "tsdocMetadata": "./build/tsdoc-metadata.json", "build": { @@ -108,7 +108,7 @@ "@elastic/datemath": "5.0.3", "@elastic/elasticsearch": "npm:@elastic/elasticsearch-canary@8.4.0-canary.1", "@elastic/ems-client": "8.3.3", - "@elastic/eui": "67.1.8", + "@elastic/eui": "67.1.10", "@elastic/filesaver": "1.1.2", "@elastic/node-crypto": "1.2.1", "@elastic/numeral": "^2.5.1", @@ -1062,7 +1062,7 @@ "license-checker": "^25.0.1", "listr": "^0.14.1", "lmdb-store": "^1.6.11", - "loader-utils": "^2.0.3", + "loader-utils": "^2.0.4", "marge": "^1.0.1", "micromatch": "^4.0.5", "mini-css-extract-plugin": "1.1.0", diff --git a/packages/core/http/core-http-resources-server-internal/src/http_resources_service.test.ts b/packages/core/http/core-http-resources-server-internal/src/http_resources_service.test.ts index b642c505cad38..32245c6e9f61c 100644 --- a/packages/core/http/core-http-resources-server-internal/src/http_resources_service.test.ts +++ b/packages/core/http/core-http-resources-server-internal/src/http_resources_service.test.ts @@ -57,6 +57,7 @@ describe('HttpResources service', () => { describe(`${name} register`, () => { const routeConfig: RouteConfig = { path: '/', validate: false }; let register: HttpResources['register']; + beforeEach(async () => { register = await initializer(); }); @@ -81,32 +82,8 @@ describe('HttpResources service', () => { } ); }); - - it('can attach headers, except the CSP header', async () => { - register(routeConfig, async (ctx, req, res) => { - return res.renderCoreApp({ - headers: { - 'content-security-policy': "script-src 'unsafe-eval'", - 'x-kibana': '42', - }, - }); - }); - - const [[, routeHandler]] = router.get.mock.calls; - - const responseFactory = createHttpResourcesResponseFactory(); - await routeHandler(context, kibanaRequest, responseFactory); - - expect(responseFactory.ok).toHaveBeenCalledWith({ - body: '', - headers: { - 'x-kibana': '42', - 'content-security-policy': - "script-src 'self'; worker-src blob: 'self'; style-src 'unsafe-inline' 'self'", - }, - }); - }); }); + describe('renderAnonymousCoreApp', () => { it('formats successful response', async () => { register(routeConfig, async (ctx, req, res) => { @@ -127,32 +104,8 @@ describe('HttpResources service', () => { } ); }); - - it('can attach headers, except the CSP header', async () => { - register(routeConfig, async (ctx, req, res) => { - return res.renderAnonymousCoreApp({ - headers: { - 'content-security-policy': "script-src 'unsafe-eval'", - 'x-kibana': '42', - }, - }); - }); - - const [[, routeHandler]] = router.get.mock.calls; - - const responseFactory = createHttpResourcesResponseFactory(); - await routeHandler(context, kibanaRequest, responseFactory); - - expect(responseFactory.ok).toHaveBeenCalledWith({ - body: '', - headers: { - 'x-kibana': '42', - 'content-security-policy': - "script-src 'self'; worker-src blob: 'self'; style-src 'unsafe-inline' 'self'", - }, - }); - }); }); + describe('renderHtml', () => { it('formats successful response', async () => { const htmlBody = ''; @@ -167,20 +120,17 @@ describe('HttpResources service', () => { body: htmlBody, headers: { 'content-type': 'text/html', - 'content-security-policy': - "script-src 'self'; worker-src blob: 'self'; style-src 'unsafe-inline' 'self'", }, }); }); - it('can attach headers, except the CSP & "content-type" headers', async () => { + it('can attach headers, except the "content-type" header', async () => { const htmlBody = ''; register(routeConfig, async (ctx, req, res) => { return res.renderHtml({ body: htmlBody, headers: { 'content-type': 'text/html5', - 'content-security-policy': "script-src 'unsafe-eval'", 'x-kibana': '42', }, }); @@ -196,12 +146,11 @@ describe('HttpResources service', () => { headers: { 'content-type': 'text/html', 'x-kibana': '42', - 'content-security-policy': - "script-src 'self'; worker-src blob: 'self'; style-src 'unsafe-inline' 'self'", }, }); }); }); + describe('renderJs', () => { it('formats successful response', async () => { const jsBody = 'alert(1);'; @@ -216,20 +165,17 @@ describe('HttpResources service', () => { body: jsBody, headers: { 'content-type': 'text/javascript', - 'content-security-policy': - "script-src 'self'; worker-src blob: 'self'; style-src 'unsafe-inline' 'self'", }, }); }); - it('can attach headers, except the CSP & "content-type" headers', async () => { + it('can attach headers, except the "content-type" header', async () => { const jsBody = 'alert(1);'; register(routeConfig, async (ctx, req, res) => { return res.renderJs({ body: jsBody, headers: { 'content-type': 'text/html', - 'content-security-policy': "script-src 'unsafe-eval'", 'x-kibana': '42', }, }); @@ -245,12 +191,11 @@ describe('HttpResources service', () => { headers: { 'content-type': 'text/javascript', 'x-kibana': '42', - 'content-security-policy': - "script-src 'self'; worker-src blob: 'self'; style-src 'unsafe-inline' 'self'", }, }); }); }); + describe('renderCss', () => { it('formats successful response', async () => { const cssBody = `body {border: 1px solid red;}`; @@ -265,20 +210,17 @@ describe('HttpResources service', () => { body: cssBody, headers: { 'content-type': 'text/css', - 'content-security-policy': - "script-src 'self'; worker-src blob: 'self'; style-src 'unsafe-inline' 'self'", }, }); }); - it('can attach headers, except the CSP & "content-type" headers', async () => { + it('can attach headers, except the "content-type" header', async () => { const cssBody = `body {border: 1px solid red;}`; register(routeConfig, async (ctx, req, res) => { return res.renderCss({ body: cssBody, headers: { 'content-type': 'text/css5', - 'content-security-policy': "script-src 'unsafe-eval'", 'x-kibana': '42', }, }); @@ -294,8 +236,6 @@ describe('HttpResources service', () => { headers: { 'content-type': 'text/css', 'x-kibana': '42', - 'content-security-policy': - "script-src 'self'; worker-src blob: 'self'; style-src 'unsafe-inline' 'self'", }, }); }); diff --git a/packages/core/http/core-http-resources-server-internal/src/http_resources_service.ts b/packages/core/http/core-http-resources-server-internal/src/http_resources_service.ts index 22be209158b89..13bd334148ae5 100644 --- a/packages/core/http/core-http-resources-server-internal/src/http_resources_service.ts +++ b/packages/core/http/core-http-resources-server-internal/src/http_resources_service.ts @@ -101,7 +101,6 @@ export class HttpResourcesService implements CoreService { toolkit = createToolkit(); }); - it('adds the kbn-name header to the response', () => { - const config = createConfig({ name: 'my-server-name' }); + it('adds the kbn-name and Content-Security-Policy headers to the response', () => { + const config = createConfig({ + name: 'my-server-name', + csp: { strict: true, warnLegacyBrowsers: true, disableEmbedding: true, header: 'foo' }, + }); const handler = createCustomHeadersPreResponseHandler(config as HttpConfig); handler({} as any, {} as any, toolkit); expect(toolkit.next).toHaveBeenCalledTimes(1); - expect(toolkit.next).toHaveBeenCalledWith({ headers: { 'kbn-name': 'my-server-name' } }); + expect(toolkit.next).toHaveBeenCalledWith({ + headers: { + 'Content-Security-Policy': 'foo', + 'kbn-name': 'my-server-name', + }, + }); }); it('adds the security headers and custom headers defined in the configuration', () => { const config = createConfig({ name: 'my-server-name', + csp: { strict: true, warnLegacyBrowsers: true, disableEmbedding: true, header: 'foo' }, securityResponseHeaders: { headerA: 'value-A', headerB: 'value-B', // will be overridden by the custom response header below @@ -276,6 +285,7 @@ describe('customHeaders pre-response handler', () => { expect(toolkit.next).toHaveBeenCalledTimes(1); expect(toolkit.next).toHaveBeenCalledWith({ headers: { + 'Content-Security-Policy': 'foo', 'kbn-name': 'my-server-name', headerA: 'value-A', headerB: 'x', @@ -283,11 +293,13 @@ describe('customHeaders pre-response handler', () => { }); }); - it('preserve the kbn-name value from server.name if defined in custom headders ', () => { + it('do not allow overwrite of the kbn-name and Content-Security-Policy headers if defined in custom headders ', () => { const config = createConfig({ name: 'my-server-name', + csp: { strict: true, warnLegacyBrowsers: true, disableEmbedding: true, header: 'foo' }, customResponseHeaders: { 'kbn-name': 'custom-name', + 'Content-Security-Policy': 'custom-csp', headerA: 'value-A', headerB: 'value-B', }, @@ -300,6 +312,7 @@ describe('customHeaders pre-response handler', () => { expect(toolkit.next).toHaveBeenCalledWith({ headers: { 'kbn-name': 'my-server-name', + 'Content-Security-Policy': 'foo', headerA: 'value-A', headerB: 'value-B', }, diff --git a/packages/core/http/core-http-server-internal/src/lifecycle_handlers.ts b/packages/core/http/core-http-server-internal/src/lifecycle_handlers.ts index 11e034a56914b..3fe9c8ac727ff 100644 --- a/packages/core/http/core-http-server-internal/src/lifecycle_handlers.ts +++ b/packages/core/http/core-http-server-internal/src/lifecycle_handlers.ts @@ -61,12 +61,18 @@ export const createVersionCheckPostAuthHandler = (kibanaVersion: string): OnPost }; export const createCustomHeadersPreResponseHandler = (config: HttpConfig): OnPreResponseHandler => { - const { name: serverName, securityResponseHeaders, customResponseHeaders } = config; + const { + name: serverName, + securityResponseHeaders, + customResponseHeaders, + csp: { header: cspHeader }, + } = config; return (request, response, toolkit) => { const additionalHeaders = { ...securityResponseHeaders, ...customResponseHeaders, + 'Content-Security-Policy': cspHeader, [KIBANA_NAME_HEADER]: serverName, }; diff --git a/packages/core/http/core-http-server-mocks/src/test_utils.ts b/packages/core/http/core-http-server-mocks/src/test_utils.ts index bb260ae23c908..18e6a21ed2dba 100644 --- a/packages/core/http/core-http-server-mocks/src/test_utils.ts +++ b/packages/core/http/core-http-server-mocks/src/test_utils.ts @@ -26,6 +26,7 @@ const createConfigService = () => { configService.atPath.mockImplementation((path) => { if (path === 'server') { return new BehaviorSubject({ + name: 'kibana', hosts: ['localhost'], maxPayload: new ByteSizeValue(1024), autoListen: true, diff --git a/packages/core/overlays/core-overlays-browser-internal/src/modal/__snapshots__/modal_service.test.tsx.snap b/packages/core/overlays/core-overlays-browser-internal/src/modal/__snapshots__/modal_service.test.tsx.snap index ae55761e0cbd4..2b5f564dfb3ee 100644 --- a/packages/core/overlays/core-overlays-browser-internal/src/modal/__snapshots__/modal_service.test.tsx.snap +++ b/packages/core/overlays/core-overlays-browser-internal/src/modal/__snapshots__/modal_service.test.tsx.snap @@ -148,7 +148,7 @@ exports[`ModalService openConfirm() renders a mountpoint confirm message 2`] = `
))} diff --git a/x-pack/plugins/osquery/public/shared_components/attachments/lazy_external_reference_content.tsx b/x-pack/plugins/osquery/public/shared_components/attachments/lazy_external_reference_content.tsx index 94e4180f30676..b7ae3b5ac8a60 100644 --- a/x-pack/plugins/osquery/public/shared_components/attachments/lazy_external_reference_content.tsx +++ b/x-pack/plugins/osquery/public/shared_components/attachments/lazy_external_reference_content.tsx @@ -21,6 +21,7 @@ export interface IExternalReferenceMetaDataProps { queryId: string; }; } +const AttachmentContent = lazy(() => import('./external_references_content')); export const getLazyExternalContent = // eslint-disable-next-line react/display-name @@ -54,8 +55,6 @@ export const getLazyExternalContent = ); } - const AttachmentContent = lazy(() => import('./external_references_content')); - return ( diff --git a/x-pack/plugins/profiling/common/index.ts b/x-pack/plugins/profiling/common/index.ts index 01994865abafe..5c0e469585d53 100644 --- a/x-pack/plugins/profiling/common/index.ts +++ b/x-pack/plugins/profiling/common/index.ts @@ -27,6 +27,8 @@ export function getRoutePaths() { TopNThreads: `${BASE_ROUTE_PATH}/topn/threads`, TopNTraces: `${BASE_ROUTE_PATH}/topn/traces`, Flamechart: `${BASE_ROUTE_PATH}/flamechart`, + CacheExecutables: `${BASE_ROUTE_PATH}/cache/executables`, + CacheStackFrames: `${BASE_ROUTE_PATH}/cache/stackframes`, }; } diff --git a/x-pack/plugins/profiling/server/routes/cache.ts b/x-pack/plugins/profiling/server/routes/cache.ts new file mode 100644 index 0000000000000..21ba32667e55f --- /dev/null +++ b/x-pack/plugins/profiling/server/routes/cache.ts @@ -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 { RouteRegisterParameters } from '.'; +import { getRoutePaths } from '../../common'; +import { handleRouteHandlerError } from '../utils/handle_route_error_handler'; +import { clearExecutableCache, clearStackFrameCache } from './stacktrace'; + +export function registerCacheExecutablesRoute({ router, logger }: RouteRegisterParameters) { + const paths = getRoutePaths(); + router.delete( + { + path: paths.CacheExecutables, + validate: {}, + }, + async (context, request, response) => { + try { + logger.info(`clearing executable cache`); + const numDeleted = clearExecutableCache(); + logger.info(`removed ${numDeleted} executables from cache`); + + return response.ok({}); + } catch (error) { + return handleRouteHandlerError({ error, logger, response }); + } + } + ); +} + +export function registerCacheStackFramesRoute({ router, logger }: RouteRegisterParameters) { + const paths = getRoutePaths(); + router.delete( + { + path: paths.CacheStackFrames, + validate: {}, + }, + async (context, request, response) => { + try { + logger.info(`clearing stackframe cache`); + const numDeleted = clearStackFrameCache(); + logger.info(`removed ${numDeleted} stackframes from cache`); + + return response.ok({}); + } catch (error) { + return handleRouteHandlerError({ error, logger, response }); + } + } + ); +} diff --git a/x-pack/plugins/profiling/server/routes/index.ts b/x-pack/plugins/profiling/server/routes/index.ts index b6bd705ba0e07..a3692b213a0af 100644 --- a/x-pack/plugins/profiling/server/routes/index.ts +++ b/x-pack/plugins/profiling/server/routes/index.ts @@ -12,6 +12,8 @@ import { ProfilingRequestHandlerContext, } from '../types'; +import { registerCacheExecutablesRoute, registerCacheStackFramesRoute } from './cache'; + import { registerFlameChartSearchRoute } from './flamechart'; import { registerTopNFunctionsSearchRoute } from './functions'; @@ -33,6 +35,8 @@ export interface RouteRegisterParameters { } export function registerRoutes(params: RouteRegisterParameters) { + registerCacheExecutablesRoute(params); + registerCacheStackFramesRoute(params); registerFlameChartSearchRoute(params); registerTopNFunctionsSearchRoute(params); registerTraceEventsTopNContainersSearchRoute(params); diff --git a/x-pack/plugins/profiling/server/routes/stacktrace.ts b/x-pack/plugins/profiling/server/routes/stacktrace.ts index 1dc040c3d3f19..558c560f62192 100644 --- a/x-pack/plugins/profiling/server/routes/stacktrace.ts +++ b/x-pack/plugins/profiling/server/routes/stacktrace.ts @@ -278,6 +278,13 @@ const frameLRU = new LRUCache({ maxAge: CACHE_TTL_MILLISECONDS, }); +// clearStackFrameCache clears the entire cache and returns the number of deleted items +export function clearStackFrameCache(): number { + const numDeleted = frameLRU.length; + frameLRU.reset(); + return numDeleted; +} + export async function mgetStackFrames({ logger, client, @@ -350,6 +357,13 @@ const executableLRU = new LRUCache({ maxAge: CACHE_TTL_MILLISECONDS, }); +// clearExecutableCache clears the entire cache and returns the number of deleted items +export function clearExecutableCache(): number { + const numDeleted = executableLRU.length; + executableLRU.reset(); + return numDeleted; +} + export async function mgetExecutables({ logger, client, diff --git a/x-pack/plugins/reporting/public/share_context_menu/__snapshots__/screen_capture_panel_content.test.tsx.snap b/x-pack/plugins/reporting/public/share_context_menu/__snapshots__/screen_capture_panel_content.test.tsx.snap index 0e296c8ae0610..476db7189a75c 100644 --- a/x-pack/plugins/reporting/public/share_context_menu/__snapshots__/screen_capture_panel_content.test.tsx.snap +++ b/x-pack/plugins/reporting/public/share_context_menu/__snapshots__/screen_capture_panel_content.test.tsx.snap @@ -77,7 +77,7 @@ exports[`ScreenCapturePanelContent properly renders a view with "canvas" layout
"`; +exports[`ResetSessionPage renders as expected 1`] = `"ElasticMockedFonts
"`; diff --git a/x-pack/plugins/security_solution/common/constants.ts b/x-pack/plugins/security_solution/common/constants.ts index aec2bc40a4824..0981293a1607a 100644 --- a/x-pack/plugins/security_solution/common/constants.ts +++ b/x-pack/plugins/security_solution/common/constants.ts @@ -97,7 +97,6 @@ export enum SecurityPageName { endpoints = 'endpoints', eventFilters = 'event_filters', exceptions = 'exceptions', - sharedExceptionListDetails = 'shared-exception-list-details', exploreLanding = 'explore', hostIsolationExceptions = 'host_isolation_exceptions', hosts = 'hosts', @@ -150,6 +149,7 @@ export const ALERTS_PATH = '/alerts' as const; export const RULES_PATH = '/rules' as const; export const RULES_CREATE_PATH = `${RULES_PATH}/create` as const; export const EXCEPTIONS_PATH = '/exceptions' as const; +export const EXCEPTION_LIST_DETAIL_PATH = `${EXCEPTIONS_PATH}/details/:detailName` as const; export const HOSTS_PATH = '/hosts' as const; export const USERS_PATH = '/users' as const; export const KUBERNETES_PATH = '/kubernetes' as const; diff --git a/x-pack/plugins/security_solution/common/endpoint/service/authz/authz.test.ts b/x-pack/plugins/security_solution/common/endpoint/service/authz/authz.test.ts index 7ee477e3076c8..6e8c76c855d9d 100644 --- a/x-pack/plugins/security_solution/common/endpoint/service/authz/authz.test.ts +++ b/x-pack/plugins/security_solution/common/endpoint/service/authz/authz.test.ts @@ -126,6 +126,7 @@ describe('Endpoint Authz service', () => { ['canReadPolicyManagement', 'readPolicyManagement'], ['canWriteActionsLogManagement', 'writeActionsLogManagement'], ['canReadActionsLogManagement', 'readActionsLogManagement'], + ['canAccessEndpointActionsLogManagement', 'readActionsLogManagement'], ['canIsolateHost', 'writeHostIsolation'], ['canUnIsolateHost', 'writeHostIsolation'], ['canKillProcess', 'writeProcessOperations'], @@ -152,6 +153,10 @@ describe('Endpoint Authz service', () => { ['canReadPolicyManagement', ['writePolicyManagement', 'readPolicyManagement']], ['canWriteActionsLogManagement', ['writeActionsLogManagement']], ['canReadActionsLogManagement', ['writeActionsLogManagement', 'readActionsLogManagement']], + [ + 'canAccessEndpointActionsLogManagement', + ['writeActionsLogManagement', 'readActionsLogManagement'], + ], ['canIsolateHost', ['writeHostIsolation']], ['canUnIsolateHost', ['writeHostIsolation']], ['canKillProcess', ['writeProcessOperations']], @@ -204,6 +209,7 @@ describe('Endpoint Authz service', () => { canWriteSecuritySolution: false, canReadSecuritySolution: false, canAccessFleet: false, + canAccessEndpointActionsLogManagement: false, canAccessEndpointManagement: false, canCreateArtifactsByPolicy: false, canWriteEndpointList: false, diff --git a/x-pack/plugins/security_solution/common/endpoint/service/authz/authz.ts b/x-pack/plugins/security_solution/common/endpoint/service/authz/authz.ts index 0bf21e4734ba2..599bebd3be7c4 100644 --- a/x-pack/plugins/security_solution/common/endpoint/service/authz/authz.ts +++ b/x-pack/plugins/security_solution/common/endpoint/service/authz/authz.ts @@ -47,6 +47,8 @@ function hasPermission( * @param fleetAuthz * @param userRoles */ + +// eslint-disable-next-line complexity export const calculateEndpointAuthz = ( licenseService: LicenseService, fleetAuthz: FleetAuthz, @@ -182,6 +184,7 @@ export const calculateEndpointAuthz = ( canReadPolicyManagement, canWriteActionsLogManagement, canReadActionsLogManagement: canReadActionsLogManagement && isEnterpriseLicense, + canAccessEndpointActionsLogManagement: canReadActionsLogManagement && isPlatinumPlusLicense, // Response Actions canIsolateHost: canIsolateHost && isPlatinumPlusLicense, canUnIsolateHost: canIsolateHost, @@ -208,6 +211,7 @@ export const getEndpointAuthzInitialState = (): EndpointAuthz => { return { ...defaultEndpointPermissions(), canAccessFleet: false, + canAccessEndpointActionsLogManagement: false, canAccessEndpointManagement: false, canCreateArtifactsByPolicy: false, canWriteEndpointList: false, diff --git a/x-pack/plugins/security_solution/common/endpoint/types/authz.ts b/x-pack/plugins/security_solution/common/endpoint/types/authz.ts index 838edc695c540..ba1d20a9a2464 100644 --- a/x-pack/plugins/security_solution/common/endpoint/types/authz.ts +++ b/x-pack/plugins/security_solution/common/endpoint/types/authz.ts @@ -24,6 +24,8 @@ export interface EndpointAuthz extends EndpointPermissions { canAccessFleet: boolean; /** If user has permissions to access Endpoint management (includes check to ensure they also have access to fleet) */ canAccessEndpointManagement: boolean; + /** If user has permissions to access Actions Log management and also has a platinum license (used for endpoint details flyout) */ + canAccessEndpointActionsLogManagement: boolean; /** if user has permissions to create Artifacts by Policy */ canCreateArtifactsByPolicy: boolean; /** if user has write permissions to endpoint list */ diff --git a/x-pack/plugins/security_solution/cypress/data/detection_engine.ts b/x-pack/plugins/security_solution/cypress/data/detection_engine.ts new file mode 100644 index 0000000000000..cdd72af22b785 --- /dev/null +++ b/x-pack/plugins/security_solution/cypress/data/detection_engine.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 type { + RiskScore, + RuleInterval, + RuleIntervalFrom, + Severity, + Threat, + ThreatSubtechnique, + ThreatTechnique, +} from '@kbn/securitysolution-io-ts-alerting-types'; + +import type { + IndexPatternArray, + InvestigationGuide, + RuleDescription, + RuleFalsePositiveArray, + RuleQuery, + RuleName, + RuleReferenceArray, + RuleTagArray, +} from '../../common/detection_engine/rule_schema'; + +interface RuleFields { + defaultIndexPatterns: IndexPatternArray; + falsePositives: RuleFalsePositiveArray; + investigationGuide: InvestigationGuide; + referenceUrls: RuleReferenceArray; + riskScore: RiskScore; + ruleDescription: RuleDescription; + ruleInterval: RuleInterval; + ruleIntervalFrom: RuleIntervalFrom; + ruleQuery: RuleQuery; + ruleName: RuleName; + ruleTags: RuleTagArray; + ruleSeverity: Severity; + threat: Threat; + threatSubtechnique: ThreatSubtechnique; + threatTechnique: ThreatTechnique; +} + +export const ruleFields: RuleFields = { + defaultIndexPatterns: [ + 'apm-*-transaction*', + 'auditbeat-*', + 'endgame-*', + 'filebeat-*', + 'logs-*', + 'packetbeat-*', + 'traces-apm*', + 'winlogbeat-*', + '-*elastic-cloud-logs-*', + ], + falsePositives: ['False1', 'False2'], + investigationGuide: '# test markdown', + referenceUrls: ['http://example.com/', 'https://example.com/'], + riskScore: 17, + ruleDescription: 'The rule description', + ruleInterval: '5m', + ruleIntervalFrom: '50000h', + ruleQuery: 'host.name: *', + ruleName: 'Test Rule', + ruleTags: ['test', 'newRule'], + ruleSeverity: 'high', + threat: { + framework: 'MITRE ATT&CK', + tactic: { + name: 'Credential Access', + id: 'TA0006', + reference: 'https://attack.mitre.org/tactics/TA0006', + }, + }, + threatSubtechnique: { + name: '/etc/passwd and /etc/shadow', + id: 'T1003.008', + reference: 'https://attack.mitre.org/techniques/T1003/008', + }, + threatTechnique: { + id: 'T1003', + name: 'OS Credential Dumping', + reference: 'https://attack.mitre.org/techniques/T1003', + }, +}; diff --git a/x-pack/plugins/security_solution/cypress/e2e/detection_rules/custom_query_rule.cy.ts b/x-pack/plugins/security_solution/cypress/e2e/detection_rules/custom_query_rule.cy.ts index b81806e2ce65f..b5869987f4d58 100644 --- a/x-pack/plugins/security_solution/cypress/e2e/detection_rules/custom_query_rule.cy.ts +++ b/x-pack/plugins/security_solution/cypress/e2e/detection_rules/custom_query_rule.cy.ts @@ -5,8 +5,7 @@ * 2.0. */ -import { formatMitreAttackDescription } from '../../helpers/rules'; -import type { Mitre } from '../../objects/rule'; +import { ruleFields } from '../../data/detection_engine'; import { getNewRule, getExistingRule, @@ -14,7 +13,7 @@ import { getEditedRule, getNewOverrideRule, } from '../../objects/rule'; -import type { CompleteTimeline } from '../../objects/timeline'; +import { getTimeline } from '../../objects/timeline'; import { ALERT_GRID_CELL, NUMBER_OF_ALERTS } from '../../screens/alerts'; import { @@ -56,7 +55,6 @@ import { INDEX_PATTERNS_DETAILS, INVESTIGATION_NOTES_MARKDOWN, INVESTIGATION_NOTES_TOGGLE, - MITRE_ATTACK_DETAILS, REFERENCE_URLS_DETAILS, RISK_SCORE_DETAILS, RULE_NAME_HEADER, @@ -66,6 +64,9 @@ import { SEVERITY_DETAILS, TAGS_DETAILS, TIMELINE_TEMPLATE_DETAILS, + THREAT_TACTIC, + THREAT_TECHNIQUE, + THREAT_SUBTECHNIQUE, } from '../../screens/rule_details'; import { @@ -82,14 +83,26 @@ import { createTimeline } from '../../tasks/api_calls/timelines'; import { cleanKibana, deleteAlertsAndRules } from '../../tasks/common'; import { addEmailConnectorAndRuleAction } from '../../tasks/common/rule_actions'; import { + continueWithNextSection, createAndEnableRule, + expandAdvancedSettings, fillAboutRule, - fillAboutRuleAndContinue, - fillDefineCustomRuleAndContinue, - fillScheduleRuleAndContinue, + fillDescription, + fillFalsePositiveExamples, + fillFrom, + fillNote, + fillReferenceUrls, + fillRiskScore, + fillRuleName, + fillRuleTags, + fillSeverity, + fillThreat, + fillThreatSubtechnique, + fillThreatTechnique, goToAboutStepTab, goToActionsStepTab, goToScheduleStepTab, + importSavedQuery, waitForAlertsToPopulate, waitForTheRuleToBeExecuted, } from '../../tasks/create_new_rule'; @@ -105,98 +118,125 @@ describe('Custom query rules', () => { login(); }); describe('Custom detection rules creation', () => { - const expectedUrls = getNewRule().referenceUrls?.join(''); - const expectedFalsePositives = getNewRule().falsePositivesExamples?.join(''); - const expectedTags = getNewRule().tags?.join(''); - const mitreAttack = getNewRule().mitre as Mitre[]; - const expectedMitre = formatMitreAttackDescription(mitreAttack); const expectedNumberOfRules = 1; beforeEach(() => { - const timeline = getNewRule().timeline as CompleteTimeline; deleteAlertsAndRules(); - createTimeline(timeline).then((response) => { - cy.wrap({ - ...getNewRule(), - timeline: { - ...timeline, - id: response.body.data.persistTimeline.timeline.savedObjectId, - }, - }).as('rule'); - }); + createTimeline(getTimeline()) + .then((response) => { + return response.body.data.persistTimeline.timeline.savedObjectId; + }) + .as('timelineId'); }); it('Creates and enables a new rule', function () { visit(RULE_CREATION); - fillDefineCustomRuleAndContinue(this.rule); - fillAboutRuleAndContinue(this.rule); - fillScheduleRuleAndContinue(this.rule); + + cy.log('Filling define section'); + importSavedQuery(this.timelineId); + continueWithNextSection(); + + cy.log('Filling about section'); + fillRuleName(); + fillDescription(); + fillSeverity(); + fillRiskScore(); + fillRuleTags(); + expandAdvancedSettings(); + fillReferenceUrls(); + fillFalsePositiveExamples(); + fillThreat(); + fillThreatTechnique(); + fillThreatSubtechnique(); + fillNote(); + continueWithNextSection(); + + cy.log('Filling schedule section'); + fillFrom(); // expect define step to repopulate cy.get(DEFINE_EDIT_BUTTON).click(); - cy.get(CUSTOM_QUERY_INPUT).should('have.value', this.rule.customQuery); + cy.get(CUSTOM_QUERY_INPUT).should('have.value', ruleFields.ruleQuery); cy.get(DEFINE_CONTINUE_BUTTON).should('exist').click({ force: true }); cy.get(DEFINE_CONTINUE_BUTTON).should('not.exist'); // expect about step to populate cy.get(ABOUT_EDIT_BUTTON).click(); - cy.get(RULE_NAME_INPUT).invoke('val').should('eql', this.rule.name); + cy.get(RULE_NAME_INPUT).invoke('val').should('eql', ruleFields.ruleName); cy.get(ABOUT_CONTINUE_BTN).should('exist').click({ force: true }); cy.get(ABOUT_CONTINUE_BTN).should('not.exist'); cy.get(SCHEDULE_CONTINUE_BUTTON).click({ force: true }); createAndEnableRule(); + cy.log('Asserting we have a new rule created'); cy.get(CUSTOM_RULES_BTN).should('have.text', 'Custom rules (1)'); + cy.log('Asserting rule view in rules list'); cy.get(RULES_TABLE).find(RULES_ROW).should('have.length', expectedNumberOfRules); - cy.get(RULE_NAME).should('have.text', this.rule.name); - cy.get(RISK_SCORE).should('have.text', this.rule.riskScore); - cy.get(SEVERITY).should('have.text', this.rule.severity); + cy.get(RULE_NAME).should('have.text', ruleFields.ruleName); + cy.get(RISK_SCORE).should('have.text', ruleFields.riskScore); + cy.get(SEVERITY) + .invoke('text') + .then((text) => { + cy.wrap(text.toLowerCase()).should('equal', ruleFields.ruleSeverity); + }); cy.get(RULE_SWITCH).should('have.attr', 'aria-checked', 'true'); goToRuleDetails(); - cy.get(RULE_NAME_HEADER).should('contain', `${this.rule.name}`); - cy.get(ABOUT_RULE_DESCRIPTION).should('have.text', this.rule.description); + cy.log('Asserting rule details'); + cy.get(RULE_NAME_HEADER).should('contain', ruleFields.ruleName); + cy.get(ABOUT_RULE_DESCRIPTION).should('have.text', ruleFields.ruleDescription); cy.get(ABOUT_DETAILS).within(() => { - getDetails(SEVERITY_DETAILS).should('have.text', this.rule.severity); - getDetails(RISK_SCORE_DETAILS).should('have.text', this.rule.riskScore); + getDetails(SEVERITY_DETAILS) + .invoke('text') + .then((text) => { + cy.wrap(text.toLowerCase()).should('equal', ruleFields.ruleSeverity); + }); + getDetails(RISK_SCORE_DETAILS).should('have.text', ruleFields.riskScore); getDetails(REFERENCE_URLS_DETAILS).should((details) => { - expect(removeExternalLinkText(details.text())).equal(expectedUrls); - }); - getDetails(FALSE_POSITIVES_DETAILS).should('have.text', expectedFalsePositives); - getDetails(MITRE_ATTACK_DETAILS).should((mitre) => { - expect(removeExternalLinkText(mitre.text())).equal(expectedMitre); + expect(removeExternalLinkText(details.text())).equal(ruleFields.referenceUrls.join('')); }); - getDetails(TAGS_DETAILS).should('have.text', expectedTags); + getDetails(FALSE_POSITIVES_DETAILS).should('have.text', ruleFields.falsePositives.join('')); + getDetails(TAGS_DETAILS).should('have.text', ruleFields.ruleTags.join('')); }); + cy.get(THREAT_TACTIC).should( + 'contain', + `${ruleFields.threat.tactic.name} (${ruleFields.threat.tactic.id})` + ); + cy.get(THREAT_TECHNIQUE).should( + 'contain', + `${ruleFields.threatTechnique.name} (${ruleFields.threatTechnique.id})` + ); + cy.get(THREAT_SUBTECHNIQUE).should( + 'contain', + `${ruleFields.threatSubtechnique.name} (${ruleFields.threatSubtechnique.id})` + ); cy.get(INVESTIGATION_NOTES_TOGGLE).click({ force: true }); cy.get(ABOUT_INVESTIGATION_NOTES).should('have.text', INVESTIGATION_NOTES_MARKDOWN); cy.get(DEFINITION_DETAILS).within(() => { - getDetails(INDEX_PATTERNS_DETAILS).should('have.text', getIndexPatterns().join('')); - getDetails(CUSTOM_QUERY_DETAILS).should('have.text', this.rule.customQuery); + getDetails(INDEX_PATTERNS_DETAILS).should( + 'have.text', + ruleFields.defaultIndexPatterns.join('') + ); + getDetails(CUSTOM_QUERY_DETAILS).should('have.text', ruleFields.ruleQuery); getDetails(RULE_TYPE_DETAILS).should('have.text', 'Query'); getDetails(TIMELINE_TEMPLATE_DETAILS).should('have.text', 'None'); }); cy.get(SCHEDULE_DETAILS).within(() => { - getDetails(RUNS_EVERY_DETAILS).should( - 'have.text', - `${getNewRule().runsEvery?.interval}${getNewRule().runsEvery?.type}` - ); - getDetails(ADDITIONAL_LOOK_BACK_DETAILS).should( - 'have.text', - `${getNewRule().lookBack?.interval}${getNewRule().lookBack?.type}` - ); + getDetails(RUNS_EVERY_DETAILS).should('have.text', ruleFields.ruleInterval); + getDetails(ADDITIONAL_LOOK_BACK_DETAILS).should('have.text', ruleFields.ruleIntervalFrom); }); waitForTheRuleToBeExecuted(); waitForAlertsToPopulate(); + cy.log('Asserting that alerts have been generated after the creation'); cy.get(NUMBER_OF_ALERTS) .invoke('text') .should('match', /^[1-9].+$/); // Any number of alerts - cy.get(ALERT_GRID_CELL).contains(this.rule.name); + cy.get(ALERT_GRID_CELL).contains(ruleFields.ruleName); }); }); diff --git a/x-pack/plugins/security_solution/cypress/e2e/detection_rules/custom_query_rule_data_view.cy.ts b/x-pack/plugins/security_solution/cypress/e2e/detection_rules/custom_query_rule_data_view.cy.ts index 727c7257b6682..04e08d5de572a 100644 --- a/x-pack/plugins/security_solution/cypress/e2e/detection_rules/custom_query_rule_data_view.cy.ts +++ b/x-pack/plugins/security_solution/cypress/e2e/detection_rules/custom_query_rule_data_view.cy.ts @@ -20,6 +20,11 @@ import { RULE_SWITCH, SEVERITY, } from '../../screens/alerts_detection_rules'; +import { + ABOUT_CONTINUE_BTN, + RULE_DESCRIPTION_INPUT, + RULE_NAME_INPUT, +} from '../../screens/create_new_rule'; import { ADDITIONAL_LOOK_BACK_DETAILS, @@ -44,6 +49,7 @@ import { TAGS_DETAILS, TIMELINE_TEMPLATE_DETAILS, DATA_VIEW_DETAILS, + EDIT_RULE_SETTINGS_LINK, } from '../../screens/rule_details'; import { goToRuleDetails } from '../../tasks/alerts_detection_rules'; @@ -51,6 +57,7 @@ import { createTimeline } from '../../tasks/api_calls/timelines'; import { postDataView } from '../../tasks/common'; import { createAndEnableRule, + createRuleWithoutEnabling, fillAboutRuleAndContinue, fillDefineCustomRuleAndContinue, fillScheduleRuleAndContinue, @@ -158,5 +165,24 @@ describe('Custom query rules', () => { .should('match', /^[1-9].+$/); cy.get(ALERT_GRID_CELL).contains(this.rule.name); }); + it('Creates and edits a new rule with a data view', function () { + visit(RULE_CREATION); + fillDefineCustomRuleAndContinue(this.rule); + cy.get(RULE_NAME_INPUT).clear({ force: true }).type(this.rule.name, { force: true }); + cy.get(RULE_DESCRIPTION_INPUT) + .clear({ force: true }) + .type(this.rule.description, { force: true }); + + cy.get(ABOUT_CONTINUE_BTN).should('exist').click({ force: true }); + + fillScheduleRuleAndContinue(this.rule); + createRuleWithoutEnabling(); + + goToRuleDetails(); + + cy.get(EDIT_RULE_SETTINGS_LINK).click({ force: true }); + + cy.get(RULE_NAME_HEADER).should('contain', 'Edit rule settings'); + }); }); }); diff --git a/x-pack/plugins/security_solution/cypress/e2e/detection_rules/import_rules.cy.ts b/x-pack/plugins/security_solution/cypress/e2e/detection_rules/import_rules.cy.ts index 7ee3a7e40647f..7a9ac21ca003c 100644 --- a/x-pack/plugins/security_solution/cypress/e2e/detection_rules/import_rules.cy.ts +++ b/x-pack/plugins/security_solution/cypress/e2e/detection_rules/import_rules.cy.ts @@ -33,7 +33,7 @@ describe('Import rules', () => { cy.wrap(response?.statusCode).should('eql', 200); cy.get(TOASTER).should( 'have.text', - 'Successfully imported 1 ruleSuccessfully imported 2 exceptions.' + 'Successfully imported 1 ruleSuccessfully imported 1 exception.' ); cy.get(RULES_TABLE).then(($table) => { @@ -75,7 +75,7 @@ describe('Import rules', () => { cy.wrap(response?.statusCode).should('eql', 200); cy.get(TOASTER).should( 'have.text', - 'Successfully imported 1 ruleSuccessfully imported 2 exceptions.' + 'Successfully imported 1 ruleSuccessfully imported 1 exception.' ); }); }); diff --git a/x-pack/plugins/security_solution/cypress/e2e/guided_onboarding/tour.cy.ts b/x-pack/plugins/security_solution/cypress/e2e/guided_onboarding/tour.cy.ts index 0339445bc8240..e1dc50d8d28c8 100644 --- a/x-pack/plugins/security_solution/cypress/e2e/guided_onboarding/tour.cy.ts +++ b/x-pack/plugins/security_solution/cypress/e2e/guided_onboarding/tour.cy.ts @@ -5,58 +5,100 @@ * 2.0. */ -import { login, visit } from '../../tasks/login'; -import { completeTour, goToNextStep, skipTour } from '../../tasks/guided_onboarding'; -import { OVERVIEW_URL } from '../../urls/navigation'; +import { navigateFromHeaderTo } from '../../tasks/security_header'; +import { ALERTS, TIMELINES } from '../../screens/security_header'; +import { closeAlertFlyout, expandFirstAlert } from '../../tasks/alerts'; import { - WELCOME_STEP, - MANAGE_STEP, - ALERTS_STEP, - CASES_STEP, - DATA_STEP, -} from '../../screens/guided_onboarding'; - -before(() => { - login(); -}); + assertTourStepExist, + assertTourStepNotExist, + closeCreateCaseFlyout, + completeTourWithActions, + completeTourWithNextButton, + addToCase, + finishTour, + goToStep, + startTour, +} from '../../tasks/guided_onboarding'; +import { cleanKibana } from '../../tasks/common'; +import { createCustomRuleEnabled } from '../../tasks/api_calls/rules'; +import { getNewRule } from '../../objects/rule'; +import { ALERTS_URL, DASHBOARDS_URL } from '../../urls/navigation'; +import { waitForAlertsToPopulate } from '../../tasks/create_new_rule'; +import { login, visit } from '../../tasks/login'; +import { quitGlobalTour, startAlertsCasesTour } from '../../tasks/api_calls/tour'; +import { AlertsCasesTourSteps } from '../../../public/common/components/guided_onboarding_tour/tour_config'; -// need to redo these tests for new implementation -describe.skip('Guided onboarding tour', () => { - describe('Tour is enabled', () => { - beforeEach(() => { - visit(OVERVIEW_URL); - }); +describe('Guided onboarding tour', () => { + before(() => { + cleanKibana(); + login(); + createCustomRuleEnabled({ ...getNewRule(), customQuery: 'user.name:*' }); + }); + beforeEach(() => { + startAlertsCasesTour(); + visit(ALERTS_URL); + waitForAlertsToPopulate(); + }); + after(() => { + quitGlobalTour(); + }); + it('Completes the tour with next button clicks', () => { + startTour(); + completeTourWithNextButton(); + finishTour(); + cy.url().should('include', DASHBOARDS_URL); + }); - it('can be completed', () => { - // Step 1: Overview - cy.get(WELCOME_STEP).should('be.visible'); - goToNextStep(WELCOME_STEP); + it('Completes the tour with action clicks', () => { + startTour(); + completeTourWithActions(); + finishTour(); + cy.url().should('include', DASHBOARDS_URL); + }); - // Step 2: Manage - cy.get(MANAGE_STEP).should('be.visible'); - goToNextStep(MANAGE_STEP); + // unhappy paths + it('Resets the tour to step 1 when we navigate away', () => { + startTour(); + goToStep(AlertsCasesTourSteps.expandEvent); + assertTourStepExist(AlertsCasesTourSteps.expandEvent); + assertTourStepNotExist(AlertsCasesTourSteps.pointToAlertName); + navigateFromHeaderTo(TIMELINES); + navigateFromHeaderTo(ALERTS); + assertTourStepNotExist(AlertsCasesTourSteps.expandEvent); + assertTourStepExist(AlertsCasesTourSteps.pointToAlertName); + }); - // Step 3: Alerts - cy.get(ALERTS_STEP).should('be.visible'); - goToNextStep(ALERTS_STEP); + describe('persists tour steps in flyout on flyout toggle', () => { + const stepsInAlertsFlyout = [ + AlertsCasesTourSteps.reviewAlertDetailsFlyout, + AlertsCasesTourSteps.addAlertToCase, + AlertsCasesTourSteps.viewCase, + ]; - // Step 4: Cases - cy.get(CASES_STEP).should('be.visible'); - goToNextStep(CASES_STEP); + const stepsInCasesFlyout = [AlertsCasesTourSteps.createCase, AlertsCasesTourSteps.submitCase]; - // Step 5: Add data - cy.get(DATA_STEP).should('be.visible'); - completeTour(); + stepsInAlertsFlyout.forEach((step) => { + it(`step: ${step}, resets to ${step}`, () => { + startTour(); + goToStep(step); + assertTourStepExist(step); + closeAlertFlyout(); + assertTourStepNotExist(step); + expandFirstAlert(); + assertTourStepExist(step); + }); }); - it('can be skipped', () => { - cy.get(WELCOME_STEP).should('be.visible'); - - skipTour(); - // step 1 is not displayed - cy.get(WELCOME_STEP).should('not.exist'); - // step 2 is not displayed - cy.get(MANAGE_STEP).should('not.exist'); + stepsInCasesFlyout.forEach((step) => { + it(`step: ${step}, resets to ${AlertsCasesTourSteps.createCase}`, () => { + startTour(); + goToStep(step); + assertTourStepExist(step); + closeCreateCaseFlyout(); + assertTourStepNotExist(step); + addToCase(); + assertTourStepExist(AlertsCasesTourSteps.createCase); + }); }); }); }); diff --git a/x-pack/plugins/security_solution/cypress/screens/create_new_rule.ts b/x-pack/plugins/security_solution/cypress/screens/create_new_rule.ts index 0d14673f4cf2b..1d59f2ce83ce1 100644 --- a/x-pack/plugins/security_solution/cypress/screens/create_new_rule.ts +++ b/x-pack/plugins/security_solution/cypress/screens/create_new_rule.ts @@ -32,6 +32,8 @@ export const COMBO_BOX_CLEAR_BTN = '[data-test-subj="comboBoxClearButton"]'; export const CREATE_AND_ENABLE_BTN = '[data-test-subj="create-enable"]'; +export const CREATE_WITHOUT_ENABLING_BTN = '[data-test-subj="create-enabled-false"]'; + export const CUSTOM_QUERY_INPUT = '[data-test-subj="queryInput"]'; export const CUSTOM_QUERY_BAR = '[data-test-subj="detectionEngineStepDefineRuleQueryBar"]'; @@ -72,6 +74,8 @@ export const DATA_VIEW_COMBO_BOX = export const DATA_VIEW_OPTION = '[data-test-subj="rule-index-toggle-dataView"]'; +export const CONTINUE_BUTTON = '[data-test-subj$=-continue]'; + export const DEFINE_CONTINUE_BUTTON = '[data-test-subj="define-continue"]'; export const DEFINE_EDIT_BUTTON = '[data-test-subj="edit-define-rule"]'; diff --git a/x-pack/plugins/security_solution/cypress/screens/guided_onboarding.ts b/x-pack/plugins/security_solution/cypress/screens/guided_onboarding.ts index 6b3f4bc20ac03..f11c18817e1ba 100644 --- a/x-pack/plugins/security_solution/cypress/screens/guided_onboarding.ts +++ b/x-pack/plugins/security_solution/cypress/screens/guided_onboarding.ts @@ -5,12 +5,13 @@ * 2.0. */ -export const WELCOME_STEP = '[data-test-subj="welcomeStep"]'; -export const MANAGE_STEP = '[data-test-subj="manageStep"]'; -export const ALERTS_STEP = '[data-test-subj="alertsStep"]'; -export const CASES_STEP = '[data-test-subj="casesStep"]'; -export const DATA_STEP = '[data-test-subj="dataStep"]'; +export const ALERTS_STEP_GUIDE_BUTTON = '[data-test-subj="onboarding--stepButton--siem--step3"]'; +export const COMPLETE_SIEM_GUIDE_BUTTON = + '[data-test-subj="onboarding--completeGuideButton--siem"]'; export const NEXT_STEP_BUTTON = '[data-test-subj="onboarding--securityTourNextStepButton"]'; -export const END_TOUR_BUTTON = '[data-test-subj="onboarding--securityTourEndButton"]'; -export const SKIP_TOUR_BUTTON = '[data-test-subj="onboarding--securityTourSkipButton"]'; +export const COMPLETION_POPOVER = '[data-test-subj="manualCompletionPopover"]'; + +export const GLOBAL_TOUR_BUTTON = `[data-test-subj="guideButton"]`; + +export const CLOSE_CREATE_CASE_FLYOUT = `[data-test-subj="create-case-flyout"] [data-test-subj="euiFlyoutCloseButton"]`; diff --git a/x-pack/plugins/security_solution/cypress/screens/rule_details.ts b/x-pack/plugins/security_solution/cypress/screens/rule_details.ts index 606ee4ae7a043..05e99f2e97c3b 100644 --- a/x-pack/plugins/security_solution/cypress/screens/rule_details.ts +++ b/x-pack/plugins/security_solution/cypress/screens/rule_details.ts @@ -125,3 +125,9 @@ export const DEFINE_RULE_PANEL_PROGRESS = '[data-test-subj="defineRule"] [data-test-subj="stepPanelProgress"]'; export const EDIT_RULE_SETTINGS_LINK = '[data-test-subj="editRuleSettingsLink"]'; + +export const THREAT_TACTIC = '[data-test-subj="threatTacticLink"]'; + +export const THREAT_TECHNIQUE = '[data-test-subj="threatTechniqueLink"]'; + +export const THREAT_SUBTECHNIQUE = '[data-test-subj="threatSubtechniqueLink"]'; diff --git a/x-pack/plugins/security_solution/cypress/tasks/api_calls/tour.ts b/x-pack/plugins/security_solution/cypress/tasks/api_calls/tour.ts new file mode 100644 index 0000000000000..5eac1af18745f --- /dev/null +++ b/x-pack/plugins/security_solution/cypress/tasks/api_calls/tour.ts @@ -0,0 +1,42 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +const alertsGuideActiveState = { + isActive: true, + status: 'in_progress', + steps: [ + { id: 'add_data', status: 'complete' }, + { id: 'rules', status: 'complete' }, + { id: 'alertsCases', status: 'active' }, + ], + guideId: 'security', +}; + +export const startAlertsCasesTour = () => + cy.request({ + method: 'PUT', + url: 'api/guided_onboarding/state', + headers: { 'kbn-xsrf': 'cypress-creds' }, + body: { + status: 'in_progress', + guide: alertsGuideActiveState, + }, + }); + +export const quitGlobalTour = () => + cy.request({ + method: 'PUT', + url: 'api/guided_onboarding/state', + headers: { 'kbn-xsrf': 'cypress-creds' }, + body: { + status: 'quit', + guide: { + ...alertsGuideActiveState, + isActive: false, + }, + }, + }); diff --git a/x-pack/plugins/security_solution/cypress/tasks/create_new_rule.ts b/x-pack/plugins/security_solution/cypress/tasks/create_new_rule.ts index 7fdc101f8b14c..fe3809f1d3cc7 100644 --- a/x-pack/plugins/security_solution/cypress/tasks/create_new_rule.ts +++ b/x-pack/plugins/security_solution/cypress/tasks/create_new_rule.ts @@ -5,6 +5,12 @@ * 2.0. */ +import type { + RuleIntervalFrom, + Threat, + ThreatSubtechnique, + ThreatTechnique, +} from '@kbn/securitysolution-io-ts-alerting-types'; import type { CustomRule, MachineLearningRule, @@ -97,6 +103,8 @@ import { NEW_TERMS_HISTORY_TIME_TYPE, NEW_TERMS_INPUT_AREA, ACTIONS_THROTTLE_INPUT, + CONTINUE_BUTTON, + CREATE_WITHOUT_ENABLING_BTN, } from '../screens/create_new_rule'; import { INDEX_SELECTOR, @@ -109,6 +117,7 @@ import { SERVER_SIDE_EVENT_COUNT } from '../screens/timeline'; import { TIMELINE } from '../screens/timelines'; import { refreshPage } from './security_header'; import { EUI_FILTER_SELECT_ITEM, COMBO_BOX_INPUT } from '../screens/common/controls'; +import { ruleFields } from '../data/detection_engine'; export const createAndEnableRule = () => { cy.get(CREATE_AND_ENABLE_BTN).click({ force: true }); @@ -117,6 +126,13 @@ export const createAndEnableRule = () => { cy.get(BACK_TO_ALL_RULES_LINK).should('not.exist'); }; +export const createRuleWithoutEnabling = () => { + cy.get(CREATE_WITHOUT_ENABLING_BTN).click({ force: true }); + cy.get(CREATE_WITHOUT_ENABLING_BTN).should('not.exist'); + cy.get(BACK_TO_ALL_RULES_LINK).click({ force: true }); + cy.get(BACK_TO_ALL_RULES_LINK).should('not.exist'); +}; + export const fillAboutRule = ( rule: CustomRule | MachineLearningRule | ThresholdRule | ThreatIndicatorRule ) => { @@ -149,11 +165,16 @@ export const fillAboutRule = ( } }; -const fillNote = (note: string) => { +export const expandAdvancedSettings = () => { + cy.get(ADVANCED_SETTINGS_BTN).click({ force: true }); +}; + +export const fillNote = (note: string = ruleFields.investigationGuide) => { cy.get(INVESTIGATION_NOTES_TEXTAREA).clear({ force: true }).type(note, { force: true }); + return note; }; -const fillMitre = (mitreAttacks: Mitre[]) => { +export const fillMitre = (mitreAttacks: Mitre[]) => { let techniqueIndex = 0; let subtechniqueInputIndex = 0; mitreAttacks.forEach((mitre, tacticIndex) => { @@ -178,9 +199,32 @@ const fillMitre = (mitreAttacks: Mitre[]) => { cy.get(MITRE_ATTACK_ADD_TACTIC_BUTTON).click({ force: true }); }); + return mitreAttacks; +}; + +export const fillThreat = (threat: Threat = ruleFields.threat) => { + cy.get(MITRE_ATTACK_TACTIC_DROPDOWN).first().click({ force: true }); + cy.contains(MITRE_TACTIC, threat.tactic.name).click(); + return threat; +}; + +export const fillThreatTechnique = (technique: ThreatTechnique = ruleFields.threatTechnique) => { + cy.get(MITRE_ATTACK_ADD_TECHNIQUE_BUTTON).first().click({ force: true }); + cy.get(MITRE_ATTACK_TECHNIQUE_DROPDOWN).first().click({ force: true }); + cy.contains(MITRE_TACTIC, technique.name).click(); + return technique; +}; + +export const fillThreatSubtechnique = ( + subtechnique: ThreatSubtechnique = ruleFields.threatSubtechnique +) => { + cy.get(MITRE_ATTACK_ADD_SUBTECHNIQUE_BUTTON).first().click({ force: true }); + cy.get(MITRE_ATTACK_SUBTECHNIQUE_DROPDOWN).first().click({ force: true }); + cy.contains(MITRE_TACTIC, subtechnique.name).click(); + return subtechnique; }; -const fillFalsePositiveExamples = (falsePositives: string[]) => { +export const fillFalsePositiveExamples = (falsePositives: string[] = ruleFields.falsePositives) => { falsePositives.forEach((falsePositive, index) => { cy.get(FALSE_POSITIVES_INPUT) .eq(index) @@ -188,28 +232,49 @@ const fillFalsePositiveExamples = (falsePositives: string[]) => { .type(falsePositive, { force: true }); cy.get(ADD_FALSE_POSITIVE_BTN).click({ force: true }); }); + return falsePositives; +}; + +export const importSavedQuery = (timelineId: string) => { + cy.get(IMPORT_QUERY_FROM_SAVED_TIMELINE_LINK).click(); + cy.get(TIMELINE(timelineId)).click(); + cy.get(CUSTOM_QUERY_INPUT).should('not.be.empty'); }; -const fillSeverity = (severity: string) => { +export const fillRuleName = (ruleName: string = ruleFields.ruleName) => { + cy.get(RULE_NAME_INPUT).clear({ force: true }).type(ruleName, { force: true }); + return ruleName; +}; + +export const fillDescription = (description: string = ruleFields.ruleDescription) => { + cy.get(RULE_DESCRIPTION_INPUT).clear({ force: true }).type(description, { force: true }); + return description; +}; + +export const fillSeverity = (severity: string = ruleFields.ruleSeverity) => { cy.get(SEVERITY_DROPDOWN).click({ force: true }); cy.get(`#${severity.toLowerCase()}`).click(); + return severity; }; -const fillRiskScore = (riskScore: string) => { +export const fillRiskScore = (riskScore: string = ruleFields.riskScore.toString()) => { cy.get(DEFAULT_RISK_SCORE_INPUT).type(`{selectall}${riskScore}`, { force: true }); + return riskScore; }; -const fillRuleTags = (tags: string[]) => { +export const fillRuleTags = (tags: string[] = ruleFields.ruleTags) => { tags.forEach((tag) => { cy.get(TAGS_INPUT).type(`${tag}{enter}`, { force: true }); }); + return tags; }; -const fillReferenceUrls = (referenceUrls: string[]) => { +export const fillReferenceUrls = (referenceUrls: string[] = ruleFields.referenceUrls) => { referenceUrls.forEach((url, index) => { cy.get(REFERENCE_URLS_INPUT).eq(index).clear({ force: true }).type(url, { force: true }); cy.get(ADD_REFERENCE_URL_BTN).click({ force: true }); }); + return referenceUrls; }; export const fillAboutRuleAndContinue = ( @@ -286,6 +351,10 @@ const fillCustomQuery = (rule: CustomRule | OverrideRule) => { } }; +export const continueWithNextSection = () => { + cy.get(CONTINUE_BUTTON).should('exist').click(); +}; + export const fillDefineCustomRuleAndContinue = (rule: CustomRule | OverrideRule) => { if (rule.dataSource.type === 'dataView') { cy.get(DATA_VIEW_OPTION).click(); @@ -308,6 +377,13 @@ export const fillScheduleRuleAndContinue = (rule: CustomRule | MachineLearningRu cy.get(SCHEDULE_CONTINUE_BUTTON).click({ force: true }); }; +export const fillFrom = (from: RuleIntervalFrom = ruleFields.ruleIntervalFrom) => { + const value = from.slice(0, from.length - 1); + const type = from.slice(from.length - 1); + cy.get(LOOK_BACK_INTERVAL).type('{selectAll}').type(value); + cy.get(LOOK_BACK_TIME_TYPE).select(type); +}; + export const fillRuleAction = (rule: CustomRule) => { if (rule.actions) { cy.get(ACTIONS_THROTTLE_INPUT).select(rule.actions.throttle); @@ -614,3 +690,20 @@ export const checkLoadQueryDynamically = () => { export const uncheckLoadQueryDynamically = () => { cy.get(LOAD_QUERY_DYNAMICALLY_CHECKBOX).click({ force: true }).should('not.be.checked'); }; + +export const defineSection = { importSavedQuery }; +export const aboutSection = { + fillRuleName, + fillDescription, + fillSeverity, + fillRiskScore, + fillRuleTags, + expandAdvancedSettings, + fillReferenceUrls, + fillFalsePositiveExamples, + fillThreat, + fillThreatTechnique, + fillThreatSubtechnique, + fillNote, +}; +export const scheduleSection = { fillFrom }; diff --git a/x-pack/plugins/security_solution/cypress/tasks/guided_onboarding.ts b/x-pack/plugins/security_solution/cypress/tasks/guided_onboarding.ts index 2e5c54a396b24..fe3170b31e951 100644 --- a/x-pack/plugins/security_solution/cypress/tasks/guided_onboarding.ts +++ b/x-pack/plugins/security_solution/cypress/tasks/guided_onboarding.ts @@ -5,21 +5,75 @@ * 2.0. */ +import { ATTACH_TO_NEW_CASE_BUTTON, TAKE_ACTION_BTN } from '../screens/alerts'; +import { createCase } from './create_new_case'; import { NEXT_STEP_BUTTON, - END_TOUR_BUTTON, - DATA_STEP, - SKIP_TOUR_BUTTON, + GLOBAL_TOUR_BUTTON, + ALERTS_STEP_GUIDE_BUTTON, + COMPLETION_POPOVER, + COMPLETE_SIEM_GUIDE_BUTTON, + CLOSE_CREATE_CASE_FLYOUT, } from '../screens/guided_onboarding'; +import { expandFirstAlert } from './alerts'; -export const goToNextStep = (currentStep: string) => { - cy.get(`${currentStep} ${NEXT_STEP_BUTTON}`).click(); +export const goToNextStep = (currentStep: number) => { + cy.get( + `[data-test-subj="tourStepAnchor-alertsCases-${currentStep}"] ${NEXT_STEP_BUTTON}` + ).click(); }; -export const completeTour = () => { - cy.get(`${DATA_STEP} ${END_TOUR_BUTTON}`).click(); +export const startTour = () => { + cy.get(GLOBAL_TOUR_BUTTON).click(); + cy.get(ALERTS_STEP_GUIDE_BUTTON).click(); }; -export const skipTour = () => { - cy.get(SKIP_TOUR_BUTTON).click(); +export const finishTour = () => { + cy.get(COMPLETION_POPOVER).should('exist'); + cy.get(GLOBAL_TOUR_BUTTON).click(); + cy.get(ALERTS_STEP_GUIDE_BUTTON).click(); + cy.get(COMPLETE_SIEM_GUIDE_BUTTON).click(); }; + +export const completeTourWithNextButton = () => { + for (let i = 1; i < 6; i++) { + goToNextStep(i); + } + createCase(); + goToNextStep(7); +}; + +export const addToCase = () => { + cy.get(TAKE_ACTION_BTN).click(); + cy.get(ATTACH_TO_NEW_CASE_BUTTON).click(); +}; + +export const completeTourWithActions = () => { + goToNextStep(1); + expandFirstAlert(); + goToNextStep(3); + addToCase(); + goToNextStep(5); + createCase(); + goToNextStep(7); +}; + +export const goToStep = (step: number) => { + for (let i = 1; i < 6; i++) { + if (i === step) { + break; + } + goToNextStep(i); + } + if (step === 7) { + createCase(); + } +}; + +export const assertTourStepExist = (step: number) => + cy.get(`[data-test-subj="tourStepAnchor-alertsCases-${step}"]`).should('exist'); + +export const assertTourStepNotExist = (step: number) => + cy.get(`[data-test-subj="tourStepAnchor-alertsCases-${step}"]`).should('not.exist'); + +export const closeCreateCaseFlyout = () => cy.get(CLOSE_CREATE_CASE_FLYOUT).click(); diff --git a/x-pack/plugins/security_solution/public/app/deep_links/index.ts b/x-pack/plugins/security_solution/public/app/deep_links/index.ts index 8848f7bddc3d9..170e06742dcb0 100644 --- a/x-pack/plugins/security_solution/public/app/deep_links/index.ts +++ b/x-pack/plugins/security_solution/public/app/deep_links/index.ts @@ -234,15 +234,6 @@ export const securitySolutionsDeepLinks: SecuritySolutionDeepLink[] = [ defaultMessage: 'Exception lists', }), ], - deepLinks: [ - { - id: SecurityPageName.sharedExceptionListDetails, - title: 'List Details', - path: '/exceptions/shared/:exceptionListId', - navLinkStatus: AppNavLinkStatus.hidden, - searchable: false, - }, - ], }, ], }, diff --git a/x-pack/plugins/security_solution/public/common/components/charts/barchart.tsx b/x-pack/plugins/security_solution/public/common/components/charts/barchart.tsx index d486bbbac6aa9..59c99694e9228 100644 --- a/x-pack/plugins/security_solution/public/common/components/charts/barchart.tsx +++ b/x-pack/plugins/security_solution/public/common/components/charts/barchart.tsx @@ -30,7 +30,7 @@ import { WrappedByAutoSizer, useTheme, Wrapper, - ChartWrapper, + BarChartWrapper, } from './common'; import { DraggableLegend } from './draggable_legend'; import type { LegendItem } from './draggable_legend_item'; @@ -209,7 +209,7 @@ export const BarChartComponent: React.FC = ({ {isValidSeriesExist && barChart && ( - + = ({ - + )} {!isValidSeriesExist && ( diff --git a/x-pack/plugins/security_solution/public/common/components/charts/common.tsx b/x-pack/plugins/security_solution/public/common/components/charts/common.tsx index 0cdfebdb47d57..0e4a68b5912f9 100644 --- a/x-pack/plugins/security_solution/public/common/components/charts/common.tsx +++ b/x-pack/plugins/security_solution/public/common/components/charts/common.tsx @@ -154,3 +154,8 @@ export const Wrapper = styled.div` export const ChartWrapper = styled(EuiFlexGroup)` z-index: 0; `; + +export const BarChartWrapper = styled(EuiFlexGroup)` + z-index: 0; + padding-right: 20px; +`; diff --git a/x-pack/plugins/security_solution/public/common/components/guided_onboarding_tour/tour_step.tsx b/x-pack/plugins/security_solution/public/common/components/guided_onboarding_tour/tour_step.tsx index 6a27518ee10a5..c81752f89871f 100644 --- a/x-pack/plugins/security_solution/public/common/components/guided_onboarding_tour/tour_step.tsx +++ b/x-pack/plugins/security_solution/public/common/components/guided_onboarding_tour/tour_step.tsx @@ -99,7 +99,7 @@ export const SecurityTourStep = ({ children, onClick, step, tourId }: SecurityTo ...rest, content: ( <> - +

{content}

{imageConfig && ( diff --git a/x-pack/plugins/security_solution/public/common/components/import_data_modal/__snapshots__/index.test.tsx.snap b/x-pack/plugins/security_solution/public/common/components/import_data_modal/__snapshots__/index.test.tsx.snap index f1325280b3afb..a87a35e608883 100644 --- a/x-pack/plugins/security_solution/public/common/components/import_data_modal/__snapshots__/index.test.tsx.snap +++ b/x-pack/plugins/security_solution/public/common/components/import_data_modal/__snapshots__/index.test.tsx.snap @@ -130,7 +130,7 @@ Object {