From 671b854a85731fbd24df6ff599e057a8e60bf723 Mon Sep 17 00:00:00 2001 From: Jon Date: Wed, 10 Jan 2024 12:01:16 -0600 Subject: [PATCH 1/6] [ci/flaky_test_runner] Cancel on failing build (#174314) This cancels the build if there's a test failure on a flaky test run. We can assume the suite is still flaky if there are failures. Co-authored-by: Brad White --- .buildkite/pipelines/flaky_tests/pipeline.ts | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/.buildkite/pipelines/flaky_tests/pipeline.ts b/.buildkite/pipelines/flaky_tests/pipeline.ts index f07d016af8deaf..34f6e412978615 100644 --- a/.buildkite/pipelines/flaky_tests/pipeline.ts +++ b/.buildkite/pipelines/flaky_tests/pipeline.ts @@ -143,11 +143,9 @@ for (const testSuite of testSuites) { }, depends_on: 'build', timeout_in_minutes: 150, + cancel_on_build_failing: true, retry: { - automatic: [ - { exit_status: '-1', limit: 3 }, - // { exit_status: '*', limit: 1 }, - ], + automatic: [{ exit_status: '-1', limit: 3 }], }, }); continue; @@ -173,6 +171,10 @@ for (const testSuite of testSuites) { concurrency, concurrency_group: process.env.UUID, concurrency_method: 'eager', + cancel_on_build_failing: true, + retry: { + automatic: [{ exit_status: '-1', limit: 3 }], + }, env: { // disable split of test cases between parallel jobs when running them in flaky test runner // by setting chunks vars to value 1, which means all test will run in one job From 947f25ffa1df07b971ba62a7d122635d66b6e736 Mon Sep 17 00:00:00 2001 From: amyjtechwriter <61687663+amyjtechwriter@users.noreply.github.com> Date: Wed, 10 Jan 2024 18:10:37 +0000 Subject: [PATCH 2/6] [DOCS] Adds 8.12.0 release notes (#174429) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds the 8.12.0 release notes --------- Co-authored-by: István Zoltán Szabó Co-authored-by: Jeramy Soucy Co-authored-by: Matthias Wilhelm Co-authored-by: Stratoula Kalafateli --- docs/CHANGELOG.asciidoc | 260 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 260 insertions(+) diff --git a/docs/CHANGELOG.asciidoc b/docs/CHANGELOG.asciidoc index f7fc138caf4eba..7391002139d2e8 100644 --- a/docs/CHANGELOG.asciidoc +++ b/docs/CHANGELOG.asciidoc @@ -10,6 +10,7 @@ Review important information about the {kib} 8.x releases. +* <> * <> * <> * <> @@ -57,6 +58,264 @@ Review important information about the {kib} 8.x releases. * <> -- +[[release-notes-8.12.0]] +== {kib} 8.12.0 + +For information about the {kib} 8.12.0 release, review the following information. + +[float] +[[breaking-changes-8.12.0]] +=== Breaking changes + +Breaking changes can prevent your application from optimal operation and performance. +Before you upgrade to 8.12.0, review the breaking changes, then mitigate the impact to your application. + +[discrete] +[[breaking-172224]] +.New SLO architecture +[%collapsible] +==== +*Details* + +We introduce a breaking change in the SLO features that will break any SLOs created before 8.12. These SLOs have to be manually reset through an API until we provide a UI for it. The data aggregated over time (rollup) is still available in the sli v2 index, but won't be used for summary calculation when reset. + +The previous summary transforms summarizing every SLOs won't be used anymore and can be stopped and deleted: + +* slo-summary-occurrences-7d-rolling +* slo-summary-occurrences-30d-rolling +* slo-summary-occurrences-90d-rolling +* slo-summary-occurrences-monthly-aligned +* slo-summary-occurrences-weekly-aligned +* slo-summary-timeslices-7d-rolling +* slo-summary-timeslices-30d-rolling +* slo-summary-timeslices-90d-rolling +* slo-summary-timeslices-monthly-aligned +* slo-summary-timeslices-weekly-aligned + +Be aware that when installing a new SLO (or after resetting an SLO), we install two transforms (one for the rollup data and one that summarize the rollup data). Do not delete the new `slo-summary-{slo_id}-{slo_revision}` transforms. For more information, refer to ({kibana-pull}172224[#172224]). +==== + +[discrete] +[[breaking-170635]] +.A new sub-feature privilege to control user access to the cases settings +[%collapsible] +==== +*Details* + +Roles with at least a sub-feature privilege configured will not have access to the cases setting like they had previously. All roles without a sub-feature privilege configured will not be affected. For more information, refer to ({kibana-pull}170635[#170635]). +==== + +[float] +[[features-8.12.0]] +=== Features +{kib} 8.12.0 adds the following new and notable features. + +Alerting:: +* The case list filter bar is now customizable, filters are removable and custom fields can be used as filters ({kibana-pull}172276[#172276]). +APM:: +* Adds viewInApp URL to the custom threshold rule type ({kibana-pull}171985[#171985]). +* Adds back the mobile crashes & errors tab ({kibana-pull}165892[#165892]). +Elastic Security:: +For the Elastic Security 8.12.0 release information, refer to {security-guide}/release-notes.html[_Elastic Security Solution Release Notes_]. +Elastic Search:: +* Display E5 multilingual callout ({kibana-pull}171887[#171887]). +* Replace model selection dropdown with list ({kibana-pull}171436[#171436]). +Fleet:: +* Adds support for preconfigured output secrets (Scrypt edition) ({kibana-pull}172041[#172041]). +* Adds UI components to create and edit output secrets ({kibana-pull}169429[#169429]). +* Adds support for remote ES output ({kibana-pull}169252[#169252]). +* Adds the ability to specify secrets in outputs ({kibana-pull}169221[#169221]). +* Adds an integrations configs tab to display input templates ({kibana-pull}168827[#168827]). +* Adds a {kib} task to publish Agent metrics ({kibana-pull}168435[#168435]). +Lens & Visualizations:: +* Adds the ability to edit charts made by {esql} queries in Dashboard ({kibana-pull}169911[#169911]). +Machine Learning:: +* Adds E5 model configurations ({kibana-pull}172053[#172053]). +* Adds the ability to create a categorization anomaly detection job from pattern analysis ({kibana-pull}170567[#170567]). +* Adds and displays alerts data in the Anomaly Explorer ({kibana-pull}167998[#167998]). +Observability:: +* Adds logic to update flyout highlights ({kibana-pull}172193[#172193]). +* Adds logic to display highlights in the flyout ({kibana-pull}170650[#170650]). +* Changes the Custom threshold title to Beta ({kibana-pull}172360[#172360]). +Security:: +* Disables the connector parameters field ({kibana-pull}173610[#173610]). +* Adds a risk engine missing privileges callout ({kibana-pull}171250[#171250]). +* Asset criticality privileges API ({kibana-pull}172441[#172441]). +Uptime:: +* Global params Public APIs ({kibana-pull}169669[#169669]). +* Private location public API's ({kibana-pull}169376[#169376]). +* Settings public API ({kibana-pull}163400[#163400]). + +For more information about the features introduced in 8.12.0, refer to <>. + +[[enhancements-and-bug-fixes-v8.12.0]] +=== Enhancements and bug fixes + +For detailed information about the 8.12.0 release, review the enhancements and bug fixes. + +[float] +[[enhancement-v8.12.0]] +=== Enhancements +Alerting:: +* Auto close ServiceNow incidents when alerts are resolved ({kibana-pull}171760[#171760]). +* PagerDuty connector now supports the links and `custom_details` attributes ({kibana-pull}171748[#171748]). +* Adds a mute and unmute action component in the alerts table row actions ({kibana-pull}170651[#170651]). +* Extends the PagerDuty connector API to support the `links` and `custom_details` attributes provided by the Event API ({kibana-pull}170459[#170459]). +* Adds toggle for alert as data fields in alert templating ({kibana-pull}170162[#170162]). +APM:: +* Perform functions and LLM interactions on the server ({kibana-pull}172590[#172590]). +* Adds viewInApp URL to the custom threshold rule type ({kibana-pull}171985[#171985]). +* Adds the KQL bar to embeddables ({kibana-pull}171016[#171016]). +* Enables the average mobile app launch time panel ({kibana-pull}170773[#170773]). +* Enables the mobile most launches panel ({kibana-pull}168925[#168925]). +* Improves the Differential Top N functions grid view ({kibana-pull}170008[#170008]). +Cases:: +* Users can copy to the clipboard the hashes of files uploaded to cases ({kibana-pull}172450[#172450]). +* Allow users to configure which columns are displayed in the cases list including custom fields ({kibana-pull}170950[#170950]). +* Adds a new sub-feature privilege to control user access to the cases settings ({kibana-pull}170635[#170635]). +Dashboard:: +* Adds Links to the Visualization library ({kibana-pull}170810[#170810]). +Discover:: +* Adds a field tokens column in the grid header ({kibana-pull}167179[#167179]). +* Enables the addition of columns from the document viewer when using ES|QL ({kibana-pull}171083[#171083]). +* Adds field search via wildcards in the document viewer ({kibana-pull}168616[#168616]). +* Improves search for field names by handling spaces like wildcards ({kibana-pull}168381[#168381]). +* Updates mapping conflict popover with types list ({kibana-pull}169855[#169855]). +* On search source error, show 'view details' action that opens request in inspector ({kibana-pull}170790[#170790]). +* Adds an Unsaved changes label when in an unsaved state of saved search ({kibana-pull}169548[#169548]). +* Allows changing the current sample size and saving it with a saved search ({kibana-pull}157269[#157269]). +* Adds new sparse vector and dense vector icons ({kibana-pull}169493[#169493]). +* Adds `sparse_vector` field support ({kibana-pull}168186[#168186]). +Elastic Security:: +For the Elastic Security 8.12.0 release information, refer to {security-guide}/release-notes.html[_Elastic Security Solution Release Notes_]. +Elastic Search:: +* Split details panel from model selection list ({kibana-pull}173434[#173434]). +Fleet:: +* Adds support for Elasticsearch output performance presets ({kibana-pull}172359[#172359]). +* Adds a new `keep_monitoring_alive` flag to agent policies ({kibana-pull}168865[#168865]). +* Adds support for additional types for dynamic mappings ({kibana-pull}168842[#168842]). +* Implements Elastic Agent upgrade states UI ({kibana-pull}167539[#167539]). +* Use default component templates from Elasticsearch ({kibana-pull}163731[#163731]). +Lens & Visualizations:: +* Moves the tagcloud visualization in *Lens* out of experimental status ({kibana-pull}168824[#168824]). +* Allows coloring an entire metric panel when applying a maximum value to the metric visualization in **Lens** ({kibana-pull}172531[#172531]). +* Adds truncation for data view pickers and field lists with many characters ({kibana-pull}172296[#172296]). +* Allows searching in the {esql} inline documentation description ({kibana-pull}171916[#171916]). +* Allows setting non-numeric metrics for metric visualizations in *Lens* ({kibana-pull}169258[#169258]). +Machine Learning:: +* Removes the beta badge from ML alerting rules ({kibana-pull}173545[#173545]). +* Removes the technical preview badge from AIOps log rate analysis ({kibana-pull}172722[#172722]). +* Adds anomaly description as an alert message for the anomaly detection rule type ({kibana-pull}172473[#172473]). +* Adds a sampled percentage of documents, and cardinality, for text fields for the Data Visualizer Field statistics tab and addresses an issue with a missing bucket in the document count chart ({kibana-pull}172378[#172378]). +* Adds option to display an overlay chart on the data drift expanded row ({kibana-pull}172239[#172239]). +* AIOps: Shows top N results when no documents are in baseline or deviation in log rate analysis({kibana-pull}171924[#171924]). +* AIOps: Adds support to restore baseline and deviation from URL state on page refresh for log rate analysis ({kibana-pull}171398[#171398]). +* Validates and limits threading parameters for starting a model deployment ({kibana-pull}171921[#171921]). +* Trained models: Adds a missing job node to models map view when original job has been deleted ({kibana-pull}171590[#171590]). +* Trained models list: Disables the View training data action if data frame analytics job no longer exists ({kibana-pull}171061[#171061]). +* Adds a trained model flyout with available models to download for in the Trained Models UI ({kibana-pull}171024[#171024]). +* Allows temporary data views in the anomaly detection jobs wizards ({kibana-pull}170112[#170112]). +* Assigns downloaded ELSER models to the `*` space ({kibana-pull}169939[#169939]). +* Adds pattern analysis to the anomaly action menu ({kibana-pull}169400[#169400]). +* Adds test pipeline action for data frame analysis trained models in models list ({kibana-pull}168400[#168400]). +Management:: +* Adds a search bar to the Clusters and shards tab ({kibana-pull}171806[#171806]). +* Aligns data view and destination index creation workflows in Transforms and Data Frame Analytics wizards ({kibana-pull}171202[#171202]). +* The index lifecycle summary on the Index lifecycle page is now displayed in a separate tab ({kibana-pull}170726[#170726]). +* Adds the ability to view mappings conflicts in data views on the data view management page ({kibana-pull}169381[#169381]). +* Implements index overview cards ({kibana-pull}168153[#168153]). +Observability:: +* Reset UI for updating outdated SLOs ({kibana-pull}172883[#172883]). +* Adds timeslice metric indicator for SLOs ({kibana-pull}168539[#168539]). +* Adds logic to update flyout highlights ({kibana-pull}172193[#172193]). +* Sets budget consumed mode as the default mode for burn rate rule configuration ({kibana-pull}171433[#171433]). +* Allow users to define burn rate windows using budget consumed ({kibana-pull}170996[#170996]). +* Makes rules created in Discover visible in Observability ({kibana-pull}171364[#171364]). +* Adds support for document count to custom metric indicator ({kibana-pull}170913[#170913]). +* Improves displaying inline frames ({kibana-pull}169212[#169212]). +* Adds summary insight to the Differential flamegraph ({kibana-pull}168978[#168978]). +* Include `search-*` when recalling documents ({kibana-pull}173710[#173710]). +Platform:: +* Limits `elasticsearch.maxSockets` to 800 by default ({kibana-pull}151911[#151911]). +Presentation:: +* Adds popover message in the control title ({kibana-pull}172094[#172094]). +* Displays incomplete results warning in layer legend ({kibana-pull}171144[#171144]). +* Updates incomplete data messaging ({kibana-pull}169578[#169578]). +Reporting:: +* Makes searches used for CSV export inspectable ({kibana-pull}171248[#171248]). +* Adds `max_concurrent_shards` setting to schema for the point in time CSV report generation ({kibana-pull}170344[#170344]). +Security:: +* The default value of the `elasticsearch.requestHeadersWhitelist` configuration option has been expanded to include the `es-client-authentication` HTTP header, in addition to `authorization` ({kibana-pull}172444[#172444]). +* Adds risk engine missing privileges callout ({kibana-pull}171250[#171250]). +* Implements Asset Criticality Create, Read & Delete APIs ({kibana-pull}172073[#172073]). + +[float] +[[fixes-v8.12.0]] +=== Bug Fixes +Alerting:: +* Fixes the alert details page search bar not considering Query configurations in the {kib} advanced settings ({kibana-pull}172498[#172498]). +* Fixes adding evaluation threshold to alert payload for ES query rule ({kibana-pull}171571[#171571]). +* Hides the Logs tab in Rules page to unauthorized users ({kibana-pull}171417[#171417]). +* Fixes hyperlinks in Slack messages being broken when there is "_" or "*" in the URL ({kibana-pull}170067[#170067]). +APM:: +* Removes usage of internal client when fetching agent configuration etags metrics ({kibana-pull}173001[#173001]). +* Fixes encoding custom links values ({kibana-pull}171032[#171032]). +* Fixes an issue where data views were previously not space aware ({kibana-pull}170857[#170857]). +* Fixes issue with onboarding page around java agent ({kibana-pull}168816[#168816]). +* Adds a data tier filter to the `/has_data` API ({kibana-pull}173382[#173382]). +Cases:: +* Fixes a bug that prevented users with read permission from being assigned to cases ({kibana-pull}172047[#172047]). +Dashboard:: +* Prevents unnecessary loss of dashboard unsaved state ({kibana-pull}167707[#167707]). +Discover:: +* Fixes escaping column names when copying ({kibana-pull}170997[#170997]). +* Discover sharing links now preserve customized column widths ({kibana-pull}172405[#172405]). +* Fixes displaying the columns as they are returned from the query ({kibana-pull}171874[#171874]). +* Fixes issue with `defaultColumns` when changing data views ({kibana-pull}168994[#168994]). +Elastic Security:: +For the Elastic Security 8.12.0 release information, refer to {security-guide}/release-notes.html[_Elastic Security Solution Release Notes_]. +Fleet:: +* Allows agent upgrades if patch version is higher than {kib} ({kibana-pull}173167[#173167]). +* Fixes secrets with dot-separated variable names ({kibana-pull}173115[#173115]). +* Fixes endpoint privilege management endpoints return errors ({kibana-pull}171722[#171722]). +* Fixes expiration time for immediate bulk upgrades being too short ({kibana-pull}170879[#170879]). +* Fixes incorrect overwrite of `logs-*` and `metrics-*` data views on every integration install ({kibana-pull}170188[#170188]). +* Creates intermediate objects when using dynamic mappings ({kibana-pull}169981[#169981]). +Lens & Visualizations:: +* Fixes the sorting of null values so they are displayed last ({kibana-pull}172691[#172691]). +* Fixes the overwriting of chart descriptions after editing a visualization in *Lens* ({kibana-pull}172653[#172653]). +* Fixes an issue where the timerange panel wasn't correctly assigned during a conversion from dashboard to *Lens* ({kibana-pull}172647[#172647]). +* Various fixes for heatmap in *Lens* ({kibana-pull}172602[#172602]). +* Fixes filters being lost when navigating from dashboard -> editor -> *Lens* in *TSVB* ({kibana-pull}172566[#172566]). +* Ignore drop ES|QL commands for date histogram in discover ({kibana-pull}171769[#171769]). +Machine Learning:: +* Ensures data frame analytics job can be deleted from analytics map ({kibana-pull}174212[#174212]). +* Fixes filter for boolean fields filtering for numbers in Field statistics / Data Visualizer ({kibana-pull}174212[#174050]) +* Fixes registering of the ML alerting rules with the basic license ({kibana-pull}173644[#173644]). +* Fixes display of actions column in the datafeed chart flyout ({kibana-pull}173365[#173365]). +* Fixes View in Discover option in Anomaly explorer not handling multiple field values or values with quotation marks ({kibana-pull}172897[#172897]). +* Fixes field stats in Discover showing 0 sample count at times when switching data views ({kibana-pull}172734[#172734]). +* Fixes long field names overflowing in Anomaly detection wizard detector selection ({kibana-pull}172715[#172715]). +* Fixes data drift numeric fields not showing correctly ({kibana-pull}172504[#172504]). +* Fixes Data Visualizer / ML field stats and Data Frame Analytics to exclude _tier fields ({kibana-pull}172223[#172223]). +* Uses standard analyzer in log pattern analysis to ensure filter in Discover matches correct documents ({kibana-pull}172188[#172188]). +* Fixes ML node check and checks user privileges to create job button in dashboard ({kibana-pull}172022[#172022]). +* Fixes {kib} object list in new job from recognized index page ({kibana-pull}171935[#171935]). +Management:: +* Fixes retention policy field name not setting by default correctly in the Transform creation wizard ({kibana-pull}172609[#172609]). +Metrics:: +* Moves formulas and dashboard config to inventory models ({kibana-pull}171872[#171872]). +Platform:: +* Fixes a bug that could cause the `rollingFile` log appender to not properly rotate files on DST switch days ({kibana-pull}173811[#173811]). +* Fixes context formula functions ({kibana-pull}172710[#172710]). +Observability:: +* Removes legacy screenshot image data from the codepath in Synthetics ({kibana-pull}172684[#172684]). +* Fixes incorrect rule parameters when changing aggregation type using a custom equation ({kibana-pull}171958[#171958]). +* Adds parent link in host detail's breadcrumb ({kibana-pull}170792[#170792]). +Presentation:: +* Fixes validation query for nested fields ({kibana-pull}173690[#173690]). +* Fixes user privileges around Links panels saved to the library ({kibana-pull}173332[#173332]). +* Prevents overflowing dashboard title on saved toast notifications ({kibana-pull}172620[#172620]). +* Ignore indices without geometry field in vector tile requests ({kibana-pull}171472[#171472]). +* Fixes layer displaying no data instead of error ({kibana-pull}170084[#170084]). [[release-notes-8.11.4]] == {kib} 8.11.4 @@ -66,6 +325,7 @@ Review important information about the {kib} 8.x releases. === Bug fixes and enhancements There are no user-facing changes in the 8.11.4 release. + [[release-notes-8.11.3]] == {kib} 8.11.3 From 562b671a5d602875c1a7b3217f9d68a1380a926d Mon Sep 17 00:00:00 2001 From: Lisa Cawley Date: Wed, 10 Jan 2024 10:40:27 -0800 Subject: [PATCH 3/6] [Cases] Automate serverless security screenshots (#174556) --- .buildkite/ftr_configs.yml | 1 + .../security/config.screenshots.ts | 18 ++++ .../security/screenshot_creation/index.ts | 14 +++ .../response_ops_docs/cases/index.ts | 20 ++++ .../response_ops_docs/cases/list_view.ts | 96 +++++++++++++++++++ .../response_ops_docs/cases/testfile.png | 0 .../response_ops_docs/index.ts | 30 ++++++ 7 files changed, 179 insertions(+) create mode 100644 x-pack/test_serverless/functional/test_suites/security/config.screenshots.ts create mode 100644 x-pack/test_serverless/functional/test_suites/security/screenshot_creation/index.ts create mode 100644 x-pack/test_serverless/functional/test_suites/security/screenshot_creation/response_ops_docs/cases/index.ts create mode 100644 x-pack/test_serverless/functional/test_suites/security/screenshot_creation/response_ops_docs/cases/list_view.ts create mode 100644 x-pack/test_serverless/functional/test_suites/security/screenshot_creation/response_ops_docs/cases/testfile.png create mode 100644 x-pack/test_serverless/functional/test_suites/security/screenshot_creation/response_ops_docs/index.ts diff --git a/.buildkite/ftr_configs.yml b/.buildkite/ftr_configs.yml index 17a357c71640be..cc574b7a74c859 100644 --- a/.buildkite/ftr_configs.yml +++ b/.buildkite/ftr_configs.yml @@ -423,6 +423,7 @@ enabled: - x-pack/test_serverless/functional/test_suites/observability/common_configs/config.group5.ts - x-pack/test_serverless/functional/test_suites/observability/common_configs/config.group6.ts - x-pack/test_serverless/functional/test_suites/observability/config.screenshots.ts + - x-pack/test_serverless/functional/test_suites/security/config.screenshots.ts - x-pack/test_serverless/functional/test_suites/search/config.ts - x-pack/test_serverless/functional/test_suites/search/config.examples.ts - x-pack/test_serverless/functional/test_suites/search/config.screenshots.ts diff --git a/x-pack/test_serverless/functional/test_suites/security/config.screenshots.ts b/x-pack/test_serverless/functional/test_suites/security/config.screenshots.ts new file mode 100644 index 00000000000000..92a46e01b0e4f4 --- /dev/null +++ b/x-pack/test_serverless/functional/test_suites/security/config.screenshots.ts @@ -0,0 +1,18 @@ +/* + * 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 { createTestConfig } from '../../config.base'; + +export default createTestConfig({ + serverlessProject: 'security', + testFiles: [require.resolve('./screenshot_creation')], + junit: { + reportName: 'Serverless Security Screenshot Creation', + }, + + esServerArgs: ['xpack.ml.ad.enabled=false', 'xpack.ml.dfa.enabled=false'], +}); diff --git a/x-pack/test_serverless/functional/test_suites/security/screenshot_creation/index.ts b/x-pack/test_serverless/functional/test_suites/security/screenshot_creation/index.ts new file mode 100644 index 00000000000000..ca0d8ab0c191df --- /dev/null +++ b/x-pack/test_serverless/functional/test_suites/security/screenshot_creation/index.ts @@ -0,0 +1,14 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { FtrProviderContext } from '../../../ftr_provider_context'; + +export default function ({ loadTestFile }: FtrProviderContext) { + describe('Screenshots - serverless security UI', function () { + loadTestFile(require.resolve('./response_ops_docs')); + }); +} diff --git a/x-pack/test_serverless/functional/test_suites/security/screenshot_creation/response_ops_docs/cases/index.ts b/x-pack/test_serverless/functional/test_suites/security/screenshot_creation/response_ops_docs/cases/index.ts new file mode 100644 index 00000000000000..c2a17b8e8e82da --- /dev/null +++ b/x-pack/test_serverless/functional/test_suites/security/screenshot_creation/response_ops_docs/cases/index.ts @@ -0,0 +1,20 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { FtrProviderContext } from '../../../../../ftr_provider_context'; + +export default function ({ loadTestFile, getService }: FtrProviderContext) { + const browser = getService('browser'); + + describe('security cases', function () { + before(async () => { + await browser.setWindowSize(1920, 1080); + }); + + loadTestFile(require.resolve('./list_view')); + }); +} diff --git a/x-pack/test_serverless/functional/test_suites/security/screenshot_creation/response_ops_docs/cases/list_view.ts b/x-pack/test_serverless/functional/test_suites/security/screenshot_creation/response_ops_docs/cases/list_view.ts new file mode 100644 index 00000000000000..7103bae64f9841 --- /dev/null +++ b/x-pack/test_serverless/functional/test_suites/security/screenshot_creation/response_ops_docs/cases/list_view.ts @@ -0,0 +1,96 @@ +/* + * 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 { SECURITY_SOLUTION_OWNER } from '@kbn/cases-plugin/common'; +import { CaseSeverity } from '@kbn/cases-plugin/common/types/domain'; +import { FtrProviderContext } from '../../../../../ftr_provider_context'; +import { navigateToCasesApp } from '../../../../../../shared/lib/cases'; + +export default function ({ getPageObject, getPageObjects, getService }: FtrProviderContext) { + const cases = getService('cases'); + const pageObjects = getPageObjects(['common', 'header', 'svlCommonPage']); + const svlCases = getService('svlCases'); + const svlCommonScreenshots = getService('svlCommonScreenshots'); + const screenshotDirectories = ['response_ops_docs', 'security_cases']; + const testSubjects = getService('testSubjects'); + const owner = SECURITY_SOLUTION_OWNER; + let caseIdSuspiciousEmail: string; + + describe('list view', function () { + before(async () => { + await svlCases.api.createCase( + svlCases.api.getPostCaseRequest(owner, { + title: 'Unusual processes identified', + tags: ['linux', 'os processes'], + description: 'Test.', + owner, + severity: CaseSeverity.HIGH, + }) + ); + + const caseSuspiciousEmail = await svlCases.api.createCase( + svlCases.api.getPostCaseRequest(owner, { + title: 'Suspicious emails reported', + tags: ['email', 'phishing'], + description: 'Several employees have received suspicious emails from an unknown address.', + owner, + }) + ); + caseIdSuspiciousEmail = caseSuspiciousEmail.id; + + await svlCases.api.createCase( + svlCases.api.getPostCaseRequest(owner, { + title: 'Malware investigation', + tags: ['malware'], + description: 'Test.', + owner, + severity: CaseSeverity.MEDIUM, + }) + ); + }); + + after(async () => { + await svlCases.api.deleteAllCaseItems(); + await pageObjects.svlCommonPage.forceLogout(); + }); + + beforeEach(async () => { + await pageObjects.svlCommonPage.login(); + }); + + it('cases list screenshot', async () => { + await navigateToCasesApp(getPageObject, getService, owner); + await pageObjects.header.waitUntilLoadingHasFinished(); + await svlCommonScreenshots.takeScreenshot('cases-home-page', screenshotDirectories); + }); + + it('case settings screenshot', async () => { + await navigateToCasesApp(getPageObject, getService, owner); + await testSubjects.click('configure-case-button'); + await pageObjects.header.waitUntilLoadingHasFinished(); + await svlCommonScreenshots.takeScreenshot('case-settings', screenshotDirectories); + }); + + it('case detail screenshot', async () => { + await pageObjects.common.navigateToUrlWithBrowserHistory( + 'securitySolution', + `/cases/${caseIdSuspiciousEmail}`, + undefined + ); + await pageObjects.header.waitUntilLoadingHasFinished(); + await testSubjects.existOrFail('case-view-title'); + const collapseNav = await testSubjects.find('euiCollapsibleNavButton'); + await collapseNav.click(); + await svlCommonScreenshots.takeScreenshot('cases-ui-open', screenshotDirectories, 1400, 1024); + const filesTab = await testSubjects.find('case-view-tab-title-files'); + await filesTab.click(); + await cases.casesFilesTable.addFile(require.resolve('./testfile.png')); + await testSubjects.getVisibleText('cases-files-name-link'); + await svlCommonScreenshots.takeScreenshot('cases-files', screenshotDirectories, 1400, 1024); + }); + }); +} diff --git a/x-pack/test_serverless/functional/test_suites/security/screenshot_creation/response_ops_docs/cases/testfile.png b/x-pack/test_serverless/functional/test_suites/security/screenshot_creation/response_ops_docs/cases/testfile.png new file mode 100644 index 00000000000000..e69de29bb2d1d6 diff --git a/x-pack/test_serverless/functional/test_suites/security/screenshot_creation/response_ops_docs/index.ts b/x-pack/test_serverless/functional/test_suites/security/screenshot_creation/response_ops_docs/index.ts new file mode 100644 index 00000000000000..6e11aad1dab1c2 --- /dev/null +++ b/x-pack/test_serverless/functional/test_suites/security/screenshot_creation/response_ops_docs/index.ts @@ -0,0 +1,30 @@ +/* + * 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 { FtrProviderContext } from '../../../../ftr_provider_context'; + +export default function ({ getService, loadTestFile }: FtrProviderContext) { + const browser = getService('browser'); + const ml = getService('ml'); + + describe('response ops docs', function () { + this.tags(['responseOps']); + + before(async () => { + await ml.testResources.setKibanaTimeZoneToUTC(); + await ml.testResources.disableKibanaAnnouncements(); + await browser.setWindowSize(1920, 1080); + }); + + after(async () => { + await ml.testResources.resetKibanaTimeZone(); + await ml.testResources.resetKibanaAnnouncements(); + }); + + loadTestFile(require.resolve('./cases')); + }); +} From 797b29ab1a6943d93671fddfbe4ce4b3445352a1 Mon Sep 17 00:00:00 2001 From: Matthias Wilhelm Date: Wed, 10 Jan 2024 20:13:30 +0100 Subject: [PATCH 4/6] [FilterEditor] Load DataView in case it's not provided by the consuming plugin (#173017) Fix issue with missing data view by loading it, allowing users to edit the filter in the FilterEditor. --- .../public/dataview_picker/mocks/dataview.ts | 7 + .../filter_editor/filter_editor.test.tsx | 72 +++++++ .../filter_editor/filter_editor.tsx | 180 +++++++++++------- .../filter_bar/filter_item/filter_item.tsx | 4 +- .../filter_bar/filter_item/filter_items.tsx | 3 +- .../filter_editor_wrapper.tsx | 1 + .../filter_value_label/filter_value_label.tsx | 3 +- 7 files changed, 200 insertions(+), 70 deletions(-) diff --git a/src/plugins/unified_search/public/dataview_picker/mocks/dataview.ts b/src/plugins/unified_search/public/dataview_picker/mocks/dataview.ts index 7b8c1318fae8c9..8a608b8a54db56 100644 --- a/src/plugins/unified_search/public/dataview_picker/mocks/dataview.ts +++ b/src/plugins/unified_search/public/dataview_picker/mocks/dataview.ts @@ -121,3 +121,10 @@ export const buildDataViewMock = ({ }; export const dataViewMock = buildDataViewMock({ name: 'the-data-view', fields }); +export const dataViewMockWithTimefield = buildDataViewMock({ + timeFieldName: '@timestamp', + name: 'the-data-view-with-timefield', + fields, +}); + +export const dataViewMockList = [dataViewMock, dataViewMockWithTimefield]; diff --git a/src/plugins/unified_search/public/filter_bar/filter_editor/filter_editor.test.tsx b/src/plugins/unified_search/public/filter_bar/filter_editor/filter_editor.test.tsx index bb9b9e2aa2a189..19d7486cf83080 100644 --- a/src/plugins/unified_search/public/filter_bar/filter_editor/filter_editor.test.tsx +++ b/src/plugins/unified_search/public/filter_bar/filter_editor/filter_editor.test.tsx @@ -12,7 +12,10 @@ import { registerTestBed, TestBed } from '@kbn/test-jest-helpers'; import { coreMock } from '@kbn/core/public/mocks'; import type { FilterEditorProps } from '.'; import { FilterEditor } from '.'; +import { dataViewMockList } from '../../dataview_picker/mocks/dataview'; +import { dataPluginMock } from '@kbn/data-plugin/public/mocks'; +const dataMock = dataPluginMock.createStartContract(); jest.mock('@kbn/code-editor', () => { const original = jest.requireActual('@kbn/code-editor'); @@ -50,6 +53,7 @@ describe('', () => { onCancel: jest.fn(), onSubmit: jest.fn(), docLinks: coreMock.createStart().docLinks, + dataViews: dataMock.dataViews, }; testBed = await registerTestBed(FilterEditor, { defaultProps })(); }); @@ -76,4 +80,72 @@ describe('', () => { expect(find('saveFilter').props().disabled).toBe(false); }); }); + describe('handling data view fallback', () => { + let testBed: TestBed; + + beforeEach(async () => { + dataMock.dataViews.get = jest.fn().mockReturnValue(Promise.resolve(dataViewMockList[1])); + const defaultProps: Omit = { + theme: { + euiTheme: {} as unknown as EuiThemeComputed<{}>, + colorMode: 'DARK', + modifications: [], + } as UseEuiTheme<{}>, + filter: { + meta: { + type: 'phase', + index: dataViewMockList[1].id, + } as any, + }, + indexPatterns: [dataViewMockList[0]], + onCancel: jest.fn(), + onSubmit: jest.fn(), + docLinks: coreMock.createStart().docLinks, + dataViews: dataMock.dataViews, + }; + testBed = await registerTestBed(FilterEditor, { defaultProps })(); + }); + + it('renders the right data view to be selected', async () => { + const { exists, component, find } = testBed; + component.update(); + expect(exists('filterIndexPatternsSelect')).toBe(true); + expect(find('filterIndexPatternsSelect').find('input').props().value).toBe( + dataViewMockList[1].getName() + ); + }); + }); + describe('UI renders when data view fallback promise is rejected', () => { + let testBed: TestBed; + + beforeEach(async () => { + dataMock.dataViews.get = jest.fn().mockReturnValue(Promise.reject()); + const defaultProps: Omit = { + theme: { + euiTheme: {} as unknown as EuiThemeComputed<{}>, + colorMode: 'DARK', + modifications: [], + } as UseEuiTheme<{}>, + filter: { + meta: { + type: 'phase', + index: dataViewMockList[1].id, + } as any, + }, + indexPatterns: [dataViewMockList[0]], + onCancel: jest.fn(), + onSubmit: jest.fn(), + docLinks: coreMock.createStart().docLinks, + dataViews: dataMock.dataViews, + }; + testBed = registerTestBed(FilterEditor, { defaultProps })(); + }); + + it('renders the right data view to be selected', async () => { + const { exists, component, find } = await testBed; + component.update(); + expect(exists('filterIndexPatternsSelect')).toBe(true); + expect(find('filterIndexPatternsSelect').find('input').props().value).toBe(''); + }); + }); }); diff --git a/src/plugins/unified_search/public/filter_bar/filter_editor/filter_editor.tsx b/src/plugins/unified_search/public/filter_bar/filter_editor/filter_editor.tsx index c3c93edb54ffa7..67764134e448a1 100644 --- a/src/plugins/unified_search/public/filter_bar/filter_editor/filter_editor.tsx +++ b/src/plugins/unified_search/public/filter_bar/filter_editor/filter_editor.tsx @@ -25,6 +25,7 @@ import { withEuiTheme, EuiTextColor, EuiLink, + EuiLoadingSpinner, } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; import { @@ -43,7 +44,7 @@ import React, { Component } from 'react'; import { i18n } from '@kbn/i18n'; import { XJsonLang } from '@kbn/monaco'; import { DataView } from '@kbn/data-views-plugin/common'; -import { getIndexPatternFromFilter } from '@kbn/data-plugin/public'; +import { DataViewsContract, getIndexPatternFromFilter } from '@kbn/data-plugin/public'; import { CodeEditor } from '@kbn/code-editor'; import { cx } from '@emotion/css'; import { WithEuiThemeProps } from '@elastic/eui/src/services/theme'; @@ -143,42 +144,80 @@ export interface FilterEditorComponentProps { suggestionsAbstraction?: SuggestionsAbstraction; docLinks: DocLinksStart; filtersCount?: number; + dataViews?: DataViewsContract; } export type FilterEditorProps = WithEuiThemeProps & FilterEditorComponentProps; interface State { + indexPatterns: DataView[]; selectedDataView?: DataView; customLabel: string | null; queryDsl: string; isCustomEditorOpen: boolean; localFilter: Filter; + isLoadingDataView?: boolean; } class FilterEditorComponent extends Component { constructor(props: FilterEditorProps) { super(props); - const dataView = this.getIndexPatternFromFilter(); + const dataView = getIndexPatternFromFilter(props.filter, props.indexPatterns); this.state = { + indexPatterns: props.indexPatterns, selectedDataView: dataView, customLabel: props.filter.meta.alias || '', - queryDsl: this.parseFilterToQueryDsl(props.filter), + queryDsl: this.parseFilterToQueryDsl(props.filter, props.indexPatterns), isCustomEditorOpen: this.isUnknownFilterType() || !!this.props.filter?.meta.isMultiIndex, localFilter: dataView ? merge({}, props.filter) : buildEmptyFilter(false), + isLoadingDataView: !Boolean(dataView), }; } componentDidMount() { - const { localFilter, queryDsl, customLabel } = this.state; + const { localFilter, queryDsl, customLabel, selectedDataView } = this.state; this.props.onLocalFilterCreate?.({ filter: localFilter, queryDslFilter: { queryDsl, customLabel }, }); this.props.onLocalFilterUpdate?.(localFilter); + if (!selectedDataView) { + const dataViewId = this.props.filter.meta.index; + if (!dataViewId || !this.props.dataViews) { + this.setState({ isLoadingDataView: false }); + } else { + this.loadDataView(dataViewId, this.props.dataViews); + } + } + } + + /** + * Helper function to load the data view from the index pattern id + * E.g. in Discover there's just one active data view, so filters with different data view id + * Than the currently selected data view need to load the data view from the id to display the filter + * correctly + * @param dataViewId + * @private + */ + private async loadDataView(dataViewId: string, dataViews: DataViewsContract) { + try { + const dataView = await dataViews.get(dataViewId, false); + this.setState({ + selectedDataView: dataView, + isLoadingDataView: false, + indexPatterns: [dataView, ...this.props.indexPatterns], + localFilter: merge({}, this.props.filter), + queryDsl: this.parseFilterToQueryDsl(this.props.filter, this.state.indexPatterns), + }); + } catch (e) { + this.setState({ + isLoadingDataView: false, + }); + } } - private parseFilterToQueryDsl(filter: Filter) { - const dsl = filterToQueryDsl(filter, this.props.indexPatterns); + private parseFilterToQueryDsl(filter: Filter, indexPatterns: DataView[]) { + const dsl = filterToQueryDsl(filter, indexPatterns); return JSON.stringify(dsl, null, 2); } @@ -217,61 +256,67 @@ class FilterEditorComponent extends Component { - + {this.state.isLoadingDataView ? (
- {this.renderIndexPatternInput()} - - {this.state.isCustomEditorOpen - ? this.renderCustomEditor() - : this.renderFiltersBuilderEditor()} - - - - - +
- - - {/* Adding isolation here fixes this bug https://github.com/elastic/kibana/issues/142211 */} - - - - {this.props.mode === 'add' - ? strings.getAddButtonLabel() - : strings.getUpdateButtonLabel()} - - - - - - - - - - -
+ ) : ( + +
+ {this.renderIndexPatternInput()} + + {this.state.isCustomEditorOpen + ? this.renderCustomEditor() + : this.renderFiltersBuilderEditor()} + + + + + +
+ + + {/* Adding isolation here fixes this bug https://github.com/elastic/kibana/issues/142211 */} + + + + {this.props.mode === 'add' + ? strings.getAddButtonLabel() + : strings.getUpdateButtonLabel()} + + + + + + + + + + +
+ )} ); } @@ -283,8 +328,8 @@ class FilterEditorComponent extends Component { } if ( - this.props.indexPatterns.length <= 1 && - this.props.indexPatterns.find( + this.state.indexPatterns.length <= 1 && + this.state.indexPatterns.find( (indexPattern) => indexPattern === this.getIndexPatternFromFilter() ) ) { @@ -296,15 +341,16 @@ class FilterEditorComponent extends Component { return null; } const { selectedDataView } = this.state; + return ( <> indexPattern.getName()} + getLabel={(indexPattern) => indexPattern?.getName()} onChange={this.onIndexPatternChange} isClearable={false} data-test-subj="filterIndexPatternsSelect" @@ -381,7 +427,7 @@ class FilterEditorComponent extends Component { @@ -447,7 +493,7 @@ class FilterEditorComponent extends Component { } private getIndexPatternFromFilter() { - return getIndexPatternFromFilter(this.props.filter, this.props.indexPatterns); + return getIndexPatternFromFilter(this.props.filter, this.state.indexPatterns); } private isQueryDslValid = (queryDsl: string) => { @@ -526,7 +572,7 @@ class FilterEditorComponent extends Component { return; } - const newIndex = index || this.props.indexPatterns[0].id!; + const newIndex = index || this.state.indexPatterns[0].id!; try { const body = JSON.parse(queryDsl); return buildCustomFilter(newIndex, body, disabled, negate, customLabel || null, $state.store); @@ -592,7 +638,7 @@ class FilterEditorComponent extends Component { const filter = this.props.filter?.meta.type === FILTERS.CUSTOM || // only convert non-custom filters to custom when DSL changes - queryDsl !== this.parseFilterToQueryDsl(this.props.filter) + queryDsl !== this.parseFilterToQueryDsl(this.props.filter, this.state.indexPatterns) ? this.getFilterFromQueryDsl(queryDsl) : { ...this.props.filter, diff --git a/src/plugins/unified_search/public/filter_bar/filter_item/filter_item.tsx b/src/plugins/unified_search/public/filter_bar/filter_item/filter_item.tsx index 596a32ea0a2f58..aed639ec76d0d1 100644 --- a/src/plugins/unified_search/public/filter_bar/filter_item/filter_item.tsx +++ b/src/plugins/unified_search/public/filter_bar/filter_item/filter_item.tsx @@ -34,7 +34,7 @@ import React, { useCallback, } from 'react'; import type { DocLinksStart, IUiSettingsClient } from '@kbn/core/public'; -import { DataView } from '@kbn/data-views-plugin/public'; +import { DataView, DataViewsContract } from '@kbn/data-views-plugin/public'; import { css } from '@emotion/react'; import { getIndexPatternFromFilter, getDisplayValueFromFilter } from '@kbn/data-plugin/public'; import { FilterEditor } from '../filter_editor/filter_editor'; @@ -62,6 +62,7 @@ export interface FilterItemProps extends WithCloseFilterEditorConfirmModalProps readOnly?: boolean; suggestionsAbstraction?: SuggestionsAbstraction; filtersCount?: number; + dataViews?: DataViewsContract; } type FilterPopoverProps = HTMLAttributes & EuiPopoverProps; @@ -399,6 +400,7 @@ function FilterItemComponent(props: FilterItemProps) { suggestionsAbstraction={props.suggestionsAbstraction} docLinks={docLinks} filtersCount={props.filtersCount} + dataViews={props.dataViews} /> , ]} diff --git a/src/plugins/unified_search/public/filter_bar/filter_item/filter_items.tsx b/src/plugins/unified_search/public/filter_bar/filter_item/filter_items.tsx index f0e558f75ba711..941e842d30f6d0 100644 --- a/src/plugins/unified_search/public/filter_bar/filter_item/filter_items.tsx +++ b/src/plugins/unified_search/public/filter_bar/filter_item/filter_items.tsx @@ -47,7 +47,7 @@ export interface FilterItemsProps { const FilterItemsUI = React.memo(function FilterItemsUI(props: FilterItemsProps) { const groupRef = useRef(null); const kibana = useKibana(); - const { appName, usageCollection, uiSettings, docLinks } = kibana.services; + const { appName, data, usageCollection, uiSettings, docLinks } = kibana.services; const { readOnly = false } = props; if (!uiSettings) return null; @@ -84,6 +84,7 @@ const FilterItemsUI = React.memo(function FilterItemsUI(props: FilterItemsProps) readOnly={readOnly} suggestionsAbstraction={props.suggestionsAbstraction} filtersCount={props.filters.length} + dataViews={data?.dataViews} /> )); diff --git a/src/plugins/unified_search/public/query_string_input/filter_editor_wrapper.tsx b/src/plugins/unified_search/public/query_string_input/filter_editor_wrapper.tsx index 6f801b2a32f04f..cb3094e66260fa 100644 --- a/src/plugins/unified_search/public/query_string_input/filter_editor_wrapper.tsx +++ b/src/plugins/unified_search/public/query_string_input/filter_editor_wrapper.tsx @@ -119,6 +119,7 @@ export const FilterEditorWrapper = React.memo(function FilterEditorWrapper({ filtersForSuggestions={filtersForSuggestions} suggestionsAbstraction={suggestionsAbstraction} docLinks={docLinks} + dataViews={data.dataViews} /> )} diff --git a/x-pack/plugins/exploratory_view/public/components/shared/filter_value_label/filter_value_label.tsx b/x-pack/plugins/exploratory_view/public/components/shared/filter_value_label/filter_value_label.tsx index 934c30c8061f4f..af540d4e1f60b9 100644 --- a/x-pack/plugins/exploratory_view/public/components/shared/filter_value_label/filter_value_label.tsx +++ b/x-pack/plugins/exploratory_view/public/components/shared/filter_value_label/filter_value_label.tsx @@ -77,7 +77,7 @@ export function FilterValueLabel({ const filter = buildFilterLabel({ field, value, label, dataView, negate }); const { - services: { uiSettings, docLinks }, + services: { uiSettings, docLinks, dataViews }, } = useKibana(); return dataView ? ( @@ -101,6 +101,7 @@ export function FilterValueLabel({ 'editFilter', 'disableFilter', ]} + dataViews={dataViews} /> ) : null; } From 517763e03768a7a51a0a3f47e5e35b072109e663 Mon Sep 17 00:00:00 2001 From: Cee Chen <549407+cee-chen@users.noreply.github.com> Date: Wed, 10 Jan 2024 11:38:45 -0800 Subject: [PATCH 5/6] Upgrade EUI to v92.0.0 (#174487) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `v91.3.1`⏩`v92.0.0-backport.0` --- ## [`v92.0.0-backport.0`](https://github.com/elastic/eui/releases/v92.0.0-backport.0) **This is a backport release only intended for use by Kibana.** **Bug fixes** - Fixed an `EuiTreeView` JSX Typescript error ([#7452](https://github.com/elastic/eui/pull/7452)) - Fixed a color console warning being generated by disabled `EuiStep`s ([#7454](https://github.com/elastic/eui/pull/7454)) ## [`v92.0.0`](https://github.com/elastic/eui/releases/v92.0.0) - Updated generic types of `EuiBasicTable`, `EuiInMemoryTable` and `EuiSearchBar.Query.execute` to add `extends object` constraint ([#7340](https://github.com/elastic/eui/pull/7340)) - This change should have no impact on your applications since the updated types only affect properties that exclusively accept object values. - Added a new `EuiFlyoutResizable` component ([#7439](https://github.com/elastic/eui/pull/7439)) - Updated `EuiTextArea` to accept `isClearable` and `icon` as props ([#7449](https://github.com/elastic/eui/pull/7449)) **Bug fixes** - `EuiRange`/`EuiDualRange`'s track ticks & highlights now update their positions on resize ([#7442](https://github.com/elastic/eui/pull/7442)) **Deprecations** - Updated `EuiFilterButton` to remove the second `.euiFilterButton__textShift` span wrapper. Target `.euiFilterButton__text` instead ([#7444](https://github.com/elastic/eui/pull/7444)) **Breaking changes** - Removed deprecated `EuiNotificationEvent`. We recommend copying the component to your application if necessary ([#7434](https://github.com/elastic/eui/pull/7434)) - Removed deprecated `EuiControlBar`. We recommend using `EuiBottomBar` instead ([#7435](https://github.com/elastic/eui/pull/7435)) --- package.json | 2 +- .../__snapshots__/i18n_service.test.tsx.snap | 15 - .../src/i18n_eui_mapping.tsx | 81 ----- .../field_list_filters/field_type_filter.tsx | 2 +- src/dev/license_checker/config.ts | 2 +- .../time_slider/components/time_slider.tsx | 11 +- .../time_slider_popover_content.tsx | 6 +- .../time_slider_sliding_window_range.tsx | 8 +- .../in_memory_table/hooks/use_table_state.ts | 4 +- .../components/shared/managed_table/index.tsx | 6 +- .../filter_activity.tsx | 2 +- .../use_cloud_posture_data_table/utils.ts | 2 +- .../hooks/use_cloud_posture_table/utils.ts | 2 +- .../configurations/layout/findings_layout.tsx | 2 +- .../vulnerability_table_panel.tsx | 2 +- .../data_visualizer_stats_table.tsx | 2 +- .../stats_table/use_table_settings.ts | 4 +- .../analytics_collection_explorer_table.tsx | 2 +- .../analytics_collection_overview_table.tsx | 2 +- .../ignored_queries_panel.tsx | 3 + .../components/index_templates_flyout.tsx | 2 + .../analytics_list/use_table_settings.ts | 8 +- .../components/conditions_table/index.tsx | 4 +- .../components/ml/tables/basic_table.tsx | 2 +- .../components/risk_score_mapping/index.tsx | 58 ++-- .../components/step_about_rule/index.test.tsx | 1 - .../components/step_about_rule/index.tsx | 9 - .../pages/rule_creation/index.tsx | 1 - .../pages/rule_editing/index.tsx | 1 - .../journeys/management_list.journey.ts | 2 +- .../components/flyout/fields_table.tsx | 5 +- .../transform_list/use_table_settings.ts | 10 +- .../translations/translations/fr-FR.json | 307 ++++++++--------- .../translations/translations/ja-JP.json | 311 +++++++++--------- .../translations/translations/zh-CN.json | 151 ++++----- .../filter_status_button.test.tsx.snap | 12 +- .../__snapshots__/status_filter.test.tsx.snap | 36 +- yarn.lock | 8 +- 38 files changed, 449 insertions(+), 639 deletions(-) diff --git a/package.json b/package.json index ebe28eb8f8b43c..9f9087b09a47f2 100644 --- a/package.json +++ b/package.json @@ -102,7 +102,7 @@ "@elastic/datemath": "5.0.3", "@elastic/elasticsearch": "npm:@elastic/elasticsearch-canary@8.9.1-canary.1", "@elastic/ems-client": "8.5.1", - "@elastic/eui": "91.3.1", + "@elastic/eui": "92.0.0-backport.0", "@elastic/filesaver": "1.1.2", "@elastic/node-crypto": "1.2.1", "@elastic/numeral": "^2.5.1", diff --git a/packages/core/i18n/core-i18n-browser-internal/src/__snapshots__/i18n_service.test.tsx.snap b/packages/core/i18n/core-i18n-browser-internal/src/__snapshots__/i18n_service.test.tsx.snap index 416eba2d6fb6ed..c1f33ec2f18c67 100644 --- a/packages/core/i18n/core-i18n-browser-internal/src/__snapshots__/i18n_service.test.tsx.snap +++ b/packages/core/i18n/core-i18n-browser-internal/src/__snapshots__/i18n_service.test.tsx.snap @@ -80,9 +80,6 @@ exports[`#start() returns \`Context\` component 1`] = ` "euiComboBoxOptionsList.noMatchingOptions": [Function], "euiComboBoxPill.removeSelection": [Function], "euiCommonlyUsedTimeRanges.legend": "Commonly used", - "euiControlBar.customScreenReaderAnnouncement": [Function], - "euiControlBar.screenReaderAnnouncement": "There is a new region landmark with page level controls at the end of the document.", - "euiControlBar.screenReaderHeading": "Page level controls", "euiDataGrid.ariaLabel": [Function], "euiDataGrid.ariaLabelledBy": [Function], "euiDataGrid.screenReaderNotice": "Cell contains interactive content.", @@ -206,18 +203,6 @@ exports[`#start() returns \`Context\` component 1`] = ` "euiMarkdownEditorToolbar.editor": "Editor", "euiMarkdownEditorToolbar.previewMarkdown": "Preview", "euiModal.closeModal": "Closes this modal window", - "euiNotificationEventMessages.accordionAriaLabelButtonText": [Function], - "euiNotificationEventMessages.accordionButtonText": [Function], - "euiNotificationEventMessages.accordionHideText": "hide", - "euiNotificationEventMeta.contextMenuButton": [Function], - "euiNotificationEventReadButton.markAsRead": "Mark as read", - "euiNotificationEventReadButton.markAsReadAria": [Function], - "euiNotificationEventReadButton.markAsUnread": "Mark as unread", - "euiNotificationEventReadButton.markAsUnreadAria": [Function], - "euiNotificationEventReadIcon.read": "Read", - "euiNotificationEventReadIcon.readAria": [Function], - "euiNotificationEventReadIcon.unread": "Unread", - "euiNotificationEventReadIcon.unreadAria": [Function], "euiPagination.collection": "collection", "euiPagination.firstRangeAriaLabel": [Function], "euiPagination.fromEndLabel": "from end", diff --git a/packages/core/i18n/core-i18n-browser-internal/src/i18n_eui_mapping.tsx b/packages/core/i18n/core-i18n-browser-internal/src/i18n_eui_mapping.tsx index f542b59c24850a..6f6a29e1a52559 100644 --- a/packages/core/i18n/core-i18n-browser-internal/src/i18n_eui_mapping.tsx +++ b/packages/core/i18n/core-i18n-browser-internal/src/i18n_eui_mapping.tsx @@ -371,22 +371,6 @@ export const getEuiContextMapping = (): EuiTokensObject => { 'euiCommonlyUsedTimeRanges.legend': i18n.translate('core.euiCommonlyUsedTimeRanges.legend', { defaultMessage: 'Commonly used', }), - 'euiControlBar.screenReaderHeading': i18n.translate('core.euiControlBar.screenReaderHeading', { - defaultMessage: 'Page level controls', - }), - 'euiControlBar.screenReaderAnnouncement': i18n.translate( - 'core.euiControlBar.screenReaderAnnouncement', - { - defaultMessage: - 'There is a new region landmark with page level controls at the end of the document.', - } - ), - 'euiControlBar.customScreenReaderAnnouncement': ({ landmarkHeading }: EuiValues) => - i18n.translate('core.euiControlBar.customScreenReaderAnnouncement', { - defaultMessage: - 'There is a new region landmark called {landmarkHeading} with page level controls at the end of the document.', - values: { landmarkHeading }, - }), 'euiGlobalToastList.clearAllToastsButtonAriaLabel': i18n.translate( 'core.euiGlobalToastList.clearAllToastsButtonAriaLabel', { @@ -938,56 +922,10 @@ export const getEuiContextMapping = (): EuiTokensObject => { 'euiModal.closeModal': i18n.translate('core.euiModal.closeModal', { defaultMessage: 'Closes this modal window', }), - 'euiNotificationEventMessages.accordionButtonText': ({ messagesLength }: EuiValues) => - i18n.translate('core.euiNotificationEventMessages.accordionButtonText', { - defaultMessage: '+ {messagesLength} more', - values: { messagesLength }, - }), 'euiErrorBoundary.error': i18n.translate('core.euiErrorBoundary.error', { defaultMessage: 'Error', description: 'Error boundary for uncaught exceptions when rendering part of the application', }), - 'euiNotificationEventMessages.accordionAriaLabelButtonText': ({ - messagesLength, - eventName, - }: EuiValues) => - i18n.translate('core.euiNotificationEventMessages.accordionAriaLabelButtonText', { - defaultMessage: '+ {messagesLength} messages for {eventName}', - values: { messagesLength, eventName }, - }), - 'euiNotificationEventMeta.contextMenuButton': ({ eventName }: EuiValues) => - i18n.translate('core.euiNotificationEventMeta.contextMenuButton', { - defaultMessage: 'Menu for {eventName}', - values: { eventName }, - }), - 'euiNotificationEventReadButton.markAsReadAria': ({ eventName }: EuiValues) => - i18n.translate('core.euiNotificationEventReadButton.markAsReadAria', { - defaultMessage: 'Mark {eventName} as read', - values: { eventName }, - }), - 'euiNotificationEventReadButton.markAsUnreadAria': ({ eventName }: EuiValues) => - i18n.translate('core.euiNotificationEventReadButton.markAsUnreadAria', { - defaultMessage: 'Mark {eventName} as unread', - values: { eventName }, - }), - 'euiNotificationEventReadButton.markAsRead': i18n.translate( - 'core.euiNotificationEventReadButton.markAsRead', - { - defaultMessage: 'Mark as read', - } - ), - 'euiNotificationEventReadButton.markAsUnread': i18n.translate( - 'core.euiNotificationEventReadButton.markAsUnread', - { - defaultMessage: 'Mark as unread', - } - ), - 'euiNotificationEventMessages.accordionHideText': i18n.translate( - 'core.euiNotificationEventMessages.accordionHideText', - { - defaultMessage: 'hide', - } - ), 'euiPagination.pageOfTotalCompressed': ({ page, total }: EuiValues) => ( { defaultMessage: 'You can quickly navigate this list using arrow keys.', } ), - 'euiNotificationEventReadIcon.read': i18n.translate('core.euiNotificationEventReadIcon.read', { - defaultMessage: 'Read', - }), - 'euiNotificationEventReadIcon.readAria': ({ eventName }: EuiValues) => - i18n.translate('core.euiNotificationEventReadIcon.readAria', { - defaultMessage: '{eventName} is read', - values: { eventName }, - }), - 'euiNotificationEventReadIcon.unread': i18n.translate( - 'core.euiNotificationEventReadIcon.unread', - { - defaultMessage: 'Unread', - } - ), - 'euiNotificationEventReadIcon.unreadAria': ({ eventName }: EuiValues) => - i18n.translate('core.euiNotificationEventReadIcon.unreadAria', { - defaultMessage: '{eventName} is unread', - values: { eventName }, - }), 'euiSkeletonLoading.loadingAriaText': ({ contentAriaLabel }: EuiValues) => i18n.translate('core.euiSkeletonLoading.loadingAriaText', { defaultMessage: 'Loading {contentAriaLabel}', diff --git a/packages/kbn-unified-field-list/src/components/field_list_filters/field_type_filter.tsx b/packages/kbn-unified-field-list/src/components/field_list_filters/field_type_filter.tsx index c80b924333ecf4..1cc5ea47a61147 100644 --- a/packages/kbn-unified-field-list/src/components/field_list_filters/field_type_filter.tsx +++ b/packages/kbn-unified-field-list/src/components/field_list_filters/field_type_filter.tsx @@ -49,7 +49,7 @@ const popoverTitleStyle = css` `; const filterButtonStyle = css` &, - & .euiFilterButton__textShift { + & .euiFilterButton__text { min-width: 0; line-height: 1; } diff --git a/src/dev/license_checker/config.ts b/src/dev/license_checker/config.ts index 0d0b59092746e0..2846992840a59e 100644 --- a/src/dev/license_checker/config.ts +++ b/src/dev/license_checker/config.ts @@ -85,7 +85,7 @@ export const LICENSE_OVERRIDES = { 'jsts@1.6.2': ['Eclipse Distribution License - v 1.0'], // cf. https://github.com/bjornharrtell/jsts '@mapbox/jsonlint-lines-primitives@2.0.2': ['MIT'], // license in readme https://github.com/tmcw/jsonlint '@elastic/ems-client@8.5.1': ['Elastic License 2.0'], - '@elastic/eui@91.3.1': ['SSPL-1.0 OR Elastic License 2.0'], + '@elastic/eui@92.0.0-backport.0': ['SSPL-1.0 OR Elastic License 2.0'], 'language-subtag-registry@0.3.21': ['CC-BY-4.0'], // retired ODC‑By license https://github.com/mattcg/language-subtag-registry 'buffers@0.1.1': ['MIT'], // license in importing module https://www.npmjs.com/package/binary '@bufbuild/protobuf@1.2.1': ['Apache-2.0'], // license (Apache-2.0 AND BSD-3-Clause) diff --git a/src/plugins/controls/public/time_slider/components/time_slider.tsx b/src/plugins/controls/public/time_slider/components/time_slider.tsx index b236a42c509b7e..0a40e1c8420e3e 100644 --- a/src/plugins/controls/public/time_slider/components/time_slider.tsx +++ b/src/plugins/controls/public/time_slider/components/time_slider.tsx @@ -6,10 +6,9 @@ * Side Public License, v 1. */ -import React, { FC, useRef } from 'react'; +import React, { FC } from 'react'; import { EuiInputPopover } from '@elastic/eui'; import { FROM_INDEX, TO_INDEX } from '../time_utils'; -import { EuiDualRangeRef } from './time_slider_sliding_window_range'; import { getRoundedTimeRangeBounds } from '../time_slider_selectors'; import { useTimeSlider } from '../embeddable/time_slider_embeddable'; import { TimeSliderPopoverButton } from './time_slider_popover_button'; @@ -41,12 +40,6 @@ export const TimeSlider: FC = (props: Props) => { return state.componentState.isOpen; }); - const rangeRef = useRef(null); - - const onPanelResize = (width: number) => { - rangeRef.current?.onResize(width); - }; - const from = value ? value[FROM_INDEX] : timeRangeMin; const to = value ? value[TO_INDEX] : timeRangeMax; @@ -67,10 +60,8 @@ export const TimeSlider: FC = (props: Props) => { isOpen={isOpen} closePopover={() => timeSlider.dispatch.setIsOpen({ isOpen: false })} panelPaddingSize="s" - onPanelResize={onPanelResize} > ; } export function TimeSliderPopoverContent(props: Props) { @@ -55,7 +54,6 @@ export function TimeSliderPopoverContent(props: Props) { value={props.value} onChange={props.onChange} stepSize={props.stepSize} - rangeRef={props.rangeRef} ticks={ticks} timeRangeMin={props.timeRangeMin} timeRangeMax={props.timeRangeMax} diff --git a/src/plugins/controls/public/time_slider/components/time_slider_sliding_window_range.tsx b/src/plugins/controls/public/time_slider/components/time_slider_sliding_window_range.tsx index 96d8cd8205a817..4b87e8d3405c1c 100644 --- a/src/plugins/controls/public/time_slider/components/time_slider_sliding_window_range.tsx +++ b/src/plugins/controls/public/time_slider/components/time_slider_sliding_window_range.tsx @@ -6,12 +6,8 @@ * Side Public License, v 1. */ -import React, { Ref, ComponentProps } from 'react'; +import React from 'react'; import { EuiDualRange, EuiRangeTick } from '@elastic/eui'; -import type { EuiDualRangeClass } from '@elastic/eui/src/components/form/range/dual_range'; - -// Unfortunately, wrapping EuiDualRange in `withEuiTheme` has created a super annoying/verbose typing -export type EuiDualRangeRef = EuiDualRangeClass & ComponentProps; interface Props { value: [number, number]; @@ -20,7 +16,6 @@ interface Props { ticks: EuiRangeTick[]; timeRangeMin: number; timeRangeMax: number; - rangeRef?: Ref; } export function TimeSliderSlidingWindowRange(props: Props) { @@ -30,7 +25,6 @@ export function TimeSliderSlidingWindowRange(props: Props) { return ( { +export interface UseTableState { /** * Callback function which gets called whenever the pagination or sorting state of the table changed */ @@ -36,7 +36,7 @@ export interface UseTableState { * @param {string} initialSortField - field name to sort by default * @param {string} initialSortDirection - default to 'asc' */ -export function useTableState( +export function useTableState( items: T[], initialSortField: string, initialSortDirection: 'asc' | 'desc' = 'asc' diff --git a/x-pack/plugins/apm/public/components/shared/managed_table/index.tsx b/x-pack/plugins/apm/public/components/shared/managed_table/index.tsx index 41512f00d22b63..88d9e88c5e7baa 100644 --- a/x-pack/plugins/apm/public/components/shared/managed_table/index.tsx +++ b/x-pack/plugins/apm/public/components/shared/managed_table/index.tsx @@ -14,7 +14,7 @@ import { useLegacyUrlParams } from '../../../context/url_params_context/use_url_ import { fromQuery, toQuery } from '../links/url_helpers'; // TODO: this should really be imported from EUI -export interface ITableColumn { +export interface ITableColumn { name: ReactNode; actions?: Array>; field?: string; @@ -26,7 +26,7 @@ export interface ITableColumn { render?: (value: any, item: T) => unknown; } -interface Props { +interface Props { items: T[]; columns: Array>; initialPageSize: number; @@ -59,7 +59,7 @@ export type SortFunction = ( sortDirection: 'asc' | 'desc' ) => T[]; -function UnoptimizedManagedTable(props: Props) { +function UnoptimizedManagedTable(props: Props) { const history = useHistory(); const { items, diff --git a/x-pack/plugins/cases/public/components/user_actions_activity_bar/filter_activity.tsx b/x-pack/plugins/cases/public/components/user_actions_activity_bar/filter_activity.tsx index f3730a24cbad83..b6e3c2639aef5c 100644 --- a/x-pack/plugins/cases/public/components/user_actions_activity_bar/filter_activity.tsx +++ b/x-pack/plugins/cases/public/components/user_actions_activity_bar/filter_activity.tsx @@ -28,7 +28,7 @@ const MyEuiFilterGroup = styled(EuiFilterGroup)` const FilterAllButton = styled(EuiFilterButton)` &, - & .euiFilterButton__textShift { + & .euiFilterButton__text { min-width: 28px; } `; diff --git a/x-pack/plugins/cloud_security_posture/public/common/hooks/use_cloud_posture_data_table/utils.ts b/x-pack/plugins/cloud_security_posture/public/common/hooks/use_cloud_posture_data_table/utils.ts index c715b6a90b4ca9..6628cc7711a827 100644 --- a/x-pack/plugins/cloud_security_posture/public/common/hooks/use_cloud_posture_data_table/utils.ts +++ b/x-pack/plugins/cloud_security_posture/public/common/hooks/use_cloud_posture_data_table/utils.ts @@ -7,7 +7,7 @@ import type { EuiBasicTableProps, Pagination } from '@elastic/eui'; -type TablePagination = NonNullable['pagination']>; +type TablePagination = NonNullable['pagination']>; export const getPaginationTableParams = ( params: TablePagination & Pick, 'pageIndex' | 'pageSize'>, diff --git a/x-pack/plugins/cloud_security_posture/public/common/hooks/use_cloud_posture_table/utils.ts b/x-pack/plugins/cloud_security_posture/public/common/hooks/use_cloud_posture_table/utils.ts index 2d3f9b1c7605cf..a74abccba1e18b 100644 --- a/x-pack/plugins/cloud_security_posture/public/common/hooks/use_cloud_posture_table/utils.ts +++ b/x-pack/plugins/cloud_security_posture/public/common/hooks/use_cloud_posture_table/utils.ts @@ -35,7 +35,7 @@ const getBaseQuery = ({ } }; -type TablePagination = NonNullable['pagination']>; +type TablePagination = NonNullable['pagination']>; export const getPaginationTableParams = ( params: TablePagination & Pick, 'pageIndex' | 'pageSize'>, diff --git a/x-pack/plugins/cloud_security_posture/public/pages/configurations/layout/findings_layout.tsx b/x-pack/plugins/cloud_security_posture/public/pages/configurations/layout/findings_layout.tsx index 468934d6acee31..2a39550a3c7d4d 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/configurations/layout/findings_layout.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/configurations/layout/findings_layout.tsx @@ -46,7 +46,7 @@ export const PageTitleText = ({ title }: { title: React.ReactNode }) => ( ); -export const getExpandColumn = ({ +export const getExpandColumn = ({ onClick, }: { onClick(item: T): void; diff --git a/x-pack/plugins/cloud_security_posture/public/pages/vulnerability_dashboard/vulnerability_table_panel.tsx b/x-pack/plugins/cloud_security_posture/public/pages/vulnerability_dashboard/vulnerability_table_panel.tsx index 79dd2b60f8db2e..8906688efdae86 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/vulnerability_dashboard/vulnerability_table_panel.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/vulnerability_dashboard/vulnerability_table_panel.tsx @@ -23,7 +23,7 @@ import { } from './vulnerability_table_panel.config'; import { ChartPanel } from '../../components/chart_panel'; -export interface VulnerabilityDashboardTableProps { +export interface VulnerabilityDashboardTableProps { tableType: DASHBOARD_TABLE_TYPES; columns: Array>; items: T[]; diff --git a/x-pack/plugins/data_visualizer/public/application/common/components/stats_table/data_visualizer_stats_table.tsx b/x-pack/plugins/data_visualizer/public/application/common/components/stats_table/data_visualizer_stats_table.tsx index e873beb97d1644..71da03d5938bb8 100644 --- a/x-pack/plugins/data_visualizer/public/application/common/components/stats_table/data_visualizer_stats_table.tsx +++ b/x-pack/plugins/data_visualizer/public/application/common/components/stats_table/data_visualizer_stats_table.tsx @@ -51,7 +51,7 @@ const FIELD_NAME = 'fieldName'; export type ItemIdToExpandedRowMap = Record; type DataVisualizerTableItem = FieldVisConfig | FileBasedFieldVisConfig; -interface DataVisualizerTableProps { +interface DataVisualizerTableProps { items: T[]; pageState: DataVisualizerTableState; updatePageState: (update: DataVisualizerTableState) => void; diff --git a/x-pack/plugins/data_visualizer/public/application/common/components/stats_table/use_table_settings.ts b/x-pack/plugins/data_visualizer/public/application/common/components/stats_table/use_table_settings.ts index 778aaa3697c7b8..ed0a2752cd33fd 100644 --- a/x-pack/plugins/data_visualizer/public/application/common/components/stats_table/use_table_settings.ts +++ b/x-pack/plugins/data_visualizer/public/application/common/components/stats_table/use_table_settings.ts @@ -12,13 +12,13 @@ import type { DataVisualizerTableState } from '../../../../../common/types'; const PAGE_SIZE_OPTIONS = [10, 25, 50, 100]; -interface UseTableSettingsReturnValue { +interface UseTableSettingsReturnValue { onTableChange: EuiBasicTableProps['onChange']; pagination: Pagination; sorting: { sort: PropertySort }; } -export function useTableSettings( +export function useTableSettings( items: TypeOfItem[], pageState: DataVisualizerTableState, updatePageState: (update: DataVisualizerTableState) => void diff --git a/x-pack/plugins/enterprise_search/public/applications/analytics/components/analytics_collection_view/analytics_collection_explorer/analytics_collection_explorer_table.tsx b/x-pack/plugins/enterprise_search/public/applications/analytics/components/analytics_collection_view/analytics_collection_explorer/analytics_collection_explorer_table.tsx index 19457083db2ccf..9666ceb8eac2fc 100644 --- a/x-pack/plugins/enterprise_search/public/applications/analytics/components/analytics_collection_view/analytics_collection_explorer/analytics_collection_explorer_table.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/analytics/components/analytics_collection_view/analytics_collection_explorer/analytics_collection_explorer_table.tsx @@ -48,7 +48,7 @@ import { import { AnalyticsCollectionExplorerCallout } from './analytics_collection_explorer_callout'; -interface TableSetting { +interface TableSetting { columns: Array< EuiBasicTableColumn & { render?: (euiTheme: UseEuiTheme['euiTheme']) => EuiTableFieldDataColumnType['render']; diff --git a/x-pack/plugins/enterprise_search/public/applications/analytics/components/analytics_collection_view/analytics_collection_overview/analytics_collection_overview_table.tsx b/x-pack/plugins/enterprise_search/public/applications/analytics/components/analytics_collection_view/analytics_collection_overview/analytics_collection_overview_table.tsx index 3bad1189a0181a..1cf9f91f08db89 100644 --- a/x-pack/plugins/enterprise_search/public/applications/analytics/components/analytics_collection_view/analytics_collection_overview/analytics_collection_overview_table.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/analytics/components/analytics_collection_view/analytics_collection_overview/analytics_collection_overview_table.tsx @@ -95,7 +95,7 @@ const tabsByFilter: Record> ], }; -interface TableSetting { +interface TableSetting { columns: Array< EuiBasicTableColumn & { render?: (euiTheme: UseEuiTheme['euiTheme']) => EuiTableFieldDataColumnType['render']; diff --git a/x-pack/plugins/enterprise_search/public/applications/app_search/components/curations/views/curations_history/components/ignored_queries_panel/ignored_queries_panel.tsx b/x-pack/plugins/enterprise_search/public/applications/app_search/components/curations/views/curations_history/components/ignored_queries_panel/ignored_queries_panel.tsx index b3adf5b62b32f6..d3a1cad6f2d83a 100644 --- a/x-pack/plugins/enterprise_search/public/applications/app_search/components/curations/views/curations_history/components/ignored_queries_panel/ignored_queries_panel.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/app_search/components/curations/views/curations_history/components/ignored_queries_panel/ignored_queries_panel.tsx @@ -36,6 +36,7 @@ export const IgnoredQueriesPanel: React.FC = () => { loadIgnoredQueries(); }, [meta.page.current]); + // @ts-expect-error - EuiBasicTable wants an array of objects, but will accept strings if coerced const columns: Array> = [ { render: (query: string) => query, @@ -108,8 +109,10 @@ export const IgnoredQueriesPanel: React.FC = () => { hasBorder > = ({ = ({ 'xpack.indexLifecycleMgmt.policyTable.indexTemplatesTable.nameHeader', { defaultMessage: 'Index template name' } ), + // @ts-expect-error - EuiInMemoryTable wants an array of objects, but will accept strings if coerced render: (value: string) => { return ( { +export interface Criteria { page?: { index: number; size: number; @@ -23,14 +23,14 @@ export interface Criteria { direction: Direction; }; } -export interface CriteriaWithPagination extends Criteria { +export interface CriteriaWithPagination extends Criteria { page: { index: number; size: number; }; } -interface UseTableSettingsReturnValue { +interface UseTableSettingsReturnValue { onTableChange: EuiBasicTableProps['onChange']; pagination: Required>; sorting: { @@ -41,7 +41,7 @@ interface UseTableSettingsReturnValue { }; } -export function useTableSettings( +export function useTableSettings( totalItemCount: number, pageState: ListingPageUrlState, updatePageState: (update: Partial) => void diff --git a/x-pack/plugins/security_solution/public/common/components/conditions_table/index.tsx b/x-pack/plugins/security_solution/public/common/components/conditions_table/index.tsx index 29d6a8e430d6ae..ace749933d3898 100644 --- a/x-pack/plugins/security_solution/public/common/components/conditions_table/index.tsx +++ b/x-pack/plugins/security_solution/public/common/components/conditions_table/index.tsx @@ -18,11 +18,11 @@ const AndOrBadgeContainer = styled(EuiFlexItem)` padding-bottom: ${({ theme }) => theme.eui.euiSizeS}; `; -type ConditionsTableProps = EuiBasicTableProps & { +type ConditionsTableProps = EuiBasicTableProps & { badge: AndOr; }; -export const ConditionsTable = ({ badge, ...props }: ConditionsTableProps) => { +export const ConditionsTable = ({ badge, ...props }: ConditionsTableProps) => { return ( {props.items.length > 1 && ( diff --git a/x-pack/plugins/security_solution/public/common/components/ml/tables/basic_table.tsx b/x-pack/plugins/security_solution/public/common/components/ml/tables/basic_table.tsx index e03ebae502ccd8..7ade79f91801bf 100644 --- a/x-pack/plugins/security_solution/public/common/components/ml/tables/basic_table.tsx +++ b/x-pack/plugins/security_solution/public/common/components/ml/tables/basic_table.tsx @@ -9,7 +9,7 @@ import styled from 'styled-components'; import type { EuiInMemoryTableProps } from '@elastic/eui'; import { EuiInMemoryTable } from '@elastic/eui'; -type BasicTableType = React.ComponentType>; +type BasicTableType = React.ComponentType>; export const BasicTable: typeof EuiInMemoryTable & { displayName: string } = styled( EuiInMemoryTable as BasicTableType // eslint-disable-line @typescript-eslint/no-explicit-any )` diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/risk_score_mapping/index.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/risk_score_mapping/index.tsx index 66b7a5ff27d123..bbbf4a8740aef0 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/risk_score_mapping/index.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/risk_score_mapping/index.tsx @@ -51,7 +51,6 @@ interface RiskScoreFieldProps { idAria: string; indices: DataViewBase; isDisabled: boolean; - isActive: boolean; placeholder?: string; } @@ -61,7 +60,6 @@ export const RiskScoreField = ({ idAria, indices, isDisabled, - isActive, placeholder, }: RiskScoreFieldProps) => { const { value, isMappingChecked, mapping } = field.value; @@ -149,39 +147,29 @@ export const RiskScoreField = ({ return ( - { - // TODO: https://github.com/elastic/kibana/issues/161456 - // The About step page contains EuiRange component which does not work properly within memoized parents. - // EUI team suggested not to memoize EuiRange/EuiDualRange: https://github.com/elastic/eui/issues/6846 - // Workaround: We force EuiRange re-rendering by removing/adding it into the DOM. - // NOTE: We should remove this workaround once EUI team fixed EuiRange. - // Related ticket: https://github.com/elastic/kibana/issues/160561 - } - {isActive && ( - - - - )} + + + { dataViewId={defineStepDefault.dataViewId} timestampOverride={stepAboutDefaultValue.timestampOverride} isLoading={false} - isActive={true} form={aboutStepForm} /> ); diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/step_about_rule/index.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/step_about_rule/index.tsx index ef78ac0f408b79..85f5284f834525 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/step_about_rule/index.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/step_about_rule/index.tsx @@ -50,13 +50,6 @@ interface StepAboutRuleProps extends RuleStepProps { timestampOverride: string; form: FormHook; esqlQuery?: string | undefined; - // TODO: https://github.com/elastic/kibana/issues/161456 - // The About step page contains EuiRange component which does not work properly within memoized parents. - // EUI team suggested not to memoize EuiRange/EuiDualRange: https://github.com/elastic/eui/issues/6846 - // Workaround: We introduced this additional property to be able to do extra re-render on switching to/from the About step page. - // NOTE: We should remove this workaround once EUI team fixed EuiRange. - // Related ticket: https://github.com/elastic/kibana/issues/160561 - isActive: boolean; } interface StepAboutRuleReadOnlyProps { @@ -83,7 +76,6 @@ const StepAboutRuleComponent: FC = ({ index, dataViewId, timestampOverride, - isActive = false, isUpdateView = false, isLoading, form, @@ -188,7 +180,6 @@ const StepAboutRuleComponent: FC = ({ dataTestSubj: 'detectionEngineStepAboutRuleRiskScore', idAria: 'detectionEngineStepAboutRuleRiskScore', isDisabled: isLoading || indexPatternLoading, - isActive, indices: indexPattern, }} /> diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/pages/rule_creation/index.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/pages/rule_creation/index.tsx index a711ab11e0b16c..3700b09c0067a1 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/pages/rule_creation/index.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/pages/rule_creation/index.tsx @@ -596,7 +596,6 @@ const CreateRulePageComponent: React.FC = () => { dataViewId={defineStepData.dataViewId} timestampOverride={aboutStepData.timestampOverride} isLoading={isCreateRuleLoading || loading} - isActive={activeStep === RuleStep.aboutRule} form={aboutStepForm} esqlQuery={esqlQueryForAboutStep} /> diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/pages/rule_editing/index.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/pages/rule_editing/index.tsx index d5933f6e6fdd66..ff96fd64f027f8 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/pages/rule_editing/index.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/pages/rule_editing/index.tsx @@ -287,7 +287,6 @@ const EditRulePageComponent: FC<{ rule: RuleResponse }> = ({ rule }) => { { }); step('Filter by Frequency', async () => { - const frequencyFilter = page.locator('.euiFilterButton__textShift', { hasText: 'Frequency' }); + const frequencyFilter = page.locator('.euiFilterButton__text', { hasText: 'Frequency' }); const fiveMinuteScheduleOption = page.getByText('Every 5 minutes').first(); await frequencyFilter.click(); diff --git a/x-pack/plugins/threat_intelligence/public/modules/indicators/components/flyout/fields_table.tsx b/x-pack/plugins/threat_intelligence/public/modules/indicators/components/flyout/fields_table.tsx index b6ca2ab9d47fbe..157eb42ec7ff65 100644 --- a/x-pack/plugins/threat_intelligence/public/modules/indicators/components/flyout/fields_table.tsx +++ b/x-pack/plugins/threat_intelligence/public/modules/indicators/components/flyout/fields_table.tsx @@ -15,7 +15,7 @@ import { IndicatorValueActions } from './indicator_value_actions'; export interface IndicatorFieldsTableProps { fields: string[]; indicator: Indicator; - search: EuiInMemoryTableProps['search']; + search: EuiInMemoryTableProps['search']; ['data-test-subj']?: string; } @@ -59,13 +59,16 @@ export const IndicatorFieldsTable: VFC = ({ }, ], }, + // @ts-expect-error - EuiBasicTable wants an array of objects, but will accept strings if coerced ] as Array>, [indicator, dataTestSubj] ); return ( { +export interface Criteria { page?: { index: number; size: number; @@ -23,14 +23,14 @@ export interface Criteria { direction: Direction; }; } -export interface CriteriaWithPagination extends Criteria { +export interface CriteriaWithPagination extends Criteria { page: { index: number; size: number; }; } -interface AnalyticsBasicTableSettings { +interface AnalyticsBasicTableSettings { pageIndex: number; pageSize: number; totalItemCount: number; @@ -39,13 +39,13 @@ interface AnalyticsBasicTableSettings { sortDirection: Direction; } -interface UseTableSettingsReturnValue { +interface UseTableSettingsReturnValue { onTableChange: EuiBasicTableProps['onChange']; pagination: Pagination; sorting: { sort: PropertySort }; } -export function useTableSettings( +export function useTableSettings( sortByField: keyof TypeOfItem, items: TypeOfItem[] ): UseTableSettingsReturnValue { diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index 70a03cb0f755aa..7d00d772784e68 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -572,7 +572,6 @@ "core.euiComboBoxOptionsList.delimiterMessage": "Ajouter les éléments en les séparant par {delimiter}", "core.euiComboBoxOptionsList.noMatchingOptions": "{searchValue} ne correspond à aucune option", "core.euiComboBoxPill.removeSelection": "Retirer {children} de la sélection de ce groupe", - "core.euiControlBar.customScreenReaderAnnouncement": "Il y a un nouveau repère de région appelé {landmarkHeading} avec des commandes de niveau de page à la fin du document.", "core.euiDataGrid.ariaLabel": "{label} ; page {page} sur {pageCount}.", "core.euiDataGrid.ariaLabelledBy": "Page {page} sur {pageCount}.", "core.euiDataGridCell.position": "{columnId}, colonne {col}, ligne {row}", @@ -587,13 +586,6 @@ "core.euiFilterButton.filterBadgeActiveAriaLabel": "{count} filtres actifs", "core.euiFilterButton.filterBadgeAvailableAriaLabel": "{count} filtres disponibles", "core.euiMarkdownEditorFooter.supportedFileTypes": "Fichiers pris en charge : {supportedFileTypes}", - "core.euiNotificationEventMessages.accordionAriaLabelButtonText": "+ {messagesLength} messages pour {eventName}", - "core.euiNotificationEventMessages.accordionButtonText": "+ {messagesLength} en plus", - "core.euiNotificationEventMeta.contextMenuButton": "Menu pour {eventName}", - "core.euiNotificationEventReadButton.markAsReadAria": "Marquer {eventName} comme lu", - "core.euiNotificationEventReadButton.markAsUnreadAria": "Marquer {eventName} comme non lu", - "core.euiNotificationEventReadIcon.readAria": "{eventName} lu", - "core.euiNotificationEventReadIcon.unreadAria": "{eventName} non lu", "core.euiPagination.firstRangeAriaLabel": "Ignorer les pages 2 à {lastPage}", "core.euiPagination.lastRangeAriaLabel": "Ignorer les pages {firstPage} à {lastPage}", "core.euiPagination.pageOfTotalCompressed": "{page} de {total}", @@ -727,8 +719,6 @@ "core.euiComboBoxOptionsList.loadingOptions": "Options de chargement", "core.euiComboBoxOptionsList.noAvailableOptions": "Aucune option n’est disponible.", "core.euiCommonlyUsedTimeRanges.legend": "Couramment utilisées", - "core.euiControlBar.screenReaderAnnouncement": "Il y a un nouveau repère de région avec des commandes de niveau de page à la fin du document.", - "core.euiControlBar.screenReaderHeading": "Commandes de niveau de page", "core.euiDataGrid.screenReaderNotice": "Cette cellule contient du contenu interactif.", "core.euiDataGridCellActions.expandButtonTitle": "Cliquez ou appuyez sur Entrée pour interagir avec le contenu de la cellule.", "core.euiDataGridHeaderCell.actionsPopoverScreenReaderText": "Pour naviguer dans la liste des actions de la colonne, appuyez sur la touche Tab ou sur les flèches vers le haut et vers le bas.", @@ -835,11 +825,6 @@ "core.euiMarkdownEditorToolbar.editor": "Éditeur", "core.euiMarkdownEditorToolbar.previewMarkdown": "Aperçu", "core.euiModal.closeModal": "Ferme cette fenêtre modale.", - "core.euiNotificationEventMessages.accordionHideText": "masquer", - "core.euiNotificationEventReadButton.markAsRead": "Marquer comme lu", - "core.euiNotificationEventReadButton.markAsUnread": "Marquer comme non lu", - "core.euiNotificationEventReadIcon.read": "Lire", - "core.euiNotificationEventReadIcon.unread": "Non lu", "core.euiPagination.collection": "collection", "core.euiPagination.fromEndLabel": "à partir de la fin", "core.euiPagination.last": "Dernier", @@ -20152,7 +20137,6 @@ "xpack.infra.homePage.noMetricsIndicesInstructionsActionLabel": "Voir les instructions de configuration", "xpack.infra.homePage.settingsTabTitle": "Paramètres", "xpack.infra.homePage.tellUsWhatYouThinkK8sLink": "Dites-nous ce que vous pensez ! (K8s)", - "xpack.observabilityShared.featureFeedbackButton.tellUsWhatYouThinkLink": "Dites-nous ce que vous pensez !", "xpack.infra.homePage.toolbar.kqlSearchFieldPlaceholder": "Rechercher des données d'infrastructure… (par exemple host.name:host-1)", "xpack.infra.hostFlyout.explainProcessMessageTitle": "Quel est ce processus ?", "xpack.infra.hosts.searchPlaceholder": "Rechercher dans les hôtes (par ex. cloud.provider:gcp AND system.load.1 > 0.5)", @@ -20946,6 +20930,47 @@ "xpack.infra.waffle.unableToSelectMetricErrorTitle": "Impossible de sélectionner les options ou la valeur pour l'indicateur.", "xpack.infra.waffleTime.autoRefreshButtonLabel": "Actualisation automatique", "xpack.infra.waffleTime.stopRefreshingButtonLabel": "Arrêter l'actualisation", + "xpack.observabilityShared.featureFeedbackButton.tellUsWhatYouThinkLink": "Dites-nous ce que vous pensez !", + "xpack.observabilityShared.inspector.stats.queryTimeValue": "{queryTime} ms", + "xpack.observabilityShared.breadcrumbs.observabilityLinkText": "Observabilité", + "xpack.observabilityShared.inspector.stats.dataViewDescription": "La vue de données qui se connecte aux index Elasticsearch.", + "xpack.observabilityShared.inspector.stats.dataViewLabel": "Vue de données", + "xpack.observabilityShared.inspector.stats.hitsDescription": "Le nombre de documents renvoyés par la requête.", + "xpack.observabilityShared.inspector.stats.hitsLabel": "Résultats", + "xpack.observabilityShared.inspector.stats.hitsTotalDescription": "Le nombre de documents correspondant à la requête.", + "xpack.observabilityShared.inspector.stats.hitsTotalLabel": "Résultats (total)", + "xpack.observabilityShared.inspector.stats.kibanaApiQueryParametersDescription": "Les paramètres de requête utilisés dans la requête d'API Kibana à l'origine de la requête Elasticsearch.", + "xpack.observabilityShared.inspector.stats.kibanaApiQueryParametersLabel": "Paramètres de requête d'API Kibana", + "xpack.observabilityShared.inspector.stats.kibanaApiRouteDescription": "Le chemin de la requête d'API Kibana à l'origine de la requête Elasticsearch.", + "xpack.observabilityShared.inspector.stats.kibanaApiRouteLabel": "Chemin de l’API Kibana", + "xpack.observabilityShared.inspector.stats.queryTimeDescription": "Le temps qu'il a fallu pour traiter la requête. Ne comprend pas le temps nécessaire pour envoyer la requête ni l'analyser dans le navigateur.", + "xpack.observabilityShared.inspector.stats.queryTimeLabel": "Durée de la requête", + "xpack.observabilityShared.navigation.betaBadge": "Bêta", + "xpack.observabilityShared.navigation.experimentalBadgeLabel": "Version d'évaluation technique", + "xpack.observabilityShared.navigation.newBadge": "NOUVEAUTÉ", + "xpack.observabilityShared.pageLayout.sideNavTitle": "Observabilité", + "xpack.observabilityShared.sectionLink.newLabel": "Nouveauté", + "xpack.observabilityShared.technicalPreviewBadgeDescription": "Cette fonctionnalité est en version d'évaluation technique et pourra être modifiée ou retirée complètement dans une future version. Elastic s'efforcera au maximum de corriger tout problème, mais les fonctionnalités en version d'évaluation technique ne sont pas soumises aux accords de niveau de service d'assistance des fonctionnalités officielles en disponibilité générale.", + "xpack.observabilityShared.technicalPreviewBadgeLabel": "Version d'évaluation technique", + "xpack.observabilityShared.tour.alertsStep.imageAltText": "Démonstration des alertes", + "xpack.observabilityShared.tour.alertsStep.tourContent": "Définissez et détectez les conditions qui déclenchent des alertes avec des intégrations de plateformes tierces comme l’e-mail, PagerDuty et Slack.", + "xpack.observabilityShared.tour.alertsStep.tourTitle": "Soyez informé en cas de modification", + "xpack.observabilityShared.tour.endButtonLabel": "Terminer la visite", + "xpack.observabilityShared.tour.guidedSetupStep.tourContent": "La façon la plus facile de continuer avec Elastic Observability est de suivre les prochaines étapes recommandées dans l'assistant de données.", + "xpack.observabilityShared.tour.guidedSetupStep.tourTitle": "Toujours plus avec Elastic Observability", + "xpack.observabilityShared.tour.metricsExplorerStep.imageAltText": "Démonstration de Metrics Explorer", + "xpack.observabilityShared.tour.metricsExplorerStep.tourContent": "Diffusez, regroupez et visualisez les mesures provenant de vos systèmes, du cloud, du réseau et d'autres sources d'infrastructure.", + "xpack.observabilityShared.tour.metricsExplorerStep.tourTitle": "Monitorer l’intégrité de votre infrastructure", + "xpack.observabilityShared.tour.nextButtonLabel": "Suivant", + "xpack.observabilityShared.tour.observabilityOverviewStep.tourContent": "Faites un tour rapide pour découvrir les avantages de disposer de toutes vos données d'observabilité dans une seule suite.", + "xpack.observabilityShared.tour.observabilityOverviewStep.tourTitle": "Bienvenue dans Elastic Observability", + "xpack.observabilityShared.tour.servicesStep.imageAltText": "Démonstration des services", + "xpack.observabilityShared.tour.servicesStep.tourContent": "Détectez et réparez rapidement les problèmes de performances en recueillant des informations détaillées sur vos services.", + "xpack.observabilityShared.tour.servicesStep.tourTitle": "Identifier et résoudre les problèmes d'application", + "xpack.observabilityShared.tour.skipButtonLabel": "Ignorer la visite", + "xpack.observabilityShared.tour.streamStep.imageAltText": "Démonstration du flux de logs", + "xpack.observabilityShared.tour.streamStep.tourContent": "Surveillez, filtrez et inspectez les événements de journal provenant de vos applications, serveurs, machines virtuelles et conteneurs.", + "xpack.observabilityShared.tour.streamStep.tourTitle": "Suivi de vos logs en temps réel", "xpack.metricsData.assetDetails.formulas.cpuUsage": "Utilisation CPU", "xpack.metricsData.assetDetails.formulas.cpuUsage.iowaitLabel": "iowait", "xpack.metricsData.assetDetails.formulas.cpuUsage.irqLabel": "irq", @@ -21915,53 +21940,6 @@ "xpack.lens.xyVisualization.dataTypeFailureXShort": "Type de données incorrect pour {axis}.", "xpack.lens.xyVisualization.dataTypeFailureYLong": "La dimension {label} fournie pour {axis} possède un type de données incorrect. Un nombre est attendu, mais {dataType} trouvé", "xpack.lens.xyVisualization.dataTypeFailureYShort": "Type de données incorrect pour {axis}.", - "lensFormulaDocs.tinymath.absFunction.markdown": "\nCalcule une valeur absolue. Une valeur négative est multipliée par -1, une valeur positive reste identique.\n\nExemple : calculer la distance moyenne par rapport au niveau de la mer \"abs(average(altitude))\"\n ", - "lensFormulaDocs.tinymath.addFunction.markdown": "\nAjoute jusqu'à deux nombres.\nFonctionne également avec le symbole \"+\".\n\nExemple : calculer la somme de deux champs\n\n\"sum(price) + sum(tax)\"\n\nExemple : compenser le compte par une valeur statique\n\n\"add(count(), 5)\"\n ", - "lensFormulaDocs.tinymath.cbrtFunction.markdown": "\nÉtablit la racine carrée de la valeur.\n\nExemple : calculer la longueur du côté à partir du volume\n`cbrt(last_value(volume))`\n ", - "lensFormulaDocs.tinymath.ceilFunction.markdown": "\nArrondit le plafond de la valeur au chiffre supérieur.\n\nExemple : arrondir le prix au dollar supérieur\n`ceil(sum(price))`\n ", - "lensFormulaDocs.tinymath.clampFunction.markdown": "\nÉtablit une limite minimale et maximale pour la valeur.\n\nExemple : s'assurer de repérer les valeurs aberrantes\n```\nclamp(\n average(bytes),\n percentile(bytes, percentile=5),\n percentile(bytes, percentile=95)\n)\n```\n", - "lensFormulaDocs.tinymath.cubeFunction.markdown": "\nCalcule le cube d'un nombre.\n\nExemple : calculer le volume à partir de la longueur du côté\n`cube(last_value(length))`\n ", - "lensFormulaDocs.tinymath.defaultFunction.markdown": "\nRetourne une valeur numérique par défaut lorsque la valeur est nulle.\n\nExemple : Retourne -1 lorsqu'un champ ne contient aucune donnée.\n\"defaults(average(bytes), -1)\"\n", - "lensFormulaDocs.tinymath.divideFunction.markdown": "\nDivise le premier nombre par le deuxième.\nFonctionne également avec le symbole \"/\".\n\nExemple : calculer la marge bénéficiaire\n\"sum(profit) / sum(revenue)\"\n\nExemple : \"divide(sum(bytes), 2)\"\n ", - "lensFormulaDocs.tinymath.eqFunction.markdown": "\nEffectue une comparaison d'égalité entre deux valeurs.\nÀ utiliser en tant que condition pour la fonction de comparaison \"ifelse\".\nFonctionne également avec le symbole \"==\".\n\nExemple : Retourne \"true\" si la moyenne d'octets est égale à la quantité de mémoire moyenne.\n\"average(bytes) == average(memory)\"\n\nExemple : \"eq(sum(bytes), 1000000)\"\n ", - "lensFormulaDocs.tinymath.expFunction.markdown": "\nÉlève *e* à la puissance n.\n\nExemple : calculer la fonction exponentielle naturelle\n\n`exp(last_value(duration))`\n ", - "lensFormulaDocs.tinymath.fixFunction.markdown": "\nPour les valeurs positives, part du bas. Pour les valeurs négatives, part du haut.\n\nExemple : arrondir à zéro\n\"fix(sum(profit))\"\n ", - "lensFormulaDocs.tinymath.floorFunction.markdown": "\nArrondit à la valeur entière inférieure la plus proche.\n\nExemple : arrondir un prix au chiffre inférieur\n\"floor(sum(price))\"\n ", - "lensFormulaDocs.tinymath.gteFunction.markdown": "\nEffectue une comparaison de supériorité entre deux valeurs.\nÀ utiliser en tant que condition pour la fonction de comparaison \"ifelse\".\nFonctionne également avec le symbole \">=\".\n\nExemple : Retourne \"true\" si la moyenne d'octets est supérieure ou égale à la quantité moyenne de mémoire.\n\"average(bytes) >= average(memory)\"\n\nExemple : \"gte(average(bytes), 1000)\"\n ", - "lensFormulaDocs.tinymath.gtFunction.markdown": "\nEffectue une comparaison de supériorité entre deux valeurs.\nÀ utiliser en tant que condition pour la fonction de comparaison \"ifelse\".\nFonctionne également avec le symbole \">\".\n\nExemple : Retourne \"true\" si la moyenne d'octets est supérieure à la quantité moyenne de mémoire.\n\"average(bytes) > average(memory)\"\n\nExemple : \"gt(average(bytes), 1000)\"\n ", - "lensFormulaDocs.tinymath.ifElseFunction.markdown": "\nRetourne une valeur selon si l'élément de condition est \"true\" ou \"false\".\n\nExemple : Revenus moyens par client, mais dans certains cas, l'ID du client n'est pas fourni, et le client est alors compté comme client supplémentaire.\n`sum(total)/(unique_count(customer_id) + ifelse( count() > count(kql='customer_id:*'), 1, 0))`\n ", - "lensFormulaDocs.tinymath.logFunction.markdown": "\nÉtablit un logarithme avec base optionnelle. La base naturelle *e* est utilisée par défaut.\n\nExemple : calculer le nombre de bits nécessaire au stockage de valeurs\n```\nlog(sum(bytes))\nlog(sum(bytes), 2)\n```\n ", - "lensFormulaDocs.tinymath.lteFunction.markdown": "\nEffectue une comparaison d'infériorité ou de supériorité entre deux valeurs.\nÀ utiliser en tant que condition pour la fonction de comparaison \"ifelse\".\nFonctionne également avec le symbole \"<=\".\n\nExemple : Retourne \"true\" si la moyenne d'octets est inférieure ou égale à la quantité moyenne de mémoire.\n\"average(bytes) <= average(memory)\"\n\nExemple : \"lte(average(bytes), 1000)\"\n ", - "lensFormulaDocs.tinymath.ltFunction.markdown": "\nEffectue une comparaison d'infériorité entre deux valeurs.\nÀ utiliser en tant que condition pour la fonction de comparaison \"ifelse\".\nFonctionne également avec le symbole \"<\".\n\nExemple : Retourne \"true\" si la moyenne d'octets est inférieure à la quantité moyenne de mémoire.\n\"average(bytes) <= average(memory)\"\n\nExemple : \"lt(average(bytes), 1000)\"\n ", - "lensFormulaDocs.tinymath.maxFunction.markdown": "\nTrouve la valeur maximale entre deux nombres.\n\nExemple : Trouver le maximum entre deux moyennes de champs\n\"pick_max(average(bytes), average(memory))\"\n ", - "lensFormulaDocs.tinymath.minFunction.markdown": "\nTrouve la valeur minimale entre deux nombres.\n\nExemple : Trouver le minimum entre deux moyennes de champs\n`pick_min(average(bytes), average(memory))`\n ", - "lensFormulaDocs.tinymath.modFunction.markdown": "\nÉtablit le reste après division de la fonction par un nombre.\n\nExemple : calculer les trois derniers chiffres d'une valeur\n\"mod(sum(price), 1000)\"\n ", - "lensFormulaDocs.tinymath.multiplyFunction.markdown": "\nMultiplie deux nombres.\nFonctionne également avec le symbole \"*\".\n\nExemple : calculer le prix après application du taux d'imposition courant\n`sum(bytes) * last_value(tax_rate)`\n\nExemple : calculer le prix après application du taux d'imposition constant\n\"multiply(sum(price), 1.2)\"\n ", - "lensFormulaDocs.tinymath.powFunction.markdown": "\nÉlève la valeur à une puissance spécifique. Le deuxième argument est obligatoire.\n\nExemple : calculer le volume en fonction de la longueur du côté\n\"pow(last_value(length), 3)\"\n ", - "lensFormulaDocs.tinymath.roundFunction.markdown": "\nArrondit à un nombre donné de décimales, 0 étant la valeur par défaut.\n\nExemples : arrondir au centième\n```\nround(sum(bytes))\nround(sum(bytes), 2)\n```\n ", - "lensFormulaDocs.tinymath.sqrtFunction.markdown": "\nÉtablit la racine carrée d'une valeur positive uniquement.\n\nExemple : calculer la longueur du côté en fonction de la surface\n`sqrt(last_value(area))`\n ", - "lensFormulaDocs.tinymath.squareFunction.markdown": "\nÉlève la valeur à la puissance 2.\n\nExemple : calculer l’aire en fonction de la longueur du côté\n`square(last_value(length))`\n ", - "lensFormulaDocs.tinymath.subtractFunction.markdown": "\nSoustrait le premier nombre du deuxième.\nFonctionne également avec le symbole \"-\".\n\nExemple : calculer la plage d'un champ\n\"subtract(max(bytes), min(bytes))\"\n ", - "lensFormulaDocs.documentation.filterRatioDescription.markdown": "### Rapport de filtre :\n\nUtilisez \"kql=''\" pour filtrer un ensemble de documents et le comparer à d'autres documents du même regroupement.\nPar exemple, pour consulter l'évolution du taux d'erreur au fil du temps :\n\n```\ncount(kql='response.status_code > 400') / count()\n```\n ", - "lensFormulaDocs.documentation.percentOfTotalDescription.markdown": "### Pourcentage du total\n\nLes formules peuvent calculer \"overall_sum\" pour tous les regroupements,\nce qui permet de convertir chaque regroupement en un pourcentage du total :\n\n```\nsum(products.base_price) / overall_sum(sum(products.base_price))\n```\n ", - "lensFormulaDocs.documentation.recentChangeDescription.markdown": "### Modification récente\n\nUtilisez \"reducedTimeRange='30m'\" pour ajouter un filtre supplémentaire sur la plage temporelle d'un indicateur aligné avec la fin d'une plage temporelle globale. Vous pouvez l'utiliser pour calculer le degré de modification récente d'une valeur.\n\n```\nmax(system.network.in.bytes, reducedTimeRange=\"30m\")\n - min(system.network.in.bytes, reducedTimeRange=\"30m\")\n```\n ", - "lensFormulaDocs.documentation.weekOverWeekDescription.markdown": "### Semaine après semaine :\n\nUtilisez \"shift='1w'\" pour obtenir la valeur de chaque regroupement\nde la semaine précédente. Le décalage ne doit pas être utilisé avec la fonction *Valeurs les plus élevées*.\n\n```\npercentile(system.network.in.bytes, percentile=99) /\npercentile(system.network.in.bytes, percentile=99, shift='1w')\n```\n ", - "lensFormulaDocs.cardinality.documentation.markdown": "\nCalcule le nombre de valeurs uniques d'un champ donné. Fonctionne pour les nombres, les chaînes, les dates et les valeurs booléennes.\n\nExemple : calculer le nombre de produits différents :\n`unique_count(product.name)`\n\nExemple : calculer le nombre de produits différents du groupe \"clothes\" :\n\"unique_count(product.name, kql='product.group=clothes')\"\n ", - "lensFormulaDocs.count.documentation.markdown": "\nNombre total de documents. Lorsque vous fournissez un champ, le nombre total de valeurs de champ est compté. Lorsque vous utilisez la fonction de décompte pour les champs qui comportent plusieurs valeurs dans un même document, toutes les valeurs sont comptées.\n\n#### Exemples\n\nPour calculer le nombre total de documents, utilisez `count()`.\n\nPour calculer le nombre de produits, utilisez `count(products.id)`.\n\nPour calculer le nombre de documents qui correspondent à un filtre donné, utilisez `count(kql='price > 500')`.\n ", - "lensFormulaDocs.counterRate.documentation.markdown": "\nCalcule le taux d'un compteur toujours croissant. Cette fonction renvoie uniquement des résultats utiles inhérents aux champs d'indicateurs de compteur qui contiennent une mesure quelconque à croissance régulière.\nSi la valeur diminue, elle est interprétée comme une mesure de réinitialisation de compteur. Pour obtenir des résultats plus précis, \"counter_rate\" doit être calculé d’après la valeur \"max\" du champ.\n\nCe calcul est réalisé séparément pour des séries distinctes définies par des filtres ou des dimensions de valeurs supérieures.\nIl utilise l'intervalle en cours utilisé dans la formule.\n\nExemple : visualiser le taux d'octets reçus au fil du temps par un serveur Memcached :\n`counter_rate(max(memcached.stats.read.bytes))`\n ", - "lensFormulaDocs.cumulativeSum.documentation.markdown": "\nCalcule la somme cumulée d'un indicateur au fil du temps, en ajoutant toutes les valeurs précédentes d'une série à chaque valeur. Pour utiliser cette fonction, vous devez également configurer une dimension de l'histogramme de dates.\n\nCe calcul est réalisé séparément pour des séries distinctes définies par des filtres ou des dimensions de valeurs supérieures.\n\nExemple : visualiser les octets reçus cumulés au fil du temps :\n`cumulative_sum(sum(bytes))`\n ", - "lensFormulaDocs.differences.documentation.markdown": "\nCalcule la différence par rapport à la dernière valeur d'un indicateur au fil du temps. Pour utiliser cette fonction, vous devez également configurer une dimension de l'histogramme de dates.\nLes données doivent être séquentielles pour les différences. Si vos données sont vides lorsque vous utilisez des différences, essayez d'augmenter l'intervalle de l'histogramme de dates.\n\nCe calcul est réalisé séparément pour des séries distinctes définies par des filtres ou des dimensions de valeurs supérieures.\n\nExemple : visualiser la modification des octets reçus au fil du temps :\n`differences(sum(bytes))`\n ", - "lensFormulaDocs.lastValue.documentation.markdown": "\nRenvoie la valeur d'un champ du dernier document, triée par le champ d'heure par défaut de la vue de données.\n\nCette fonction permet de récupérer le dernier état d'une entité.\n\nExemple : obtenir le statut actuel du serveur A :\n`last_value(server.status, kql='server.name=\"A\"')`\n ", - "lensFormulaDocs.metric.documentation.markdown": "\nRenvoie l'indicateur {metric} d'un champ. Cette fonction fonctionne uniquement pour les champs numériques.\n\nExemple : obtenir l'indicateur {metric} d'un prix :\n\"{metric}(price)\"\n\nExemple : obtenir l'indicateur {metric} d'un prix pour des commandes du Royaume-Uni :\n\"{metric}(price, kql='location:UK')\"\n ", - "lensFormulaDocs.movingAverage.documentation.markdown": "\nCalcule la moyenne mobile d'un indicateur au fil du temps, en prenant la moyenne des n dernières valeurs pour calculer la valeur actuelle. Pour utiliser cette fonction, vous devez également configurer une dimension de l'histogramme de dates.\nLa valeur de fenêtre par défaut est {defaultValue}.\n\nCe calcul est réalisé séparément pour des séries distinctes définies par des filtres ou des dimensions de valeurs supérieures.\n\nPrend un paramètre nommé \"window\" qui spécifie le nombre de dernières valeurs à inclure dans le calcul de la moyenne de la valeur actuelle.\n\nExemple : lisser une ligne de mesures :\n`moving_average(sum(bytes), window=5)`\n ", - "lensFormulaDocs.overall_average.documentation.markdown": "\nCalcule la moyenne d'un indicateur pour tous les points de données d'une série dans le graphique actuel. Une série est définie par une dimension à l'aide d'un histogramme de dates ou d'une fonction d'intervalle.\nD'autres dimensions permettant de répartir les données telles que les valeurs supérieures ou les filtres sont traitées en tant que séries distinctes.\n\nSi le graphique actuel n'utilise aucun histogramme de dates ou aucune fonction d'intervalle, \"overall_average\" calcule la moyenne pour toutes les dimensions, quelle que soit la fonction utilisée.\n\nExemple : écart par rapport à la moyenne :\n\"sum(bytes) - overall_average(sum(bytes))\"\n ", - "lensFormulaDocs.overall_max.documentation.markdown": "\nCalcule la valeur maximale d'un indicateur pour tous les points de données d'une série dans le graphique actuel. Une série est définie par une dimension à l'aide d'un histogramme de dates ou d'une fonction d'intervalle.\nD'autres dimensions permettant de répartir les données telles que les valeurs supérieures ou les filtres sont traitées en tant que séries distinctes.\n\nSi le graphique actuel n'utilise aucun histogramme de dates ou aucune fonction d'intervalle, \"overall_max\" calcule la valeur maximale pour toutes les dimensions, quelle que soit la fonction utilisée.\n\nExemple : pourcentage de plage\n\"(sum(bytes) - overall_min(sum(bytes))) / (overall_max(sum(bytes)) - overall_min(sum(bytes)))\"\n ", - "lensFormulaDocs.overall_min.documentation.markdown": "\nCalcule la valeur minimale d'un indicateur pour tous les points de données d'une série dans le graphique actuel. Une série est définie par une dimension à l'aide d'un histogramme de dates ou d'une fonction d'intervalle.\nD'autres dimensions permettant de répartir les données telles que les valeurs supérieures ou les filtres sont traitées en tant que séries distinctes.\n\nSi le graphique actuel n'utilise aucun histogramme de dates ou aucune fonction d'intervalle, \"overall_min\" calcule la valeur minimale pour toutes les dimensions, quelle que soit la fonction utilisée.\n\nExemple : pourcentage de plage\n\"(sum(bytes) - overall_min(sum(bytes)) / (overall_max(sum(bytes)) - overall_min(sum(bytes)))\"\n ", - "lensFormulaDocs.overall_sum.documentation.markdown": "\nCalcule la somme d'un indicateur pour tous les points de données d'une série dans le graphique actuel. Une série est définie par une dimension à l'aide d'un histogramme de dates ou d'une fonction d'intervalle.\nD'autres dimensions permettant de répartir les données telles que les valeurs supérieures ou les filtres sont traitées en tant que séries distinctes.\n\nSi le graphique actuel n'utilise aucun histogramme de dates ou aucune fonction d'intervalle, \"overall_sum\" calcule la somme pour toutes les dimensions, quelle que soit la fonction utilisée.\n\nExemple : pourcentage de total\n\"sum(bytes) / overall_sum(sum(bytes))\"\n ", - "lensFormulaDocs.percentile.documentation.markdown": "\nRenvoie le centile spécifié des valeurs d'un champ. Il s'agit de la valeur de n pour cent des valeurs présentes dans les documents.\n\nExemple : obtenir le nombre d'octets supérieurs à 95 % des valeurs :\n`percentile(bytes, percentile=95)`\n ", - "lensFormulaDocs.percentileRanks.documentation.markdown": "\nRetourne le pourcentage de valeurs qui sont en dessous d'une certaine valeur. Par exemple, si une valeur est supérieure à 95 % des valeurs observées, elle est placée au 95e rang centile.\n\nExemple : Obtenir le pourcentage de valeurs qui sont en dessous de 100 :\n\"percentile_rank(bytes, value=100)\"\n ", - "lensFormulaDocs.standardDeviation.documentation.markdown": "\nRetourne la taille de la variation ou de la dispersion du champ. Cette fonction ne s’applique qu’aux champs numériques.\n\n#### Exemples\n\nPour obtenir l'écart type d'un prix, utilisez standard_deviation(price).\n\nPour obtenir la variance du prix des commandes passées au Royaume-Uni, utilisez `square(standard_deviation(price, kql='location:UK'))`.\n ", - "lensFormulaDocs.time_scale.documentation.markdown": "\n\nCette fonction avancée est utile pour normaliser les comptes et les sommes sur un intervalle de temps spécifique. Elle permet l'intégration avec les indicateurs qui sont stockés déjà normalisés sur un intervalle de temps spécifique.\n\nVous pouvez faire appel à cette fonction uniquement si une fonction d'histogramme des dates est utilisée dans le graphique actuel.\n\nExemple : Un rapport comparant un indicateur déjà normalisé à un autre indicateur devant être normalisé.\n\"normalize_by_unit(counter_rate(max(system.diskio.write.bytes)), unit='s') / last_value(apache.status.bytes_per_second)\"\n ", "xpack.lens.AggBasedLabel": "visualisation basée sur l'agrégation", "xpack.lens.app.addToLibrary": "Enregistrer dans la bibliothèque", "xpack.lens.app.cancel": "Annuler", @@ -22139,11 +22117,6 @@ "xpack.lens.fittingFunctionsTitle.lookahead": "Suivant", "xpack.lens.fittingFunctionsTitle.none": "Masquer", "xpack.lens.fittingFunctionsTitle.zero": "Zéro", - "lensFormulaDocs.tinymath.base": "base", - "lensFormulaDocs.boolean": "booléen", - "lensFormulaDocs.tinymath.condition": "condition", - "lensFormulaDocs.tinymath.decimals": "décimales", - "lensFormulaDocs.tinymath.defaultValue": "par défaut", "xpack.lens.formula.disableWordWrapLabel": "Désactiver le renvoi à la ligne des mots", "xpack.lens.formula.editorHelpInlineHideLabel": "Masquer la référence des fonctions", "xpack.lens.formula.editorHelpInlineHideToolTip": "Masquer la référence des fonctions", @@ -22151,35 +22124,12 @@ "xpack.lens.formula.fullScreenEnterLabel": "Développer", "xpack.lens.formula.fullScreenExitLabel": "Réduire", "xpack.lens.formula.kqlExtraArguments": "[kql]?: string, [lucene]?: string", - "lensFormulaDocs.tinymath.left": "gauche", - "lensFormulaDocs.tinymath.max": "max", - "lensFormulaDocs.tinymath.min": "min", - "lensFormulaDocs.number": "numéro", "xpack.lens.formula.reducedTimeRangeExtraArguments": "[reducedTimeRange]?: string", "xpack.lens.formula.requiredArgument": "Obligatoire", - "lensFormulaDocs.tinymath.right": "droite", "xpack.lens.formula.shiftExtraArguments": "[shift]?: string", - "lensFormulaDocs.string": "chaîne", - "lensFormulaDocs.tinymath.value": "valeur", - "lensFormulaDocs.CommonFormulaDocumentation": "Les formules les plus courantes divisent deux valeurs pour produire un pourcentage. Pour obtenir un affichage correct, définissez \"Format de valeur\" sur \"pourcent\".", - "lensFormulaDocs.documentation.columnCalculationSection": "Calculs de colonnes", - "lensFormulaDocs.documentation.columnCalculationSectionDescription": "Ces fonctions sont exécutées pour chaque ligne, mais elles sont fournies avec la colonne entière comme contexte. Elles sont également appelées fonctions de fenêtre.", - "lensFormulaDocs.documentation.comparisonSection": "Comparaison", - "lensFormulaDocs.documentation.comparisonSectionDescription": "Ces fonctions sont utilisées pour effectuer une comparaison de valeurs.", - "lensFormulaDocs.documentation.constantsSection": "Contexte Kibana", - "lensFormulaDocs.documentation.constantsSectionDescription": "Ces fonctions sont utilisées pour récupérer des variables de contexte Kibana, c’est-à-dire l’histogramme de date \"interval\", le \"now\" actuel et le \"time_range\" sélectionné, et pour vous aider à faire des opérations mathématiques de dates.", - "lensFormulaDocs.documentation.elasticsearchSection": "Elasticsearch", - "lensFormulaDocs.documentation.elasticsearchSectionDescription": "Ces fonctions seront exécutées sur les documents bruts pour chaque ligne du tableau résultant, en agrégeant tous les documents correspondant aux dimensions de répartition en une seule valeur.", - "lensFormulaDocs.documentation.filterRatio": "Rapport de filtre", - "lensFormulaDocs.documentation.mathSection": "Mathématique", - "lensFormulaDocs.documentation.mathSectionDescription": "Ces fonctions seront exécutées pour chaque ligne du tableau résultant en utilisant des valeurs uniques de la même ligne calculées à l'aide d'autres fonctions.", - "lensFormulaDocs.documentation.percentOfTotal": "Pourcentage du total", - "lensFormulaDocs.documentation.recentChange": "Modification récente", - "lensFormulaDocs.documentation.weekOverWeek": "Semaine après semaine", "xpack.lens.formulaDocumentationHeading": "Fonctionnement", "xpack.lens.formulaEnableWordWrapLabel": "Activer le renvoi à la ligne des mots", "xpack.lens.formulaExampleMarkdown": "Exemples", - "lensFormulaDocs.frequentlyUsedHeading": "Formules courantes", "xpack.lens.formulaPlaceholderText": "Saisissez une formule en combinant des fonctions avec la fonction mathématique, telle que :", "xpack.lens.fullExtent.niceValues": "Arrondir aux valeurs de \"gentillesse\"", "xpack.lens.functions.collapse.args.byHelpText": "Colonnes selon lesquelles effectuer le regroupement - ces colonnes sont conservées telles quelles", @@ -22238,29 +22188,21 @@ "xpack.lens.indexPattern.allFieldsLabelHelp": "Glissez-déposez les champs disponibles dans l’espace de travail et créez des visualisations. Pour modifier les champs disponibles, sélectionnez une vue de données différente, modifiez vos requêtes ou utilisez une plage temporelle différente. Certains types de champ ne peuvent pas être visualisés dans Lens, y compris les champ de texte intégral et champs géographiques.", "xpack.lens.indexPattern.ascendingCountPrecisionErrorWarning.link": "veuillez consulter la documentation", "xpack.lens.indexPattern.availableFieldsLabel": "Champs disponibles", - "lensFormulaDocs.avg": "Moyenne", "xpack.lens.indexPattern.avg.description": "Agrégation d'indicateurs à valeur unique qui calcule la moyenne des valeurs numériques extraites des documents agrégés", "xpack.lens.indexPattern.avg.quickFunctionDescription": "Valeur moyenne d'un ensemble de champs de nombres.", "xpack.lens.indexPattern.bitsFormatLabel": "Bits (1000)", "xpack.lens.indexPattern.bytesFormatLabel": "Octets (1024)", - "lensFormulaDocs.cardinality": "Compte unique", "xpack.lens.indexPattern.cardinality.documentation.quick": "\nNombre de valeurs uniques pour un champ spécifié de nombre, de chaîne, de date ou booléen.\n ", - "lensFormulaDocs.cardinality.signature": "champ : chaîne", "xpack.lens.indexPattern.changeDataViewTitle": "Vue de données", "xpack.lens.indexPattern.chooseField": "Champ", "xpack.lens.indexPattern.chooseFieldLabel": "Pour utiliser cette fonction, sélectionnez un champ.", "xpack.lens.indexPattern.chooseSubFunction": "Choisir une sous-fonction", "xpack.lens.indexPattern.columnFormatLabel": "Format de valeur", "xpack.lens.indexPattern.compactLabel": "Valeurs compactes", - "lensFormulaDocs.count": "Décompte", "xpack.lens.indexPattern.count.documentation.quick": "\nNombre total de documents. Lorsque vous fournissez un champ, le nombre total de valeurs de champ est compté. Lorsque vous utilisez la fonction de décompte pour les champs qui comportent plusieurs valeurs dans un même document, toutes les valeurs sont comptées.\n ", - "lensFormulaDocs.count.signature": "[champ : chaîne]", "xpack.lens.indexPattern.counterRate": "Taux de compteur", "xpack.lens.indexPattern.counterRate.documentation.quick": "\n Taux de modification sur la durée d'un indicateur de série temporelle qui augmente sans cesse.\n ", - "lensFormulaDocs.counterRate.signature": "indicateur : nombre", "xpack.lens.indexPattern.countOf": "Nombre d'enregistrements", - "lensFormulaDocs.cumulative_sum.signature": "indicateur : nombre", - "lensFormulaDocs.cumulativeSum": "Somme cumulée", "xpack.lens.indexPattern.cumulativeSum.documentation.quick": "\n Somme de toutes les valeurs au fur et à mesure de leur croissance.\n ", "xpack.lens.indexPattern.custom.externalDoc": "Syntaxe de format numérique", "xpack.lens.indexPattern.custom.patternLabel": "Format", @@ -22290,9 +22232,7 @@ "xpack.lens.indexPattern.dateRange.noTimeRange": "L’intervalle de plage temporelle actuel n’est pas disponible", "xpack.lens.indexPattern.decimalPlacesLabel": "Décimales", "xpack.lens.indexPattern.defaultFormatLabel": "Par défaut", - "lensFormulaDocs.derivative": "Différences", "xpack.lens.indexPattern.differences.documentation.quick": "\n Variation entre les valeurs des intervalles suivants.\n ", - "lensFormulaDocs.differences.signature": "indicateur : nombre", "xpack.lens.indexPattern.dimensionEditor.headingAppearance": "Apparence", "xpack.lens.indexPattern.dimensionEditor.headingData": "Données", "xpack.lens.indexPattern.dimensionEditor.headingFormula": "Formule", @@ -22345,30 +22285,22 @@ "xpack.lens.indexPattern.invalidOperationLabel": "Ce champ ne fonctionne pas avec la fonction sélectionnée.", "xpack.lens.indexPattern.invalidReducedTimeRange": "Plage temporelle réduite non valide. Entrez un entier positif suivi par l'une des unités suivantes : s, m, h, d, w, M, y. Par exemple, 3h pour 3 heures", "xpack.lens.indexPattern.invalidTimeShift": "Décalage non valide. Entrez un entier positif suivi par l'une des unités suivantes : s, m, h, d, w, M, y. Par exemple, 3h pour 3 heures", - "lensFormulaDocs.lastValue": "Dernière valeur", "xpack.lens.indexPattern.lastValue.disabled": "Cette fonction requiert la présence d'un champ de date dans la vue de données.", "xpack.lens.indexPattern.lastValue.documentation.quick": "\nValeur d'un champ du dernier document, triée par le champ d'heure par défaut de la vue de données.\n ", "xpack.lens.indexPattern.lastValue.showArrayValues": "Afficher les valeurs de tableau", "xpack.lens.indexPattern.lastValue.showArrayValuesExplanation": "Affiche toutes les valeurs associées à ce champ dans chaque dernier document.", "xpack.lens.indexPattern.lastValue.showArrayValuesWithTopValuesWarning": "Lorsque vous affichez les valeurs de tableau, vous ne pouvez pas utiliser ce champ pour classer les valeurs les plus élevées.", - "lensFormulaDocs.lastValue.signature": "champ : chaîne", "xpack.lens.indexPattern.lastValue.sortField": "Trier par le champ de date", "xpack.lens.indexPattern.lastValue.sortFieldPlaceholder": "Champ de tri", - "lensFormulaDocs.max": "Maximum", "xpack.lens.indexPattern.max.description": "Agrégation d'indicateurs à valeur unique qui renvoie la valeur maximale des valeurs numériques extraites des documents agrégés.", "xpack.lens.indexPattern.max.quickFunctionDescription": "Valeur maximale d'un champ de nombre.", - "lensFormulaDocs.median": "Médiane", "xpack.lens.indexPattern.median.description": "Agrégation d'indicateurs à valeur unique qui calcule la valeur médiane des valeurs numériques extraites des documents agrégés.", "xpack.lens.indexPattern.median.quickFunctionDescription": "Valeur médiane d'un champ de nombre.", "xpack.lens.indexPattern.metaFieldsLabel": "Champs méta", - "lensFormulaDocs.metric.signature": "champ : chaîne", - "lensFormulaDocs.min": "Minimum", "xpack.lens.indexPattern.min.description": "Agrégation d'indicateurs à valeur unique qui renvoie la valeur minimale des valeurs numériques extraites des documents agrégés.", "xpack.lens.indexPattern.min.quickFunctionDescription": "Valeur minimale d'un champ de nombre.", "xpack.lens.indexPattern.missingFieldLabel": "Champ manquant", "xpack.lens.indexPattern.moveToWorkspaceNotAvailable": "Pour visualiser ce champ, veuillez l'ajouter directement au calque souhaité. L'ajout de ce champ à l'espace de travail n'est pas pris en charge avec votre configuration actuelle.", - "lensFormulaDocs.moving_average.signature": "indicateur : nombre, [window] : nombre", - "lensFormulaDocs.movingAverage": "Moyenne mobile", "xpack.lens.indexPattern.movingAverage.basicExplanation": "La moyenne mobile fait glisser une fenêtre sur les données et affiche la valeur moyenne. La moyenne mobile est prise en charge uniquement par les histogrammes des dates.", "xpack.lens.indexPattern.movingAverage.documentation.quick": "\n Moyenne d'une fenêtre mobile de valeurs sur la durée.\n ", "xpack.lens.indexPattern.movingAverage.limitations": "La première valeur de moyenne mobile commence au deuxième élément.", @@ -22384,20 +22316,12 @@ "xpack.lens.indexPattern.noRealMetricError": "Un calque uniquement doté de valeurs statiques n’affichera pas de résultats ; utilisez au moins un indicateur dynamique.", "xpack.lens.indexPattern.notAbsoluteTimeShift": "Décalage non valide.", "xpack.lens.indexPattern.numberFormatLabel": "Nombre", - "lensFormulaDocs.overall_metric": "indicateur : nombre", - "lensFormulaDocs.overallMax": "Max général", - "lensFormulaDocs.overallMin": "Min général", - "lensFormulaDocs.overallSum": "Somme générale", "xpack.lens.indexPattern.percentFormatLabel": "Pourcent", - "lensFormulaDocs.percentile": "Centile", "xpack.lens.indexPattern.percentile.documentation.quick": "\n La plus grande valeur qui est inférieure à n pour cent des valeurs présentes dans tous les documents.\n ", "xpack.lens.indexPattern.percentile.percentileRanksValue": "Valeur des rangs centiles", "xpack.lens.indexPattern.percentile.percentileValue": "Centile", - "lensFormulaDocs.percentile.signature": "champ : chaîne, [percentile] : nombre", - "lensFormulaDocs.percentileRank": "Rang centile", "xpack.lens.indexPattern.percentileRanks.documentation.quick": "\nPourcentage des valeurs inférieures à une valeur spécifique. Par exemple, lorsqu'une valeur est supérieure ou égale à 95 % des valeurs calculées, elle est placée au 95e rang centile.\n ", "xpack.lens.indexPattern.percentileRanks.errorMessage": "La valeur des rangs centiles doit être un nombre", - "lensFormulaDocs.percentileRanks.signature": "champ : chaîne, [valeur] : nombre", "xpack.lens.indexPattern.precisionErrorWarning.accuracyDisabled.shortMessage": "Il peut s'agit d'une approximation. Pour obtenir des résultats plus fins, vous pouvez activer le mode de précision, mais ce mode augmente la charge sur le cluster Elasticsearch.", "xpack.lens.indexPattern.precisionErrorWarning.accuracyEnabled.shortMessage": "Il peut s'agit d'une approximation. Pour obtenir des résultats plus fins, utilisez les filtres ou augmentez le nombre défini pour Valeurs les plus élevées.", "xpack.lens.indexPattern.precisionErrorWarning.ascendingCountPrecisionErrorWarning.shortMessage": "Il peut s'agir d'une valeur approximative selon la façon dont les données sont indexées. Pour obtenir des résultats plus fins, effectuez un tri par rareté.", @@ -22447,7 +22371,6 @@ "xpack.lens.indexPattern.samplingPerLayer.fallbackLayerName": "Calque de données", "xpack.lens.indexPattern.settingsSamplingUnsupported": "La sélection de cette fonction a pour effet de changer l'échantillonnage de ce calque à 100 % afin de garantir un fonctionnement correct.", "xpack.lens.indexPattern.sortField.invalid": "Champ non valide. Vérifiez votre vue de données ou choisissez un autre champ.", - "lensFormulaDocs.standardDeviation": "Écart-type", "xpack.lens.indexPattern.standardDeviation.description": "Agrégation d'indicateurs à valeur unique qui calcule l’écart-type des valeurs numériques extraites des documents agrégés", "xpack.lens.indexPattern.standardDeviation.quickFunctionDescription": "Écart-type des valeurs d'un champ de nombre qui représente la quantité d'écart des valeurs des champs.", "xpack.lens.indexPattern.staticValue.label": "Valeur de la ligne de référence", @@ -22457,7 +22380,6 @@ "xpack.lens.indexPattern.staticValueWarningText": "Pour écraser la valeur statique, sélectionnez une fonction rapide.", "xpack.lens.indexPattern.suffixLabel": "Suffixe", "xpack.lens.indexpattern.suggestions.overTimeLabel": "Sur la durée", - "lensFormulaDocs.sum": "Somme", "xpack.lens.indexPattern.sum.description": "Agrégation d'indicateurs à valeur unique qui récapitule les valeurs numériques extraites des documents agrégés.", "xpack.lens.indexPattern.sum.quickFunctionDescription": "Total des valeurs d'un champ de nombre.", "xpack.lens.indexPattern.switchToRare": "Classer par rareté", @@ -22495,8 +22417,6 @@ "xpack.lens.indexPattern.terms.size": "Nombre de valeurs", "xpack.lens.indexPattern.termsWithMultipleShifts": "Dans un seul calque, il est impossible de combiner des indicateurs avec des décalages temporels différents et des valeurs dynamiques les plus élevées. Utilisez la même valeur de décalage pour tous les indicateurs, ou utilisez des filtres à la place des valeurs les plus élevées.", "xpack.lens.indexPattern.termsWithMultipleShiftsFixActionLabel": "Utiliser des filtres", - "lensFormulaDocs.time_scale": "indicateur : nombre, unité : s|m|h|d|w|M|y", - "lensFormulaDocs.timeScale": "Normaliser par unité", "xpack.lens.indexPattern.timeScale.label": "Normaliser par unité", "xpack.lens.indexPattern.timeScale.missingUnit": "Aucune unité spécifiée pour Normaliser par unité.", "xpack.lens.indexPattern.timeScale.tooltip": "Normalisez les valeurs pour qu'elles soient toujours affichées en tant que taux par unité de temps spécifiée, indépendamment de l'intervalle de dates sous-jacent.", @@ -22941,6 +22861,111 @@ "xpack.lens.xyVisualization.stackedPercentageBarHorizontalLabel": "H. À barres à pourcentages", "xpack.lens.xyVisualization.stackedPercentageBarLabel": "Vertical à barres à pourcentages", "xpack.lens.xyVisualization.xyLabel": "XY", + "lensFormulaDocs.tinymath.absFunction.markdown": "\nCalcule une valeur absolue. Une valeur négative est multipliée par -1, une valeur positive reste identique.\n\nExemple : calculer la distance moyenne par rapport au niveau de la mer \"abs(average(altitude))\"\n ", + "lensFormulaDocs.tinymath.addFunction.markdown": "\nAjoute jusqu'à deux nombres.\nFonctionne également avec le symbole \"+\".\n\nExemple : calculer la somme de deux champs\n\n\"sum(price) + sum(tax)\"\n\nExemple : compenser le compte par une valeur statique\n\n\"add(count(), 5)\"\n ", + "lensFormulaDocs.tinymath.cbrtFunction.markdown": "\nÉtablit la racine carrée de la valeur.\n\nExemple : calculer la longueur du côté à partir du volume\n`cbrt(last_value(volume))`\n ", + "lensFormulaDocs.tinymath.ceilFunction.markdown": "\nArrondit le plafond de la valeur au chiffre supérieur.\n\nExemple : arrondir le prix au dollar supérieur\n`ceil(sum(price))`\n ", + "lensFormulaDocs.tinymath.clampFunction.markdown": "\nÉtablit une limite minimale et maximale pour la valeur.\n\nExemple : s'assurer de repérer les valeurs aberrantes\n```\nclamp(\n average(bytes),\n percentile(bytes, percentile=5),\n percentile(bytes, percentile=95)\n)\n```\n", + "lensFormulaDocs.tinymath.cubeFunction.markdown": "\nCalcule le cube d'un nombre.\n\nExemple : calculer le volume à partir de la longueur du côté\n`cube(last_value(length))`\n ", + "lensFormulaDocs.tinymath.defaultFunction.markdown": "\nRetourne une valeur numérique par défaut lorsque la valeur est nulle.\n\nExemple : Retourne -1 lorsqu'un champ ne contient aucune donnée.\n\"defaults(average(bytes), -1)\"\n", + "lensFormulaDocs.tinymath.divideFunction.markdown": "\nDivise le premier nombre par le deuxième.\nFonctionne également avec le symbole \"/\".\n\nExemple : calculer la marge bénéficiaire\n\"sum(profit) / sum(revenue)\"\n\nExemple : \"divide(sum(bytes), 2)\"\n ", + "lensFormulaDocs.tinymath.eqFunction.markdown": "\nEffectue une comparaison d'égalité entre deux valeurs.\nÀ utiliser en tant que condition pour la fonction de comparaison \"ifelse\".\nFonctionne également avec le symbole \"==\".\n\nExemple : Retourne \"true\" si la moyenne d'octets est égale à la quantité de mémoire moyenne.\n\"average(bytes) == average(memory)\"\n\nExemple : \"eq(sum(bytes), 1000000)\"\n ", + "lensFormulaDocs.tinymath.expFunction.markdown": "\nÉlève *e* à la puissance n.\n\nExemple : calculer la fonction exponentielle naturelle\n\n`exp(last_value(duration))`\n ", + "lensFormulaDocs.tinymath.fixFunction.markdown": "\nPour les valeurs positives, part du bas. Pour les valeurs négatives, part du haut.\n\nExemple : arrondir à zéro\n\"fix(sum(profit))\"\n ", + "lensFormulaDocs.tinymath.floorFunction.markdown": "\nArrondit à la valeur entière inférieure la plus proche.\n\nExemple : arrondir un prix au chiffre inférieur\n\"floor(sum(price))\"\n ", + "lensFormulaDocs.tinymath.gteFunction.markdown": "\nEffectue une comparaison de supériorité entre deux valeurs.\nÀ utiliser en tant que condition pour la fonction de comparaison \"ifelse\".\nFonctionne également avec le symbole \">=\".\n\nExemple : Retourne \"true\" si la moyenne d'octets est supérieure ou égale à la quantité moyenne de mémoire.\n\"average(bytes) >= average(memory)\"\n\nExemple : \"gte(average(bytes), 1000)\"\n ", + "lensFormulaDocs.tinymath.gtFunction.markdown": "\nEffectue une comparaison de supériorité entre deux valeurs.\nÀ utiliser en tant que condition pour la fonction de comparaison \"ifelse\".\nFonctionne également avec le symbole \">\".\n\nExemple : Retourne \"true\" si la moyenne d'octets est supérieure à la quantité moyenne de mémoire.\n\"average(bytes) > average(memory)\"\n\nExemple : \"gt(average(bytes), 1000)\"\n ", + "lensFormulaDocs.tinymath.ifElseFunction.markdown": "\nRetourne une valeur selon si l'élément de condition est \"true\" ou \"false\".\n\nExemple : Revenus moyens par client, mais dans certains cas, l'ID du client n'est pas fourni, et le client est alors compté comme client supplémentaire.\n`sum(total)/(unique_count(customer_id) + ifelse( count() > count(kql='customer_id:*'), 1, 0))`\n ", + "lensFormulaDocs.tinymath.logFunction.markdown": "\nÉtablit un logarithme avec base optionnelle. La base naturelle *e* est utilisée par défaut.\n\nExemple : calculer le nombre de bits nécessaire au stockage de valeurs\n```\nlog(sum(bytes))\nlog(sum(bytes), 2)\n```\n ", + "lensFormulaDocs.tinymath.lteFunction.markdown": "\nEffectue une comparaison d'infériorité ou de supériorité entre deux valeurs.\nÀ utiliser en tant que condition pour la fonction de comparaison \"ifelse\".\nFonctionne également avec le symbole \"<=\".\n\nExemple : Retourne \"true\" si la moyenne d'octets est inférieure ou égale à la quantité moyenne de mémoire.\n\"average(bytes) <= average(memory)\"\n\nExemple : \"lte(average(bytes), 1000)\"\n ", + "lensFormulaDocs.tinymath.ltFunction.markdown": "\nEffectue une comparaison d'infériorité entre deux valeurs.\nÀ utiliser en tant que condition pour la fonction de comparaison \"ifelse\".\nFonctionne également avec le symbole \"<\".\n\nExemple : Retourne \"true\" si la moyenne d'octets est inférieure à la quantité moyenne de mémoire.\n\"average(bytes) <= average(memory)\"\n\nExemple : \"lt(average(bytes), 1000)\"\n ", + "lensFormulaDocs.tinymath.maxFunction.markdown": "\nTrouve la valeur maximale entre deux nombres.\n\nExemple : Trouver le maximum entre deux moyennes de champs\n\"pick_max(average(bytes), average(memory))\"\n ", + "lensFormulaDocs.tinymath.minFunction.markdown": "\nTrouve la valeur minimale entre deux nombres.\n\nExemple : Trouver le minimum entre deux moyennes de champs\n`pick_min(average(bytes), average(memory))`\n ", + "lensFormulaDocs.tinymath.modFunction.markdown": "\nÉtablit le reste après division de la fonction par un nombre.\n\nExemple : calculer les trois derniers chiffres d'une valeur\n\"mod(sum(price), 1000)\"\n ", + "lensFormulaDocs.tinymath.multiplyFunction.markdown": "\nMultiplie deux nombres.\nFonctionne également avec le symbole \"*\".\n\nExemple : calculer le prix après application du taux d'imposition courant\n`sum(bytes) * last_value(tax_rate)`\n\nExemple : calculer le prix après application du taux d'imposition constant\n\"multiply(sum(price), 1.2)\"\n ", + "lensFormulaDocs.tinymath.powFunction.markdown": "\nÉlève la valeur à une puissance spécifique. Le deuxième argument est obligatoire.\n\nExemple : calculer le volume en fonction de la longueur du côté\n\"pow(last_value(length), 3)\"\n ", + "lensFormulaDocs.tinymath.roundFunction.markdown": "\nArrondit à un nombre donné de décimales, 0 étant la valeur par défaut.\n\nExemples : arrondir au centième\n```\nround(sum(bytes))\nround(sum(bytes), 2)\n```\n ", + "lensFormulaDocs.tinymath.sqrtFunction.markdown": "\nÉtablit la racine carrée d'une valeur positive uniquement.\n\nExemple : calculer la longueur du côté en fonction de la surface\n`sqrt(last_value(area))`\n ", + "lensFormulaDocs.tinymath.squareFunction.markdown": "\nÉlève la valeur à la puissance 2.\n\nExemple : calculer l’aire en fonction de la longueur du côté\n`square(last_value(length))`\n ", + "lensFormulaDocs.tinymath.subtractFunction.markdown": "\nSoustrait le premier nombre du deuxième.\nFonctionne également avec le symbole \"-\".\n\nExemple : calculer la plage d'un champ\n\"subtract(max(bytes), min(bytes))\"\n ", + "lensFormulaDocs.documentation.filterRatioDescription.markdown": "### Rapport de filtre :\n\nUtilisez \"kql=''\" pour filtrer un ensemble de documents et le comparer à d'autres documents du même regroupement.\nPar exemple, pour consulter l'évolution du taux d'erreur au fil du temps :\n\n```\ncount(kql='response.status_code > 400') / count()\n```\n ", + "lensFormulaDocs.documentation.percentOfTotalDescription.markdown": "### Pourcentage du total\n\nLes formules peuvent calculer \"overall_sum\" pour tous les regroupements,\nce qui permet de convertir chaque regroupement en un pourcentage du total :\n\n```\nsum(products.base_price) / overall_sum(sum(products.base_price))\n```\n ", + "lensFormulaDocs.documentation.recentChangeDescription.markdown": "### Modification récente\n\nUtilisez \"reducedTimeRange='30m'\" pour ajouter un filtre supplémentaire sur la plage temporelle d'un indicateur aligné avec la fin d'une plage temporelle globale. Vous pouvez l'utiliser pour calculer le degré de modification récente d'une valeur.\n\n```\nmax(system.network.in.bytes, reducedTimeRange=\"30m\")\n - min(system.network.in.bytes, reducedTimeRange=\"30m\")\n```\n ", + "lensFormulaDocs.documentation.weekOverWeekDescription.markdown": "### Semaine après semaine :\n\nUtilisez \"shift='1w'\" pour obtenir la valeur de chaque regroupement\nde la semaine précédente. Le décalage ne doit pas être utilisé avec la fonction *Valeurs les plus élevées*.\n\n```\npercentile(system.network.in.bytes, percentile=99) /\npercentile(system.network.in.bytes, percentile=99, shift='1w')\n```\n ", + "lensFormulaDocs.cardinality.documentation.markdown": "\nCalcule le nombre de valeurs uniques d'un champ donné. Fonctionne pour les nombres, les chaînes, les dates et les valeurs booléennes.\n\nExemple : calculer le nombre de produits différents :\n`unique_count(product.name)`\n\nExemple : calculer le nombre de produits différents du groupe \"clothes\" :\n\"unique_count(product.name, kql='product.group=clothes')\"\n ", + "lensFormulaDocs.count.documentation.markdown": "\nNombre total de documents. Lorsque vous fournissez un champ, le nombre total de valeurs de champ est compté. Lorsque vous utilisez la fonction de décompte pour les champs qui comportent plusieurs valeurs dans un même document, toutes les valeurs sont comptées.\n\n#### Exemples\n\nPour calculer le nombre total de documents, utilisez `count()`.\n\nPour calculer le nombre de produits, utilisez `count(products.id)`.\n\nPour calculer le nombre de documents qui correspondent à un filtre donné, utilisez `count(kql='price > 500')`.\n ", + "lensFormulaDocs.counterRate.documentation.markdown": "\nCalcule le taux d'un compteur toujours croissant. Cette fonction renvoie uniquement des résultats utiles inhérents aux champs d'indicateurs de compteur qui contiennent une mesure quelconque à croissance régulière.\nSi la valeur diminue, elle est interprétée comme une mesure de réinitialisation de compteur. Pour obtenir des résultats plus précis, \"counter_rate\" doit être calculé d’après la valeur \"max\" du champ.\n\nCe calcul est réalisé séparément pour des séries distinctes définies par des filtres ou des dimensions de valeurs supérieures.\nIl utilise l'intervalle en cours utilisé dans la formule.\n\nExemple : visualiser le taux d'octets reçus au fil du temps par un serveur Memcached :\n`counter_rate(max(memcached.stats.read.bytes))`\n ", + "lensFormulaDocs.cumulativeSum.documentation.markdown": "\nCalcule la somme cumulée d'un indicateur au fil du temps, en ajoutant toutes les valeurs précédentes d'une série à chaque valeur. Pour utiliser cette fonction, vous devez également configurer une dimension de l'histogramme de dates.\n\nCe calcul est réalisé séparément pour des séries distinctes définies par des filtres ou des dimensions de valeurs supérieures.\n\nExemple : visualiser les octets reçus cumulés au fil du temps :\n`cumulative_sum(sum(bytes))`\n ", + "lensFormulaDocs.differences.documentation.markdown": "\nCalcule la différence par rapport à la dernière valeur d'un indicateur au fil du temps. Pour utiliser cette fonction, vous devez également configurer une dimension de l'histogramme de dates.\nLes données doivent être séquentielles pour les différences. Si vos données sont vides lorsque vous utilisez des différences, essayez d'augmenter l'intervalle de l'histogramme de dates.\n\nCe calcul est réalisé séparément pour des séries distinctes définies par des filtres ou des dimensions de valeurs supérieures.\n\nExemple : visualiser la modification des octets reçus au fil du temps :\n`differences(sum(bytes))`\n ", + "lensFormulaDocs.lastValue.documentation.markdown": "\nRenvoie la valeur d'un champ du dernier document, triée par le champ d'heure par défaut de la vue de données.\n\nCette fonction permet de récupérer le dernier état d'une entité.\n\nExemple : obtenir le statut actuel du serveur A :\n`last_value(server.status, kql='server.name=\"A\"')`\n ", + "lensFormulaDocs.metric.documentation.markdown": "\nRenvoie l'indicateur {metric} d'un champ. Cette fonction fonctionne uniquement pour les champs numériques.\n\nExemple : obtenir l'indicateur {metric} d'un prix :\n\"{metric}(price)\"\n\nExemple : obtenir l'indicateur {metric} d'un prix pour des commandes du Royaume-Uni :\n\"{metric}(price, kql='location:UK')\"\n ", + "lensFormulaDocs.movingAverage.documentation.markdown": "\nCalcule la moyenne mobile d'un indicateur au fil du temps, en prenant la moyenne des n dernières valeurs pour calculer la valeur actuelle. Pour utiliser cette fonction, vous devez également configurer une dimension de l'histogramme de dates.\nLa valeur de fenêtre par défaut est {defaultValue}.\n\nCe calcul est réalisé séparément pour des séries distinctes définies par des filtres ou des dimensions de valeurs supérieures.\n\nPrend un paramètre nommé \"window\" qui spécifie le nombre de dernières valeurs à inclure dans le calcul de la moyenne de la valeur actuelle.\n\nExemple : lisser une ligne de mesures :\n`moving_average(sum(bytes), window=5)`\n ", + "lensFormulaDocs.overall_average.documentation.markdown": "\nCalcule la moyenne d'un indicateur pour tous les points de données d'une série dans le graphique actuel. Une série est définie par une dimension à l'aide d'un histogramme de dates ou d'une fonction d'intervalle.\nD'autres dimensions permettant de répartir les données telles que les valeurs supérieures ou les filtres sont traitées en tant que séries distinctes.\n\nSi le graphique actuel n'utilise aucun histogramme de dates ou aucune fonction d'intervalle, \"overall_average\" calcule la moyenne pour toutes les dimensions, quelle que soit la fonction utilisée.\n\nExemple : écart par rapport à la moyenne :\n\"sum(bytes) - overall_average(sum(bytes))\"\n ", + "lensFormulaDocs.overall_max.documentation.markdown": "\nCalcule la valeur maximale d'un indicateur pour tous les points de données d'une série dans le graphique actuel. Une série est définie par une dimension à l'aide d'un histogramme de dates ou d'une fonction d'intervalle.\nD'autres dimensions permettant de répartir les données telles que les valeurs supérieures ou les filtres sont traitées en tant que séries distinctes.\n\nSi le graphique actuel n'utilise aucun histogramme de dates ou aucune fonction d'intervalle, \"overall_max\" calcule la valeur maximale pour toutes les dimensions, quelle que soit la fonction utilisée.\n\nExemple : pourcentage de plage\n\"(sum(bytes) - overall_min(sum(bytes))) / (overall_max(sum(bytes)) - overall_min(sum(bytes)))\"\n ", + "lensFormulaDocs.overall_min.documentation.markdown": "\nCalcule la valeur minimale d'un indicateur pour tous les points de données d'une série dans le graphique actuel. Une série est définie par une dimension à l'aide d'un histogramme de dates ou d'une fonction d'intervalle.\nD'autres dimensions permettant de répartir les données telles que les valeurs supérieures ou les filtres sont traitées en tant que séries distinctes.\n\nSi le graphique actuel n'utilise aucun histogramme de dates ou aucune fonction d'intervalle, \"overall_min\" calcule la valeur minimale pour toutes les dimensions, quelle que soit la fonction utilisée.\n\nExemple : pourcentage de plage\n\"(sum(bytes) - overall_min(sum(bytes)) / (overall_max(sum(bytes)) - overall_min(sum(bytes)))\"\n ", + "lensFormulaDocs.overall_sum.documentation.markdown": "\nCalcule la somme d'un indicateur pour tous les points de données d'une série dans le graphique actuel. Une série est définie par une dimension à l'aide d'un histogramme de dates ou d'une fonction d'intervalle.\nD'autres dimensions permettant de répartir les données telles que les valeurs supérieures ou les filtres sont traitées en tant que séries distinctes.\n\nSi le graphique actuel n'utilise aucun histogramme de dates ou aucune fonction d'intervalle, \"overall_sum\" calcule la somme pour toutes les dimensions, quelle que soit la fonction utilisée.\n\nExemple : pourcentage de total\n\"sum(bytes) / overall_sum(sum(bytes))\"\n ", + "lensFormulaDocs.percentile.documentation.markdown": "\nRenvoie le centile spécifié des valeurs d'un champ. Il s'agit de la valeur de n pour cent des valeurs présentes dans les documents.\n\nExemple : obtenir le nombre d'octets supérieurs à 95 % des valeurs :\n`percentile(bytes, percentile=95)`\n ", + "lensFormulaDocs.percentileRanks.documentation.markdown": "\nRetourne le pourcentage de valeurs qui sont en dessous d'une certaine valeur. Par exemple, si une valeur est supérieure à 95 % des valeurs observées, elle est placée au 95e rang centile.\n\nExemple : Obtenir le pourcentage de valeurs qui sont en dessous de 100 :\n\"percentile_rank(bytes, value=100)\"\n ", + "lensFormulaDocs.standardDeviation.documentation.markdown": "\nRetourne la taille de la variation ou de la dispersion du champ. Cette fonction ne s’applique qu’aux champs numériques.\n\n#### Exemples\n\nPour obtenir l'écart type d'un prix, utilisez standard_deviation(price).\n\nPour obtenir la variance du prix des commandes passées au Royaume-Uni, utilisez `square(standard_deviation(price, kql='location:UK'))`.\n ", + "lensFormulaDocs.time_scale.documentation.markdown": "\n\nCette fonction avancée est utile pour normaliser les comptes et les sommes sur un intervalle de temps spécifique. Elle permet l'intégration avec les indicateurs qui sont stockés déjà normalisés sur un intervalle de temps spécifique.\n\nVous pouvez faire appel à cette fonction uniquement si une fonction d'histogramme des dates est utilisée dans le graphique actuel.\n\nExemple : Un rapport comparant un indicateur déjà normalisé à un autre indicateur devant être normalisé.\n\"normalize_by_unit(counter_rate(max(system.diskio.write.bytes)), unit='s') / last_value(apache.status.bytes_per_second)\"\n ", + "lensFormulaDocs.tinymath.base": "base", + "lensFormulaDocs.boolean": "booléen", + "lensFormulaDocs.tinymath.condition": "condition", + "lensFormulaDocs.tinymath.decimals": "décimales", + "lensFormulaDocs.tinymath.defaultValue": "par défaut", + "lensFormulaDocs.tinymath.left": "gauche", + "lensFormulaDocs.tinymath.max": "max", + "lensFormulaDocs.tinymath.min": "min", + "lensFormulaDocs.number": "numéro", + "lensFormulaDocs.tinymath.right": "droite", + "lensFormulaDocs.string": "chaîne", + "lensFormulaDocs.tinymath.value": "valeur", + "lensFormulaDocs.CommonFormulaDocumentation": "Les formules les plus courantes divisent deux valeurs pour produire un pourcentage. Pour obtenir un affichage correct, définissez \"Format de valeur\" sur \"pourcent\".", + "lensFormulaDocs.documentation.columnCalculationSection": "Calculs de colonnes", + "lensFormulaDocs.documentation.columnCalculationSectionDescription": "Ces fonctions sont exécutées pour chaque ligne, mais elles sont fournies avec la colonne entière comme contexte. Elles sont également appelées fonctions de fenêtre.", + "lensFormulaDocs.documentation.comparisonSection": "Comparaison", + "lensFormulaDocs.documentation.comparisonSectionDescription": "Ces fonctions sont utilisées pour effectuer une comparaison de valeurs.", + "lensFormulaDocs.documentation.constantsSection": "Contexte Kibana", + "lensFormulaDocs.documentation.constantsSectionDescription": "Ces fonctions sont utilisées pour récupérer des variables de contexte Kibana, c’est-à-dire l’histogramme de date \"interval\", le \"now\" actuel et le \"time_range\" sélectionné, et pour vous aider à faire des opérations mathématiques de dates.", + "lensFormulaDocs.documentation.elasticsearchSection": "Elasticsearch", + "lensFormulaDocs.documentation.elasticsearchSectionDescription": "Ces fonctions seront exécutées sur les documents bruts pour chaque ligne du tableau résultant, en agrégeant tous les documents correspondant aux dimensions de répartition en une seule valeur.", + "lensFormulaDocs.documentation.filterRatio": "Rapport de filtre", + "lensFormulaDocs.documentation.mathSection": "Mathématique", + "lensFormulaDocs.documentation.mathSectionDescription": "Ces fonctions seront exécutées pour chaque ligne du tableau résultant en utilisant des valeurs uniques de la même ligne calculées à l'aide d'autres fonctions.", + "lensFormulaDocs.documentation.percentOfTotal": "Pourcentage du total", + "lensFormulaDocs.documentation.recentChange": "Modification récente", + "lensFormulaDocs.documentation.weekOverWeek": "Semaine après semaine", + "lensFormulaDocs.frequentlyUsedHeading": "Formules courantes", + "lensFormulaDocs.avg": "Moyenne", + "lensFormulaDocs.cardinality": "Compte unique", + "lensFormulaDocs.cardinality.signature": "champ : chaîne", + "lensFormulaDocs.count": "Décompte", + "lensFormulaDocs.count.signature": "[champ : chaîne]", + "lensFormulaDocs.counterRate.signature": "indicateur : nombre", + "lensFormulaDocs.cumulative_sum.signature": "indicateur : nombre", + "lensFormulaDocs.cumulativeSum": "Somme cumulée", + "lensFormulaDocs.derivative": "Différences", + "lensFormulaDocs.differences.signature": "indicateur : nombre", + "lensFormulaDocs.lastValue": "Dernière valeur", + "lensFormulaDocs.lastValue.signature": "champ : chaîne", + "lensFormulaDocs.max": "Maximum", + "lensFormulaDocs.median": "Médiane", + "lensFormulaDocs.metric.signature": "champ : chaîne", + "lensFormulaDocs.min": "Minimum", + "lensFormulaDocs.moving_average.signature": "indicateur : nombre, [window] : nombre", + "lensFormulaDocs.movingAverage": "Moyenne mobile", + "lensFormulaDocs.overall_metric": "indicateur : nombre", + "lensFormulaDocs.overallMax": "Max général", + "lensFormulaDocs.overallMin": "Min général", + "lensFormulaDocs.overallSum": "Somme générale", + "lensFormulaDocs.percentile": "Centile", + "lensFormulaDocs.percentile.signature": "champ : chaîne, [percentile] : nombre", + "lensFormulaDocs.percentileRank": "Rang centile", + "lensFormulaDocs.percentileRanks.signature": "champ : chaîne, [valeur] : nombre", + "lensFormulaDocs.standardDeviation": "Écart-type", + "lensFormulaDocs.sum": "Somme", + "lensFormulaDocs.time_scale": "indicateur : nombre, unité : s|m|h|d|w|M|y", + "lensFormulaDocs.timeScale": "Normaliser par unité", "xpack.licenseApiGuard.license.errorExpiredMessage": "Vous ne pouvez pas utiliser {pluginName}, car votre licence {licenseType} a expiré.", "xpack.licenseApiGuard.license.errorUnavailableMessage": "Vous ne pouvez pas utiliser {pluginName}, car les informations de la licence sont indisponibles pour le moment.", "xpack.licenseApiGuard.license.errorUnsupportedMessage": "Votre licence {licenseType} ne prend pas en charge {pluginName}. Veuillez mettre à niveau votre licence.", @@ -29496,46 +29521,6 @@ "xpack.observabilityAiAssistant.setupKb": "Améliorez votre expérience en configurant la base de connaissances.", "xpack.observabilityAiAssistant.stopGeneratingButtonLabel": "Arrêter la génération", "xpack.observabilityAiAssistant.technicalPreviewBadgeDescription": "GTP4 est nécessaire pour bénéficier d'une meilleure expérience avec les appels de fonctions (par exemple lors de la réalisation d'analyse de la cause d'un problème, de la visualisation de données et autres). GPT3.5 peut fonctionner pour certains des workflows les plus simples comme les explications d'erreurs ou pour bénéficier d'une expérience comparable à ChatGPT au sein de Kibana à partir du moment où les appels de fonctions ne sont pas fréquents.", - "xpack.observabilityShared.inspector.stats.queryTimeValue": "{queryTime} ms", - "xpack.observabilityShared.breadcrumbs.observabilityLinkText": "Observabilité", - "xpack.observabilityShared.inspector.stats.dataViewDescription": "La vue de données qui se connecte aux index Elasticsearch.", - "xpack.observabilityShared.inspector.stats.dataViewLabel": "Vue de données", - "xpack.observabilityShared.inspector.stats.hitsDescription": "Le nombre de documents renvoyés par la requête.", - "xpack.observabilityShared.inspector.stats.hitsLabel": "Résultats", - "xpack.observabilityShared.inspector.stats.hitsTotalDescription": "Le nombre de documents correspondant à la requête.", - "xpack.observabilityShared.inspector.stats.hitsTotalLabel": "Résultats (total)", - "xpack.observabilityShared.inspector.stats.kibanaApiQueryParametersDescription": "Les paramètres de requête utilisés dans la requête d'API Kibana à l'origine de la requête Elasticsearch.", - "xpack.observabilityShared.inspector.stats.kibanaApiQueryParametersLabel": "Paramètres de requête d'API Kibana", - "xpack.observabilityShared.inspector.stats.kibanaApiRouteDescription": "Le chemin de la requête d'API Kibana à l'origine de la requête Elasticsearch.", - "xpack.observabilityShared.inspector.stats.kibanaApiRouteLabel": "Chemin de l’API Kibana", - "xpack.observabilityShared.inspector.stats.queryTimeDescription": "Le temps qu'il a fallu pour traiter la requête. Ne comprend pas le temps nécessaire pour envoyer la requête ni l'analyser dans le navigateur.", - "xpack.observabilityShared.inspector.stats.queryTimeLabel": "Durée de la requête", - "xpack.observabilityShared.navigation.betaBadge": "Bêta", - "xpack.observabilityShared.navigation.experimentalBadgeLabel": "Version d'évaluation technique", - "xpack.observabilityShared.navigation.newBadge": "NOUVEAUTÉ", - "xpack.observabilityShared.pageLayout.sideNavTitle": "Observabilité", - "xpack.observabilityShared.sectionLink.newLabel": "Nouveauté", - "xpack.observabilityShared.technicalPreviewBadgeDescription": "Cette fonctionnalité est en version d'évaluation technique et pourra être modifiée ou retirée complètement dans une future version. Elastic s'efforcera au maximum de corriger tout problème, mais les fonctionnalités en version d'évaluation technique ne sont pas soumises aux accords de niveau de service d'assistance des fonctionnalités officielles en disponibilité générale.", - "xpack.observabilityShared.technicalPreviewBadgeLabel": "Version d'évaluation technique", - "xpack.observabilityShared.tour.alertsStep.imageAltText": "Démonstration des alertes", - "xpack.observabilityShared.tour.alertsStep.tourContent": "Définissez et détectez les conditions qui déclenchent des alertes avec des intégrations de plateformes tierces comme l’e-mail, PagerDuty et Slack.", - "xpack.observabilityShared.tour.alertsStep.tourTitle": "Soyez informé en cas de modification", - "xpack.observabilityShared.tour.endButtonLabel": "Terminer la visite", - "xpack.observabilityShared.tour.guidedSetupStep.tourContent": "La façon la plus facile de continuer avec Elastic Observability est de suivre les prochaines étapes recommandées dans l'assistant de données.", - "xpack.observabilityShared.tour.guidedSetupStep.tourTitle": "Toujours plus avec Elastic Observability", - "xpack.observabilityShared.tour.metricsExplorerStep.imageAltText": "Démonstration de Metrics Explorer", - "xpack.observabilityShared.tour.metricsExplorerStep.tourContent": "Diffusez, regroupez et visualisez les mesures provenant de vos systèmes, du cloud, du réseau et d'autres sources d'infrastructure.", - "xpack.observabilityShared.tour.metricsExplorerStep.tourTitle": "Monitorer l’intégrité de votre infrastructure", - "xpack.observabilityShared.tour.nextButtonLabel": "Suivant", - "xpack.observabilityShared.tour.observabilityOverviewStep.tourContent": "Faites un tour rapide pour découvrir les avantages de disposer de toutes vos données d'observabilité dans une seule suite.", - "xpack.observabilityShared.tour.observabilityOverviewStep.tourTitle": "Bienvenue dans Elastic Observability", - "xpack.observabilityShared.tour.servicesStep.imageAltText": "Démonstration des services", - "xpack.observabilityShared.tour.servicesStep.tourContent": "Détectez et réparez rapidement les problèmes de performances en recueillant des informations détaillées sur vos services.", - "xpack.observabilityShared.tour.servicesStep.tourTitle": "Identifier et résoudre les problèmes d'application", - "xpack.observabilityShared.tour.skipButtonLabel": "Ignorer la visite", - "xpack.observabilityShared.tour.streamStep.imageAltText": "Démonstration du flux de logs", - "xpack.observabilityShared.tour.streamStep.tourContent": "Surveillez, filtrez et inspectez les événements de journal provenant de vos applications, serveurs, machines virtuelles et conteneurs.", - "xpack.observabilityShared.tour.streamStep.tourTitle": "Suivi de vos logs en temps réel", "xpack.osquery.action.missingPrivileges": "Pour accéder à cette page, demandez à votre administrateur vos privilèges Kibana pour {osquery}.", "xpack.osquery.agentPolicy.confirmModalCalloutDescription": "Fleet a détecté que {agentPolicyCount, plural, one {politique d''agent} many {ces politiques d''agent} other {les politiques d''agent sélectionnées sont}} déjà en cours d'utilisation par certains de vos agents. Suite à cette action, Fleet déploie les mises à jour de tous les agents qui utilisent {agentPolicyCount, plural, one {politique d''agent} many {ces politiques d''agent} other {ces politiques d''agent}}.", "xpack.osquery.agentPolicy.confirmModalCalloutTitle": "Cette action va mettre à jour {agentCount, plural, one {# agent} many {# agents ont été enregistrés} other {# agents}}", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index fc7df375241f76..aeb90ddb6e8abd 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -572,7 +572,6 @@ "core.euiComboBoxOptionsList.delimiterMessage": "各項目を{delimiter}で区切って追加", "core.euiComboBoxOptionsList.noMatchingOptions": "{searchValue}はどのオプションにも一致していません", "core.euiComboBoxPill.removeSelection": "このグループの選択項目から{children}を削除", - "core.euiControlBar.customScreenReaderAnnouncement": "ドキュメントの最後には、{landmarkHeading}という新しいリージョンランドマークとページレベルのコントロールがあります。", "core.euiDataGrid.ariaLabel": "{label}; {page}ページ中{pageCount}ページ目。", "core.euiDataGrid.ariaLabelledBy": "{pageCount}ページ中{page}ページ目。", "core.euiDataGridCell.position": "{columnId}、列{col}、行{row}", @@ -587,13 +586,6 @@ "core.euiFilterButton.filterBadgeActiveAriaLabel": "{count}個のアクティブなフィルター", "core.euiFilterButton.filterBadgeAvailableAriaLabel": "{count}個の使用可能なフィルター", "core.euiMarkdownEditorFooter.supportedFileTypes": "サポートされているファイル:{supportedFileTypes}", - "core.euiNotificationEventMessages.accordionAriaLabelButtonText": "+ {eventName}の{messagesLength}メッセージ", - "core.euiNotificationEventMessages.accordionButtonText": "+ 追加の{messagesLength}", - "core.euiNotificationEventMeta.contextMenuButton": "{eventName}のメニュー", - "core.euiNotificationEventReadButton.markAsReadAria": "{eventName}を既読に設定", - "core.euiNotificationEventReadButton.markAsUnreadAria": "{eventName}を未読に設定", - "core.euiNotificationEventReadIcon.readAria": "{eventName}は既読です", - "core.euiNotificationEventReadIcon.unreadAria": "{eventName}は未読です", "core.euiPagination.firstRangeAriaLabel": "ページ2から{lastPage}までをスキップしています", "core.euiPagination.lastRangeAriaLabel": "ページ{firstPage}から{lastPage}までをスキップしています", "core.euiPagination.pageOfTotalCompressed": "{page} / {total}", @@ -741,8 +733,6 @@ "core.euiComboBoxOptionsList.loadingOptions": "オプションを読み込み中", "core.euiComboBoxOptionsList.noAvailableOptions": "利用可能なオプションがありません", "core.euiCommonlyUsedTimeRanges.legend": "頻繁に使用", - "core.euiControlBar.screenReaderAnnouncement": "ドキュメントの最後には、新しいリージョンランドマークとページレベルのコントロールがあります。", - "core.euiControlBar.screenReaderHeading": "ページレベルのコントロール", "core.euiDataGrid.screenReaderNotice": "セルにはインタラクティブコンテンツが含まれます。", "core.euiDataGridCellActions.expandButtonTitle": "クリックするか enter を押すと、セルのコンテンツとインタラクトできます。", "core.euiDataGridHeaderCell.actionsPopoverScreenReaderText": "列アクションのリストを移動するには、Tabまたは上下矢印キーを押します。", @@ -849,11 +839,6 @@ "core.euiMarkdownEditorToolbar.editor": "エディター", "core.euiMarkdownEditorToolbar.previewMarkdown": "プレビュー", "core.euiModal.closeModal": "このモーダルウィンドウを閉じます", - "core.euiNotificationEventMessages.accordionHideText": "非表示", - "core.euiNotificationEventReadButton.markAsRead": "既読に設定", - "core.euiNotificationEventReadButton.markAsUnread": "未読に設定", - "core.euiNotificationEventReadIcon.read": "読み取り", - "core.euiNotificationEventReadIcon.unread": "未読", "core.euiPagination.collection": "収集", "core.euiPagination.fromEndLabel": "最後から", "core.euiPagination.last": "最後", @@ -20165,7 +20150,6 @@ "xpack.infra.homePage.noMetricsIndicesInstructionsActionLabel": "セットアップの手順を表示", "xpack.infra.homePage.settingsTabTitle": "設定", "xpack.infra.homePage.tellUsWhatYouThinkK8sLink": "ご意見をお聞かせください。(K8s)", - "xpack.observabilityShared.featureFeedbackButton.tellUsWhatYouThinkLink": "ご意見をお聞かせください。", "xpack.infra.homePage.toolbar.kqlSearchFieldPlaceholder": "インフラストラクチャーデータを検索…(例:host.name:host-1)", "xpack.infra.hostFlyout.explainProcessMessageTitle": "このプロセスの概要", "xpack.infra.hosts.searchPlaceholder": "ホストを検索(例:cloud.provider:gcp AND system.load.1 > 0.5)", @@ -20959,6 +20943,47 @@ "xpack.infra.waffle.unableToSelectMetricErrorTitle": "メトリックのオプションまたは値を選択できません。", "xpack.infra.waffleTime.autoRefreshButtonLabel": "自動更新", "xpack.infra.waffleTime.stopRefreshingButtonLabel": "更新中止", + "xpack.observabilityShared.featureFeedbackButton.tellUsWhatYouThinkLink": "ご意見をお聞かせください。", + "xpack.observabilityShared.inspector.stats.queryTimeValue": "{queryTime}ms", + "xpack.observabilityShared.breadcrumbs.observabilityLinkText": "Observability", + "xpack.observabilityShared.inspector.stats.dataViewDescription": "Elasticsearchインデックスに接続したデータビューです。", + "xpack.observabilityShared.inspector.stats.dataViewLabel": "データビュー", + "xpack.observabilityShared.inspector.stats.hitsDescription": "クエリにより返されたドキュメントの数です。", + "xpack.observabilityShared.inspector.stats.hitsLabel": "ヒット数", + "xpack.observabilityShared.inspector.stats.hitsTotalDescription": "クエリに一致するドキュメントの数です。", + "xpack.observabilityShared.inspector.stats.hitsTotalLabel": "ヒット数(合計)", + "xpack.observabilityShared.inspector.stats.kibanaApiQueryParametersDescription": "Elasticsearch要求を開始したKibana API要求で使用されているクエリパラメーター。", + "xpack.observabilityShared.inspector.stats.kibanaApiQueryParametersLabel": "Kibana APIクエリパラメーター", + "xpack.observabilityShared.inspector.stats.kibanaApiRouteDescription": "Elasticsearch要求を開始したKibana API要求のルート。", + "xpack.observabilityShared.inspector.stats.kibanaApiRouteLabel": "Kibana APIルート", + "xpack.observabilityShared.inspector.stats.queryTimeDescription": "クエリの処理の所要時間です。リクエストの送信やブラウザーでのパースの時間は含まれません。", + "xpack.observabilityShared.inspector.stats.queryTimeLabel": "クエリ時間", + "xpack.observabilityShared.navigation.betaBadge": "ベータ", + "xpack.observabilityShared.navigation.experimentalBadgeLabel": "テクニカルプレビュー", + "xpack.observabilityShared.navigation.newBadge": "新規", + "xpack.observabilityShared.pageLayout.sideNavTitle": "Observability", + "xpack.observabilityShared.sectionLink.newLabel": "新規", + "xpack.observabilityShared.technicalPreviewBadgeDescription": "この機能はテクニカルプレビュー中であり、将来のリリースでは変更されたり完全に削除されたりする場合があります。Elasticは最善の努力を講じてすべての問題の修正に努めますが、テクニカルプレビュー中の機能には正式なGA機能のサポートSLAが適用されません。", + "xpack.observabilityShared.technicalPreviewBadgeLabel": "テクニカルプレビュー", + "xpack.observabilityShared.tour.alertsStep.imageAltText": "アラートデモ", + "xpack.observabilityShared.tour.alertsStep.tourContent": "電子メール、PagerDuty、Slackなどのサードパーティプラットフォーム統合でアラートをトリガーする条件を定義して検出します。", + "xpack.observabilityShared.tour.alertsStep.tourTitle": "変更が発生したときに通知", + "xpack.observabilityShared.tour.endButtonLabel": "ツアーを終了", + "xpack.observabilityShared.tour.guidedSetupStep.tourContent": "Elasticオブザーバビリティに進む最も簡単な方法は、データアシスタントで推奨された次のステップに従うことです。", + "xpack.observabilityShared.tour.guidedSetupStep.tourTitle": "Elasticオブザーバビリティのその他の機能", + "xpack.observabilityShared.tour.metricsExplorerStep.imageAltText": "メトリックエクスプローラーのデモ", + "xpack.observabilityShared.tour.metricsExplorerStep.tourContent": "システム、クラウド、ネットワーク、その他のインフラストラクチャーソースからメトリックをストリーム、グループ化、可視化します。", + "xpack.observabilityShared.tour.metricsExplorerStep.tourTitle": "インフラストラクチャーの正常性を監視", + "xpack.observabilityShared.tour.nextButtonLabel": "次へ", + "xpack.observabilityShared.tour.observabilityOverviewStep.tourContent": "クイックガイドを表示し、オブザーバビリティデータすべてを1つのスタックに格納する利点をご覧ください。", + "xpack.observabilityShared.tour.observabilityOverviewStep.tourTitle": "Elasticオブザーバビリティへようこそ", + "xpack.observabilityShared.tour.servicesStep.imageAltText": "サービスのデモ", + "xpack.observabilityShared.tour.servicesStep.tourContent": "サービスに関する詳細情報を収集し、パフォーマンスの問題をすばやく検出、修正できます。", + "xpack.observabilityShared.tour.servicesStep.tourTitle": "アプリケーションの問題を特定して解決", + "xpack.observabilityShared.tour.skipButtonLabel": "ツアーをスキップ", + "xpack.observabilityShared.tour.streamStep.imageAltText": "ログストリームのデモ", + "xpack.observabilityShared.tour.streamStep.tourContent": "アプリケーション、サーバー、仮想マシン、コネクターからのログイベントを監視、フィルター、検査します。", + "xpack.observabilityShared.tour.streamStep.tourTitle": "リアルタイムでログを追跡", "xpack.metricsData.assetDetails.formulas.cpuUsage": "CPU使用状況", "xpack.metricsData.assetDetails.formulas.cpuUsage.iowaitLabel": "iowait", "xpack.metricsData.assetDetails.formulas.cpuUsage.irqLabel": "irq", @@ -21929,54 +21954,6 @@ "xpack.lens.xyVisualization.dataTypeFailureXShort": "{axis}のデータ型が正しくありません。", "xpack.lens.xyVisualization.dataTypeFailureYLong": "{axis}のディメンション{label}のデータ型が正しくありません。数値が想定されていますが、{dataType}です", "xpack.lens.xyVisualization.dataTypeFailureYShort": "{axis}のデータ型が正しくありません。", - "lensFormulaDocs.tinymath.absFunction.markdown": "\n絶対値を計算します。負の値は-1で乗算されます。正の値は同じままです。\n\n例:海水位までの平均距離を計算します `abs(average(altitude))`\n ", - "lensFormulaDocs.tinymath.addFunction.markdown": "\n2つの数値を加算します。\n+記号も使用できます。\n\n例:2つのフィールドの合計を計算します\n\n`sum(price) + sum(tax)`\n\n例:固定値でカウントをオフセットします\n\n`add(count(), 5)`\n ", - "lensFormulaDocs.tinymath.cbrtFunction.markdown": "\n値の立方根。\n\n例:体積から側面の長さを計算します\n`cbrt(last_value(volume))`\n ", - "lensFormulaDocs.tinymath.ceilFunction.markdown": "\n値の上限(切り上げ)。\n\n例:価格を次のドル単位まで切り上げます\n`ceil(sum(price))`\n ", - "lensFormulaDocs.tinymath.clampFunction.markdown": "\n最小値から最大値までの値を制限します。\n\n例:確実に異常値を特定します\n```\nclamp(\n average(bytes),\n percentile(bytes, percentile=5),\n percentile(bytes, percentile=95)\n)\n```\n", - "lensFormulaDocs.tinymath.cubeFunction.markdown": "\n数値の三乗を計算します。\n\n例:側面の長さから体積を計算します\n`cube(last_value(length))`\n ", - "lensFormulaDocs.tinymath.defaultFunction.markdown": "\n値がヌルのときにデフォルトの数値を返します。\n\n例:フィールドにデータがない場合は、-1を返します\n`defaults(average(bytes), -1)`\n", - "lensFormulaDocs.tinymath.divideFunction.markdown": "\n1番目の数値を2番目の数値で除算します。\n/記号も使用できます\n\n例:利益率を計算します\n`sum(profit) / sum(revenue)`\n\n例:`divide(sum(bytes), 2)`\n ", - "lensFormulaDocs.tinymath.eqFunction.markdown": "\n2つの値で等価性の比較を実行します。\n「ifelse」比較関数の条件として使用されます。\n==記号も使用できます。\n\n例:バイトの平均が平均メモリーと同じ量の場合は、trueを返します。\n`average(bytes) == average(memory)`\n\n例: `eq(sum(bytes), 1000000)`\n ", - "lensFormulaDocs.tinymath.expFunction.markdown": "\n*e*をn乗します。\n\n例:自然指数関数を計算します\n\n`exp(last_value(duration))`\n ", - "lensFormulaDocs.tinymath.fixFunction.markdown": "\n正の値の場合は、下限を取ります。負の値の場合は、上限を取ります。\n\n例:ゼロに向かって端数処理します\n`fix(sum(profit))`\n ", - "lensFormulaDocs.tinymath.floorFunction.markdown": "\n最も近い整数値まで切り捨てます\n\n例:価格を切り捨てます\n`floor(sum(price))`\n ", - "lensFormulaDocs.tinymath.gteFunction.markdown": "\n2つの値で大なりの比較を実行します。\n「ifelse」比較関数の条件として使用されます。\n>=記号も使用できます。\n\n例:バイトの平均がメモリーの平均量以上である場合は、trueを返します\n`average(bytes) >= average(memory)`\n\n例: `gte(average(bytes), 1000)`\n ", - "lensFormulaDocs.tinymath.gtFunction.markdown": "\n2つの値で大なりの比較を実行します。\n「ifelse」比較関数の条件として使用されます。\n>記号も使用できます。\n\n例:バイトの平均がメモリーの平均量より大きい場合は、trueを返します\n`average(bytes) > average(memory)`\n\n例: `gt(average(bytes), 1000)`\n ", - "lensFormulaDocs.tinymath.ifElseFunction.markdown": "\n条件の要素がtrueかfalseかに応じて、値を返します。\n\n例:顧客ごとの平均収益。ただし、場合によっては、顧客IDが提供されないことがあり、その場合は別の顧客としてカウントされます\n`sum(total)/(unique_count(customer_id) + ifelse( count() > count(kql='customer_id:*'), 1, 0))`\n ", - "lensFormulaDocs.tinymath.logFunction.markdown": "\nオプションで底をとる対数。デフォルトでは自然対数の底*e*を使用します。\n\n例:値を格納するために必要なビット数を計算します\n```\nlog(sum(bytes))\nlog(sum(bytes), 2)\n```\n ", - "lensFormulaDocs.tinymath.lteFunction.markdown": "\n2つの値で小なりイコールの比較を実行します。\n「ifelse」比較関数の条件として使用されます。\n<=記号も使用できます。\n\n例:バイトの平均がメモリーの平均量以下である場合は、trueを返します\n`average(bytes) <= average(memory)`\n\n例: `lte(average(bytes), 1000)`\n ", - "lensFormulaDocs.tinymath.ltFunction.markdown": "\n2つの値で小なりの比較を実行します。\n「ifelse」比較関数の条件として使用されます。\n<記号も使用できます。\n\n例:バイトの平均がメモリーの平均量より少ない場合は、trueを返します\n`average(bytes) <= average(memory)`\n\n例: `lt(average(bytes), 1000)`\n ", - "lensFormulaDocs.tinymath.maxFunction.markdown": "\n2つの数値の間の最大値が検出されます。\n\n例:2つのフィールドの平均の最大値が検出されます。\n`pick_max(average(bytes), average(memory))`\n ", - "lensFormulaDocs.tinymath.minFunction.markdown": "\n2つの数値の間の最小値が検出されます。\n\n例:2つのフィールドの平均の最小値が検索されます。\n`pick_min(average(bytes), average(memory))`\n ", - "lensFormulaDocs.tinymath.modFunction.markdown": "\n関数を数値で除算した後の余り\n\n例:値の最後の3ビットを計算します\n`mod(sum(price), 1000)`\n ", - "lensFormulaDocs.tinymath.multiplyFunction.markdown": "\n2つの数値を乗算します。\n*記号も使用できます。\n\n例:現在の税率を入れた価格を計算します\n`sum(bytes) * last_value(tax_rate)`\n\n例:一定の税率を入れた価格を計算します\n`multiply(sum(price), 1.2)`\n ", - "lensFormulaDocs.tinymath.powFunction.markdown": "\n値を特定の乗数で累乗します。2番目の引数は必須です\n\n例:側面の長さに基づいて体積を計算します\n`pow(last_value(length), 3)`\n ", - "lensFormulaDocs.tinymath.roundFunction.markdown": "\n特定の小数位に四捨五入します。デフォルトは0です。\n\n例:セントに四捨五入します\n```\nround(sum(bytes))\nround(sum(bytes), 2)\n```\n ", - "lensFormulaDocs.tinymath.sqrtFunction.markdown": "\n正の値のみの平方根\n\n例:面積に基づいて側面の長さを計算します\n`sqrt(last_value(area))`\n ", - "lensFormulaDocs.tinymath.squareFunction.markdown": "\n値を2乗します\n\n例:側面の長さに基づいて面積を計算します\n`square(last_value(length))`\n ", - "lensFormulaDocs.tinymath.subtractFunction.markdown": "\n2番目の数値から1番目の数値を減算します。\n-記号も使用できます。\n\n例:フィールドの範囲を計算します\n`subtract(max(bytes), min(bytes))`\n ", - "lensFormulaDocs.documentation.filterRatioDescription.markdown": "### フィルター比率:\n\n`kql=''`を使用すると、1つのセットのドキュメントをフィルターして、同じグループの他のドキュメントと比較します。\n例:経時的なエラー率の変化を表示する\n\n```\ncount(kql='response.status_code > 400') / count()\n```\n ", - "lensFormulaDocs.documentation.markdown": "## 仕組み\n\nLens式では、Elasticsearchの集計および数学関数を使用して演算を実行できます\n。主に次の3種類の関数があります。\n\n* `sum(bytes)`などのElasticsearchメトリック\n* 時系列関数は`cumulative_sum()`などのElasticsearchメトリックを入力として使用します\n* `round()`などの数学関数\n\nこれらのすべての関数を使用する式の例:\n\n```\nround(100 * moving_average(\naverage(cpu.load.pct),\nwindow=10,\nkql='datacenter.name: east*'\n))\n```\n\nElasticsearchの関数はフィールド名を取り、フィールドは引用符で囲むこともできます。`sum(bytes)`は\nas `sum('bytes')`.\n\n一部の関数は、`moving_average(count(), window=5)`のような名前付き引数を取ります。\n\nElasticsearchメトリックはKQLまたはLucene構文を使用してフィルターできます。フィルターを追加するには、名前付き\nparameter `kql='field: value'` or `lucene=''`.KQLまたはLuceneクエリを作成するときには、必ず引用符を使用してください\n。検索が引用符で囲まれている場合は、`kql='Women's''のようにバックスラッシュでエスケープします。\n\n数学関数は位置引数を取ることができます。たとえば、pow(count(), 3)はcount() * count() * count()と同じです。\n\n+、-、/、*記号を使用して、基本演算を実行できます。\n ", - "lensFormulaDocs.documentation.percentOfTotalDescription.markdown": "### 合計の割合\n\nすべてのグループで式は`overall_sum`を計算できます。\nこれは各グループを合計の割合に変換できます。\n\n```\nsum(products.base_price) / overall_sum(sum(products.base_price))\n```\n ", - "lensFormulaDocs.documentation.recentChangeDescription.markdown": "### 最近の変更\n\n「reducedTimeRange='30m'」を使用して、グローバル時間範囲の最後と一致するメトリックの時間範囲で、フィルターを追加しました。これにより、どのくらいの値が最近変更されたのかを計算できます。\n\n```\nmax(system.network.in.bytes, reducedTimeRange=\"30m\")\n - min(system.network.in.bytes, reducedTimeRange=\"30m\")\n```\n ", - "lensFormulaDocs.documentation.weekOverWeekDescription.markdown": "### 週単位:\n\n`shift='1w'`を使用すると、前の週から各グループの値を取得します\n。時間シフトは*Top values*関数と使用しないでください。\n\n```\npercentile(system.network.in.bytes, percentile=99) /\npercentile(system.network.in.bytes, percentile=99, shift='1w')\n```\n ", - "lensFormulaDocs.cardinality.documentation.markdown": "\n指定されたフィールドの一意の値の数を計算します。数値、文字列、日付、ブール値で機能します。\n\n例:異なる製品の数を計算します。\n`unique_count(product.name)`\n\n例:「clothes」グループから異なる製品の数を計算します。\n`unique_count(product.name, kql='product.group=clothes')`\n ", - "lensFormulaDocs.count.documentation.markdown": "\nドキュメントの総数。フィールドを入力すると、フィールド値の合計数がカウントされます。1つのドキュメントに複数の値があるフィールドでCount関数を使用すると、すべての値がカウントされます。\n\n#### 例\n\nドキュメントの合計数を計算するには、count()を使用します。\n\nすべての注文書の製品数を計算するには、count(products.id)を使用します。\n\n特定のフィルターと一致するドキュメントの数を計算するには、count(kql='price > 500')を使用します。\n ", - "lensFormulaDocs.counterRate.documentation.markdown": "\n増加し続けるカウンターのレートを計算します。この関数は、経時的に単調に増加する種類の測定を含むカウンターメトリックフィールドでのみ結果を生成します。\n値が小さくなる場合は、カウンターリセットであると解釈されます。最も正確な結果を得るには、フィールドの「max`」で「counter_rate」を計算してください。\n\nこの計算はフィルターで定義された別の系列または上位値のディメンションに対して個別に実行されます。\n式で使用されるときには、現在の間隔を使用します。\n\n例:Memcachedサーバーで経時的に受信されたバイトの比率を可視化します。\n`counter_rate(max(memcached.stats.read.bytes))`\n ", - "lensFormulaDocs.cumulativeSum.documentation.markdown": "\n経時的なメトリックの累計値を計算し、系列のすべての前の値を各値に追加します。この関数を使用するには、日付ヒストグラムディメンションも構成する必要があります。\n\nこの計算はフィルターで定義された別の系列または上位値のディメンションに対して個別に実行されます。\n\n例:経時的に累積された受信バイト数を可視化します。\n`cumulative_sum(sum(bytes))`\n ", - "lensFormulaDocs.differences.documentation.markdown": "\n経時的にメトリックの最後の値に対する差異を計算します。この関数を使用するには、日付ヒストグラムディメンションも構成する必要があります。\n差異ではデータが連続する必要があります。差異を使用するときにデータが空の場合は、データヒストグラム間隔を大きくしてみてください。\n\nこの計算はフィルターで定義された別の系列または上位値のディメンションに対して個別に実行されます。\n\n例:経時的に受信したバイト数の変化を可視化します。\n`differences(sum(bytes))`\n ", - "lensFormulaDocs.lastValue.documentation.markdown": "\n最後のドキュメントからフィールドの値を返し、データビューのデフォルト時刻フィールドで並べ替えます。\n\nこの関数はエンティティの最新の状態を取得する際に役立ちます。\n\n例:サーバーAの現在のステータスを取得:\n`last_value(server.status, kql='server.name=\"A\"')`\n ", - "lensFormulaDocs.metric.documentation.markdown": "\nフィールドの{metric}を返します。この関数は数値フィールドでのみ動作します。\n\n例:価格の{metric}を取得:\n`{metric}(price)`\n\n例:英国からの注文の価格の{metric}を取得:\n`{metric}(price, kql='location:UK')`\n ", - "lensFormulaDocs.movingAverage.documentation.markdown": "\n経時的なメトリックの移動平均を計算します。最後のn番目の値を平均化し、現在の値を計算します。この関数を使用するには、日付ヒストグラムディメンションも構成する必要があります。\nデフォルトウィンドウ値は{defaultValue}です\n\nこの計算はフィルターで定義された別の系列または上位値のディメンションに対して個別に実行されます。\n\n指名パラメーター「window」を取ります。これは現在値の平均計算に含める最後の値の数を指定します。\n\n例:測定の線を平滑化:\n`moving_average(sum(bytes), window=5)`\n ", - "lensFormulaDocs.overall_average.documentation.markdown": "\n現在のグラフの系列のすべてのデータポイントのメトリックの平均を計算します。系列は日付ヒストグラムまたは間隔関数を使用してディメンションによって定義されます。\n上位の値やフィルターなどのデータを分解する他のディメンションは別の系列として処理されます。\n\n日付ヒストグラムまたは間隔関数が現在のグラフで使用されている場合、使用されている関数に関係なく、「overall_average」はすべてのディメンションで平均値を計算します。\n\n例:平均からの収束:\n`sum(bytes) - overall_average(sum(bytes))`\n ", - "lensFormulaDocs.overall_max.documentation.markdown": "\n現在のグラフの系列のすべてのデータポイントのメトリックの最大値を計算します。系列は日付ヒストグラムまたは間隔関数を使用してディメンションによって定義されます。\n上位の値やフィルターなどのデータを分解する他のディメンションは別の系列として処理されます。\n\n日付ヒストグラムまたは間隔関数が現在のグラフで使用されている場合、使用されている関数に関係なく、「overall_max」はすべてのディメンションで最大値を計算します。\n\n例:範囲の割合\n`(sum(bytes) - overall_min(sum(bytes))) / (overall_max(sum(bytes)) - overall_min(sum(bytes)))`\n ", - "lensFormulaDocs.overall_min.documentation.markdown": "\n現在のグラフの系列のすべてのデータポイントのメトリックの最小値を計算します。系列は日付ヒストグラムまたは間隔関数を使用してディメンションによって定義されます。\n上位の値やフィルターなどのデータを分解する他のディメンションは別の系列として処理されます。\n\n日付ヒストグラムまたは間隔関数が現在のグラフで使用されている場合、使用されている関数に関係なく、「overall_min」はすべてのディメンションで最小値を計算します。\n\n例:範囲の割合\n`(sum(bytes) - overall_min(sum(bytes)) / (overall_max(sum(bytes)) - overall_min(sum(bytes)))`\n ", - "lensFormulaDocs.overall_sum.documentation.markdown": "\n現在のグラフの系列のすべてのデータポイントのメトリックの合計を計算します。系列は日付ヒストグラムまたは間隔関数を使用してディメンションによって定義されます。\n上位の値やフィルターなどのデータを分解する他のディメンションは別の系列として処理されます。\n\n日付ヒストグラムまたは間隔関数が現在のグラフで使用されている場合、使用されている関数に関係なく、「overall_sum」はすべてのディメンションで合計値を計算します。\n\n例:合計の割合\n`sum(bytes) / overall_sum(sum(bytes))`\n ", - "lensFormulaDocs.percentile.documentation.markdown": "\nフィールドの値の指定された百分位数を返します。これはドキュメントに出現する値のnパーセントが小さい値です。\n\n例:値の95 %より大きいバイト数を取得:\n`percentile(bytes, percentile=95)`\n ", - "lensFormulaDocs.percentileRanks.documentation.markdown": "\n特定の値未満の値の割合が返されます。たとえば、値が観察された値の95%以上の場合、95パーセンタイルランクであるとされます。\n\n例:100未満の値のパーセンタイルを取得します。\n`percentile_rank(bytes, value=100)`\n ", - "lensFormulaDocs.standardDeviation.documentation.markdown": "\nフィールドの分散または散布度が返されます。この関数は数値フィールドでのみ動作します。\n\n#### 例\n\n価格の標準偏差を取得するには、standard_deviation(price)を使用します。\n\n英国からの注文書の価格の分散を取得するには、square(standard_deviation(price, kql='location:UK'))を使用します。\n ", - "lensFormulaDocs.time_scale.documentation.markdown": "\n\nこの高度な機能は、特定の期間に対してカウントと合計を正規化する際に役立ちます。すでに特定の期間に対して正規化され、保存されたメトリックとの統合が可能です。\n\nこの機能は、現在のグラフで日付ヒストグラム関数が使用されている場合にのみ使用できます。\n\n例:すでに正規化されているメトリックを、正規化が必要な別のメトリックと比較した比率。\n`normalize_by_unit(counter_rate(max(system.diskio.write.bytes)), unit='s') / last_value(apache.status.bytes_per_second)`\n ", "xpack.lens.AggBasedLabel": "集約に基づく可視化", "xpack.lens.app.addToLibrary": "ライブラリに保存", "xpack.lens.app.cancel": "キャンセル", @@ -22154,11 +22131,6 @@ "xpack.lens.fittingFunctionsTitle.lookahead": "次へ", "xpack.lens.fittingFunctionsTitle.none": "非表示", "xpack.lens.fittingFunctionsTitle.zero": "ゼロ", - "lensFormulaDocs.tinymath.base": "基数", - "lensFormulaDocs.boolean": "ブール", - "lensFormulaDocs.tinymath.condition": "条件", - "lensFormulaDocs.tinymath.decimals": "小数点以下", - "lensFormulaDocs.tinymath.defaultValue": "デフォルト", "xpack.lens.formula.disableWordWrapLabel": "単語の折り返しを無効にする", "xpack.lens.formula.editorHelpInlineHideLabel": "関数リファレンスを非表示", "xpack.lens.formula.editorHelpInlineHideToolTip": "関数リファレンスを非表示", @@ -22166,35 +22138,12 @@ "xpack.lens.formula.fullScreenEnterLabel": "拡張", "xpack.lens.formula.fullScreenExitLabel": "縮小", "xpack.lens.formula.kqlExtraArguments": "[kql]?:文字列、[lucene]?:文字列", - "lensFormulaDocs.tinymath.left": "左", - "lensFormulaDocs.tinymath.max": "最高", - "lensFormulaDocs.tinymath.min": "分", - "lensFormulaDocs.number": "数字", "xpack.lens.formula.reducedTimeRangeExtraArguments": "[reducedTimeRange]?: string", "xpack.lens.formula.requiredArgument": "必須", - "lensFormulaDocs.tinymath.right": "右", "xpack.lens.formula.shiftExtraArguments": "[shift]?:文字列", - "lensFormulaDocs.string": "文字列", - "lensFormulaDocs.tinymath.value": "値", - "lensFormulaDocs.CommonFormulaDocumentation": "最も一般的な式は2つの値を分割して割合を生成します。正確に表示するには、[値形式]を[割合]に設定します。", - "lensFormulaDocs.documentation.columnCalculationSection": "列計算", - "lensFormulaDocs.documentation.columnCalculationSectionDescription": "各行でこれらの関数が実行されますが、コンテキストとして列全体が提供されます。これはウィンドウ関数とも呼ばれます。", - "lensFormulaDocs.documentation.comparisonSection": "比較", - "lensFormulaDocs.documentation.comparisonSectionDescription": "これらの関数は値を比較するために使用されます。", - "lensFormulaDocs.documentation.constantsSection": "Kibanaコンテキスト", - "lensFormulaDocs.documentation.constantsSectionDescription": "これらの関数は、Kibanaのコンテキスト変数(日付ヒストグラムの「interval」、現在の「now」、選択した「time_range」)を取得するために使用され、日付の計算処理を行うのに役立ちます。", - "lensFormulaDocs.documentation.elasticsearchSection": "Elasticsearch", - "lensFormulaDocs.documentation.elasticsearchSectionDescription": "これらの関数は結果テーブルの各行の未加工ドキュメントで実行され、内訳ディメンションと一致するすべてのドキュメントを単一の値に集約します。", - "lensFormulaDocs.documentation.filterRatio": "フィルター比率", - "lensFormulaDocs.documentation.mathSection": "数学処理", - "lensFormulaDocs.documentation.mathSectionDescription": "これらの関数は、他の関数で計算された同じ行の単一の値を使用して、結果テーブルの各行で実行されます。", - "lensFormulaDocs.documentation.percentOfTotal": "合計の割合", - "lensFormulaDocs.documentation.recentChange": "最近の変更", - "lensFormulaDocs.documentation.weekOverWeek": "週単位", "xpack.lens.formulaDocumentationHeading": "仕組み", "xpack.lens.formulaEnableWordWrapLabel": "単語の折り返しを有効にする", "xpack.lens.formulaExampleMarkdown": "例", - "lensFormulaDocs.frequentlyUsedHeading": "一般的な式", "xpack.lens.formulaPlaceholderText": "関数を演算と組み合わせて式を入力します。例:", "xpack.lens.fullExtent.niceValues": "切りの良い値に端数処理", "xpack.lens.functions.collapse.args.byHelpText": "グループ化の基準となる列。この列はそのまま保持されます", @@ -22253,29 +22202,20 @@ "xpack.lens.indexPattern.allFieldsLabelHelp": "使用可能なフィールドをワークスペースまでドラッグし、ビジュアライゼーションを作成します。使用可能なフィールドを変更するには、別のデータビューを選択するか、クエリを編集するか、別の時間範囲を使用します。一部のフィールドタイプは、完全なテキストおよびグラフィックフィールドを含む Lens では、ビジュアライゼーションできません。", "xpack.lens.indexPattern.ascendingCountPrecisionErrorWarning.link": "ドキュメントをご覧ください", "xpack.lens.indexPattern.availableFieldsLabel": "利用可能なフィールド", - "lensFormulaDocs.avg": "平均", "xpack.lens.indexPattern.avg.description": "集約されたドキュメントから抽出された数値の平均値を計算する単一値メトリック集約", "xpack.lens.indexPattern.avg.quickFunctionDescription": "数値フィールドの集合の平均値。", "xpack.lens.indexPattern.bitsFormatLabel": "ビット(1000)", "xpack.lens.indexPattern.bytesFormatLabel": "バイト(1024)", - "lensFormulaDocs.cardinality": "ユニークカウント", "xpack.lens.indexPattern.cardinality.documentation.quick": "\n指定した数値、文字列、日付、ブール値フィールドの一意の値の数。\n ", - "lensFormulaDocs.cardinality.signature": "フィールド:文字列", "xpack.lens.indexPattern.changeDataViewTitle": "データビュー", "xpack.lens.indexPattern.chooseField": "フィールド", "xpack.lens.indexPattern.chooseFieldLabel": "この関数を使用するには、フィールドを選択してください。", "xpack.lens.indexPattern.chooseSubFunction": "サブ関数を選択", "xpack.lens.indexPattern.columnFormatLabel": "値の形式", "xpack.lens.indexPattern.compactLabel": "値の圧縮", - "lensFormulaDocs.count": "カウント", "xpack.lens.indexPattern.count.documentation.quick": "\nドキュメントの総数。フィールドを入力すると、フィールド値の合計数がカウントされます。1つのドキュメントに複数の値があるフィールドでCount関数を使用すると、すべての値がカウントされます。\n ", - "lensFormulaDocs.count.signature": "[field: string]", - "lensFormulaDocs.counterRate": "カウンターレート", "xpack.lens.indexPattern.counterRate.documentation.quick": "\n 増加を続ける時系列メトリックの経時的な変化率。\n ", - "lensFormulaDocs.counterRate.signature": "メトリック:数値", "xpack.lens.indexPattern.countOf": "レコード数", - "lensFormulaDocs.cumulative_sum.signature": "メトリック:数値", - "lensFormulaDocs.cumulativeSum": "累積和", "xpack.lens.indexPattern.cumulativeSum.documentation.quick": "\n 経時的に増加するすべての値の合計。\n ", "xpack.lens.indexPattern.custom.externalDoc": "数値書式構文", "xpack.lens.indexPattern.custom.patternLabel": "フォーマット", @@ -22305,9 +22245,7 @@ "xpack.lens.indexPattern.dateRange.noTimeRange": "現在の時間範囲がありません", "xpack.lens.indexPattern.decimalPlacesLabel": "小数点以下", "xpack.lens.indexPattern.defaultFormatLabel": "デフォルト", - "lensFormulaDocs.derivative": "差異", "xpack.lens.indexPattern.differences.documentation.quick": "\n 後続の間隔の値の変化。\n ", - "lensFormulaDocs.differences.signature": "メトリック:数値", "xpack.lens.indexPattern.dimensionEditor.headingAppearance": "見た目", "xpack.lens.indexPattern.dimensionEditor.headingData": "データ", "xpack.lens.indexPattern.dimensionEditor.headingFormula": "式", @@ -22360,30 +22298,22 @@ "xpack.lens.indexPattern.invalidOperationLabel": "選択した関数はこのフィールドで動作しません。", "xpack.lens.indexPattern.invalidReducedTimeRange": "縮小された時間範囲が無効です。正の整数の後に単位s、m、h、d、w、M、yのいずれかを入力します。例:3時間は3hです", "xpack.lens.indexPattern.invalidTimeShift": "無効な時間シフトです。正の整数の後に単位s、m、h、d、w、M、yのいずれかを入力します。例:3時間は3hです", - "lensFormulaDocs.lastValue": "最終値", "xpack.lens.indexPattern.lastValue.disabled": "この関数には、データビューの日付フィールドが必要です", "xpack.lens.indexPattern.lastValue.documentation.quick": "\n最後のドキュメントのフィールドの値。データビューのデフォルト時刻フィールドで並べ替えられます。\n ", "xpack.lens.indexPattern.lastValue.showArrayValues": "ゼロ値を表示", "xpack.lens.indexPattern.lastValue.showArrayValuesExplanation": "各最後のドキュメントのこのフィールドに関連付けられたすべての値を表示します。", "xpack.lens.indexPattern.lastValue.showArrayValuesWithTopValuesWarning": "配列値を表示するときには、このフィールドを使用して上位の値をランク付けできません。", - "lensFormulaDocs.lastValue.signature": "フィールド:文字列", "xpack.lens.indexPattern.lastValue.sortField": "日付フィールドで並べ替え", "xpack.lens.indexPattern.lastValue.sortFieldPlaceholder": "並べ替えフィールド", - "lensFormulaDocs.max": "最高", "xpack.lens.indexPattern.max.description": "集約されたドキュメントから抽出された数値の最大値を返す単一値メトリック集約。", "xpack.lens.indexPattern.max.quickFunctionDescription": "数値フィールドの最大値。", - "lensFormulaDocs.median": "中央", "xpack.lens.indexPattern.median.description": "集約されたドキュメントから抽出された中央値を計算する単一値メトリック集約。", "xpack.lens.indexPattern.median.quickFunctionDescription": "数値フィールドの中央値。", "xpack.lens.indexPattern.metaFieldsLabel": "メタフィールド", - "lensFormulaDocs.metric.signature": "フィールド:文字列", - "lensFormulaDocs.min": "最低", "xpack.lens.indexPattern.min.description": "集約されたドキュメントから抽出された数値の最小値を返す単一値メトリック集約。", "xpack.lens.indexPattern.min.quickFunctionDescription": "数値フィールドの最小値。", "xpack.lens.indexPattern.missingFieldLabel": "見つからないフィールド", "xpack.lens.indexPattern.moveToWorkspaceNotAvailable": "このフィールドを可視化するには、直接任意のレイヤーに追加してください。現在の設定では、このフィールドをワークスペースに追加することはサポートされていません。", - "lensFormulaDocs.moving_average.signature": "メトリック:数値、[window]:数値", - "lensFormulaDocs.movingAverage": "移動平均", "xpack.lens.indexPattern.movingAverage.basicExplanation": "移動平均はデータ全体でウィンドウをスライドし、平均値を表示します。移動平均は日付ヒストグラムでのみサポートされています。", "xpack.lens.indexPattern.movingAverage.documentation.quick": "\n 経時的な値の移動範囲の平均。\n ", "xpack.lens.indexPattern.movingAverage.limitations": "最初の移動平均値は2番目の項目から開始します。", @@ -22399,20 +22329,12 @@ "xpack.lens.indexPattern.noRealMetricError": "静的値のみのレイヤーには結果が表示されません。1つ以上の動的メトリックを使用してください", "xpack.lens.indexPattern.notAbsoluteTimeShift": "無効な時間シフトです。", "xpack.lens.indexPattern.numberFormatLabel": "数字", - "lensFormulaDocs.overall_metric": "メトリック:数値", - "lensFormulaDocs.overallMax": "全体最高", - "lensFormulaDocs.overallMin": "全体最低", - "lensFormulaDocs.overallSum": "全体合計", "xpack.lens.indexPattern.percentFormatLabel": "割合(%)", - "lensFormulaDocs.percentile": "パーセンタイル", "xpack.lens.indexPattern.percentile.documentation.quick": "\n すべてのドキュメントで発生する値のnパーセントよりも小さい最大値。\n ", "xpack.lens.indexPattern.percentile.percentileRanksValue": "パーセンタイル順位値", "xpack.lens.indexPattern.percentile.percentileValue": "パーセンタイル", - "lensFormulaDocs.percentile.signature": "フィールド:文字列、[percentile]:数値", - "lensFormulaDocs.percentileRank": "パーセンタイル順位", "xpack.lens.indexPattern.percentileRanks.documentation.quick": "\n特定の値未満の値の割合。たとえば、値が計算された値の95%以上の場合、95パーセンタイル順位です。\n ", "xpack.lens.indexPattern.percentileRanks.errorMessage": "パーセンタイル順位値は数値でなければなりません", - "lensFormulaDocs.percentileRanks.signature": "フィールド: 文字列, [value]: 数値", "xpack.lens.indexPattern.precisionErrorWarning.accuracyDisabled.shortMessage": "これは近似値の可能性があります。より正確な結果を得るために精度モードを有効にできますが、Elasticsearchクラスターの負荷が大きくなります。", "xpack.lens.indexPattern.precisionErrorWarning.accuracyEnabled.shortMessage": "これは近似値の可能性があります。より正確な結果を得るには、フィルターを使用するか、上位の値の数を増やしてください。", "xpack.lens.indexPattern.precisionErrorWarning.ascendingCountPrecisionErrorWarning.shortMessage": "データのインデックスの作成方法により、近似される場合があります。より正確な結果を得るには、希少性でソートしてください。", @@ -22462,7 +22384,6 @@ "xpack.lens.indexPattern.samplingPerLayer.fallbackLayerName": "データレイヤー", "xpack.lens.indexPattern.settingsSamplingUnsupported": "この関数を選択すると、関数が正常に機能するように、このレイヤーのサンプリングが100%に変更されます。", "xpack.lens.indexPattern.sortField.invalid": "無効なフィールドです。データビューを確認するか、別のフィールドを選択してください。", - "lensFormulaDocs.standardDeviation": "標準偏差", "xpack.lens.indexPattern.standardDeviation.description": "集約されたドキュメントから抽出された数値の標準偏差を計算する単一値メトリック集約", "xpack.lens.indexPattern.standardDeviation.quickFunctionDescription": "フィールド値の変動量である数値フィールドの値の標準偏差。", "xpack.lens.indexPattern.staticValue.label": "基準線値", @@ -22472,7 +22393,6 @@ "xpack.lens.indexPattern.staticValueWarningText": "固定値を上書きするには、クイック関数を選択します", "xpack.lens.indexPattern.suffixLabel": "接尾辞", "xpack.lens.indexpattern.suggestions.overTimeLabel": "一定時間", - "lensFormulaDocs.sum": "合計", "xpack.lens.indexPattern.sum.description": "集約されたドキュメントから抽出された数値を合計する単一値メトリック集約。", "xpack.lens.indexPattern.sum.quickFunctionDescription": "数値フィールドの値の合計量。", "xpack.lens.indexPattern.switchToRare": "希少性でランク", @@ -22510,8 +22430,6 @@ "xpack.lens.indexPattern.terms.size": "値の数", "xpack.lens.indexPattern.termsWithMultipleShifts": "単一のレイヤーでは、メトリックを異なる時間シフトと動的な上位の値と組み合わせることができません。すべてのメトリックで同じ時間シフト値を使用するか、上位の値ではなくフィルターを使用します。", "xpack.lens.indexPattern.termsWithMultipleShiftsFixActionLabel": "フィルターを使用", - "lensFormulaDocs.time_scale": "メトリック:数値、単位:s|m|h|d|w|M|y", - "lensFormulaDocs.timeScale": "単位で正規化", "xpack.lens.indexPattern.timeScale.label": "単位で正規化", "xpack.lens.indexPattern.timeScale.missingUnit": "単位による正規化の単位が指定されていません。", "xpack.lens.indexPattern.timeScale.tooltip": "基本の日付間隔に関係なく、常に指定された時間単位のレートとして表示されるように値を正規化します。", @@ -22956,6 +22874,113 @@ "xpack.lens.xyVisualization.stackedPercentageBarHorizontalLabel": "H.割合棒", "xpack.lens.xyVisualization.stackedPercentageBarLabel": "縦棒割合", "xpack.lens.xyVisualization.xyLabel": "XY", + "lensFormulaDocs.tinymath.absFunction.markdown": "\n絶対値を計算します。負の値は-1で乗算されます。正の値は同じままです。\n\n例:海水位までの平均距離を計算します `abs(average(altitude))`\n ", + "lensFormulaDocs.tinymath.addFunction.markdown": "\n2つの数値を加算します。\n+記号も使用できます。\n\n例:2つのフィールドの合計を計算します\n\n`sum(price) + sum(tax)`\n\n例:固定値でカウントをオフセットします\n\n`add(count(), 5)`\n ", + "lensFormulaDocs.tinymath.cbrtFunction.markdown": "\n値の立方根。\n\n例:体積から側面の長さを計算します\n`cbrt(last_value(volume))`\n ", + "lensFormulaDocs.tinymath.ceilFunction.markdown": "\n値の上限(切り上げ)。\n\n例:価格を次のドル単位まで切り上げます\n`ceil(sum(price))`\n ", + "lensFormulaDocs.tinymath.clampFunction.markdown": "\n最小値から最大値までの値を制限します。\n\n例:確実に異常値を特定します\n```\nclamp(\n average(bytes),\n percentile(bytes, percentile=5),\n percentile(bytes, percentile=95)\n)\n```\n", + "lensFormulaDocs.tinymath.cubeFunction.markdown": "\n数値の三乗を計算します。\n\n例:側面の長さから体積を計算します\n`cube(last_value(length))`\n ", + "lensFormulaDocs.tinymath.defaultFunction.markdown": "\n値がヌルのときにデフォルトの数値を返します。\n\n例:フィールドにデータがない場合は、-1を返します\n`defaults(average(bytes), -1)`\n", + "lensFormulaDocs.tinymath.divideFunction.markdown": "\n1番目の数値を2番目の数値で除算します。\n/記号も使用できます\n\n例:利益率を計算します\n`sum(profit) / sum(revenue)`\n\n例:`divide(sum(bytes), 2)`\n ", + "lensFormulaDocs.tinymath.eqFunction.markdown": "\n2つの値で等価性の比較を実行します。\n「ifelse」比較関数の条件として使用されます。\n==記号も使用できます。\n\n例:バイトの平均が平均メモリーと同じ量の場合は、trueを返します。\n`average(bytes) == average(memory)`\n\n例: `eq(sum(bytes), 1000000)`\n ", + "lensFormulaDocs.tinymath.expFunction.markdown": "\n*e*をn乗します。\n\n例:自然指数関数を計算します\n\n`exp(last_value(duration))`\n ", + "lensFormulaDocs.tinymath.fixFunction.markdown": "\n正の値の場合は、下限を取ります。負の値の場合は、上限を取ります。\n\n例:ゼロに向かって端数処理します\n`fix(sum(profit))`\n ", + "lensFormulaDocs.tinymath.floorFunction.markdown": "\n最も近い整数値まで切り捨てます\n\n例:価格を切り捨てます\n`floor(sum(price))`\n ", + "lensFormulaDocs.tinymath.gteFunction.markdown": "\n2つの値で大なりの比較を実行します。\n「ifelse」比較関数の条件として使用されます。\n>=記号も使用できます。\n\n例:バイトの平均がメモリーの平均量以上である場合は、trueを返します\n`average(bytes) >= average(memory)`\n\n例: `gte(average(bytes), 1000)`\n ", + "lensFormulaDocs.tinymath.gtFunction.markdown": "\n2つの値で大なりの比較を実行します。\n「ifelse」比較関数の条件として使用されます。\n>記号も使用できます。\n\n例:バイトの平均がメモリーの平均量より大きい場合は、trueを返します\n`average(bytes) > average(memory)`\n\n例: `gt(average(bytes), 1000)`\n ", + "lensFormulaDocs.tinymath.ifElseFunction.markdown": "\n条件の要素がtrueかfalseかに応じて、値を返します。\n\n例:顧客ごとの平均収益。ただし、場合によっては、顧客IDが提供されないことがあり、その場合は別の顧客としてカウントされます\n`sum(total)/(unique_count(customer_id) + ifelse( count() > count(kql='customer_id:*'), 1, 0))`\n ", + "lensFormulaDocs.tinymath.logFunction.markdown": "\nオプションで底をとる対数。デフォルトでは自然対数の底*e*を使用します。\n\n例:値を格納するために必要なビット数を計算します\n```\nlog(sum(bytes))\nlog(sum(bytes), 2)\n```\n ", + "lensFormulaDocs.tinymath.lteFunction.markdown": "\n2つの値で小なりイコールの比較を実行します。\n「ifelse」比較関数の条件として使用されます。\n<=記号も使用できます。\n\n例:バイトの平均がメモリーの平均量以下である場合は、trueを返します\n`average(bytes) <= average(memory)`\n\n例: `lte(average(bytes), 1000)`\n ", + "lensFormulaDocs.tinymath.ltFunction.markdown": "\n2つの値で小なりの比較を実行します。\n「ifelse」比較関数の条件として使用されます。\n<記号も使用できます。\n\n例:バイトの平均がメモリーの平均量より少ない場合は、trueを返します\n`average(bytes) <= average(memory)`\n\n例: `lt(average(bytes), 1000)`\n ", + "lensFormulaDocs.tinymath.maxFunction.markdown": "\n2つの数値の間の最大値が検出されます。\n\n例:2つのフィールドの平均の最大値が検出されます。\n`pick_max(average(bytes), average(memory))`\n ", + "lensFormulaDocs.tinymath.minFunction.markdown": "\n2つの数値の間の最小値が検出されます。\n\n例:2つのフィールドの平均の最小値が検索されます。\n`pick_min(average(bytes), average(memory))`\n ", + "lensFormulaDocs.tinymath.modFunction.markdown": "\n関数を数値で除算した後の余り\n\n例:値の最後の3ビットを計算します\n`mod(sum(price), 1000)`\n ", + "lensFormulaDocs.tinymath.multiplyFunction.markdown": "\n2つの数値を乗算します。\n*記号も使用できます。\n\n例:現在の税率を入れた価格を計算します\n`sum(bytes) * last_value(tax_rate)`\n\n例:一定の税率を入れた価格を計算します\n`multiply(sum(price), 1.2)`\n ", + "lensFormulaDocs.tinymath.powFunction.markdown": "\n値を特定の乗数で累乗します。2番目の引数は必須です\n\n例:側面の長さに基づいて体積を計算します\n`pow(last_value(length), 3)`\n ", + "lensFormulaDocs.tinymath.roundFunction.markdown": "\n特定の小数位に四捨五入します。デフォルトは0です。\n\n例:セントに四捨五入します\n```\nround(sum(bytes))\nround(sum(bytes), 2)\n```\n ", + "lensFormulaDocs.tinymath.sqrtFunction.markdown": "\n正の値のみの平方根\n\n例:面積に基づいて側面の長さを計算します\n`sqrt(last_value(area))`\n ", + "lensFormulaDocs.tinymath.squareFunction.markdown": "\n値を2乗します\n\n例:側面の長さに基づいて面積を計算します\n`square(last_value(length))`\n ", + "lensFormulaDocs.tinymath.subtractFunction.markdown": "\n2番目の数値から1番目の数値を減算します。\n-記号も使用できます。\n\n例:フィールドの範囲を計算します\n`subtract(max(bytes), min(bytes))`\n ", + "lensFormulaDocs.documentation.filterRatioDescription.markdown": "### フィルター比率:\n\n`kql=''`を使用すると、1つのセットのドキュメントをフィルターして、同じグループの他のドキュメントと比較します。\n例:経時的なエラー率の変化を表示する\n\n```\ncount(kql='response.status_code > 400') / count()\n```\n ", + "lensFormulaDocs.documentation.markdown": "## 仕組み\n\nLens式では、Elasticsearchの集計および数学関数を使用して演算を実行できます\n。主に次の3種類の関数があります。\n\n* `sum(bytes)`などのElasticsearchメトリック\n* 時系列関数は`cumulative_sum()`などのElasticsearchメトリックを入力として使用します\n* `round()`などの数学関数\n\nこれらのすべての関数を使用する式の例:\n\n```\nround(100 * moving_average(\naverage(cpu.load.pct),\nwindow=10,\nkql='datacenter.name: east*'\n))\n```\n\nElasticsearchの関数はフィールド名を取り、フィールドは引用符で囲むこともできます。`sum(bytes)`は\nas `sum('bytes')`.\n\n一部の関数は、`moving_average(count(), window=5)`のような名前付き引数を取ります。\n\nElasticsearchメトリックはKQLまたはLucene構文を使用してフィルターできます。フィルターを追加するには、名前付き\nparameter `kql='field: value'` or `lucene=''`.KQLまたはLuceneクエリを作成するときには、必ず引用符を使用してください\n。検索が引用符で囲まれている場合は、`kql='Women's''のようにバックスラッシュでエスケープします。\n\n数学関数は位置引数を取ることができます。たとえば、pow(count(), 3)はcount() * count() * count()と同じです。\n\n+、-、/、*記号を使用して、基本演算を実行できます。\n ", + "lensFormulaDocs.documentation.percentOfTotalDescription.markdown": "### 合計の割合\n\nすべてのグループで式は`overall_sum`を計算できます。\nこれは各グループを合計の割合に変換できます。\n\n```\nsum(products.base_price) / overall_sum(sum(products.base_price))\n```\n ", + "lensFormulaDocs.documentation.recentChangeDescription.markdown": "### 最近の変更\n\n「reducedTimeRange='30m'」を使用して、グローバル時間範囲の最後と一致するメトリックの時間範囲で、フィルターを追加しました。これにより、どのくらいの値が最近変更されたのかを計算できます。\n\n```\nmax(system.network.in.bytes, reducedTimeRange=\"30m\")\n - min(system.network.in.bytes, reducedTimeRange=\"30m\")\n```\n ", + "lensFormulaDocs.documentation.weekOverWeekDescription.markdown": "### 週単位:\n\n`shift='1w'`を使用すると、前の週から各グループの値を取得します\n。時間シフトは*Top values*関数と使用しないでください。\n\n```\npercentile(system.network.in.bytes, percentile=99) /\npercentile(system.network.in.bytes, percentile=99, shift='1w')\n```\n ", + "lensFormulaDocs.cardinality.documentation.markdown": "\n指定されたフィールドの一意の値の数を計算します。数値、文字列、日付、ブール値で機能します。\n\n例:異なる製品の数を計算します。\n`unique_count(product.name)`\n\n例:「clothes」グループから異なる製品の数を計算します。\n`unique_count(product.name, kql='product.group=clothes')`\n ", + "lensFormulaDocs.count.documentation.markdown": "\nドキュメントの総数。フィールドを入力すると、フィールド値の合計数がカウントされます。1つのドキュメントに複数の値があるフィールドでCount関数を使用すると、すべての値がカウントされます。\n\n#### 例\n\nドキュメントの合計数を計算するには、count()を使用します。\n\nすべての注文書の製品数を計算するには、count(products.id)を使用します。\n\n特定のフィルターと一致するドキュメントの数を計算するには、count(kql='price > 500')を使用します。\n ", + "lensFormulaDocs.counterRate.documentation.markdown": "\n増加し続けるカウンターのレートを計算します。この関数は、経時的に単調に増加する種類の測定を含むカウンターメトリックフィールドでのみ結果を生成します。\n値が小さくなる場合は、カウンターリセットであると解釈されます。最も正確な結果を得るには、フィールドの「max`」で「counter_rate」を計算してください。\n\nこの計算はフィルターで定義された別の系列または上位値のディメンションに対して個別に実行されます。\n式で使用されるときには、現在の間隔を使用します。\n\n例:Memcachedサーバーで経時的に受信されたバイトの比率を可視化します。\n`counter_rate(max(memcached.stats.read.bytes))`\n ", + "lensFormulaDocs.cumulativeSum.documentation.markdown": "\n経時的なメトリックの累計値を計算し、系列のすべての前の値を各値に追加します。この関数を使用するには、日付ヒストグラムディメンションも構成する必要があります。\n\nこの計算はフィルターで定義された別の系列または上位値のディメンションに対して個別に実行されます。\n\n例:経時的に累積された受信バイト数を可視化します。\n`cumulative_sum(sum(bytes))`\n ", + "lensFormulaDocs.differences.documentation.markdown": "\n経時的にメトリックの最後の値に対する差異を計算します。この関数を使用するには、日付ヒストグラムディメンションも構成する必要があります。\n差異ではデータが連続する必要があります。差異を使用するときにデータが空の場合は、データヒストグラム間隔を大きくしてみてください。\n\nこの計算はフィルターで定義された別の系列または上位値のディメンションに対して個別に実行されます。\n\n例:経時的に受信したバイト数の変化を可視化します。\n`differences(sum(bytes))`\n ", + "lensFormulaDocs.lastValue.documentation.markdown": "\n最後のドキュメントからフィールドの値を返し、データビューのデフォルト時刻フィールドで並べ替えます。\n\nこの関数はエンティティの最新の状態を取得する際に役立ちます。\n\n例:サーバーAの現在のステータスを取得:\n`last_value(server.status, kql='server.name=\"A\"')`\n ", + "lensFormulaDocs.metric.documentation.markdown": "\nフィールドの{metric}を返します。この関数は数値フィールドでのみ動作します。\n\n例:価格の{metric}を取得:\n`{metric}(price)`\n\n例:英国からの注文の価格の{metric}を取得:\n`{metric}(price, kql='location:UK')`\n ", + "lensFormulaDocs.movingAverage.documentation.markdown": "\n経時的なメトリックの移動平均を計算します。最後のn番目の値を平均化し、現在の値を計算します。この関数を使用するには、日付ヒストグラムディメンションも構成する必要があります。\nデフォルトウィンドウ値は{defaultValue}です\n\nこの計算はフィルターで定義された別の系列または上位値のディメンションに対して個別に実行されます。\n\n指名パラメーター「window」を取ります。これは現在値の平均計算に含める最後の値の数を指定します。\n\n例:測定の線を平滑化:\n`moving_average(sum(bytes), window=5)`\n ", + "lensFormulaDocs.overall_average.documentation.markdown": "\n現在のグラフの系列のすべてのデータポイントのメトリックの平均を計算します。系列は日付ヒストグラムまたは間隔関数を使用してディメンションによって定義されます。\n上位の値やフィルターなどのデータを分解する他のディメンションは別の系列として処理されます。\n\n日付ヒストグラムまたは間隔関数が現在のグラフで使用されている場合、使用されている関数に関係なく、「overall_average」はすべてのディメンションで平均値を計算します。\n\n例:平均からの収束:\n`sum(bytes) - overall_average(sum(bytes))`\n ", + "lensFormulaDocs.overall_max.documentation.markdown": "\n現在のグラフの系列のすべてのデータポイントのメトリックの最大値を計算します。系列は日付ヒストグラムまたは間隔関数を使用してディメンションによって定義されます。\n上位の値やフィルターなどのデータを分解する他のディメンションは別の系列として処理されます。\n\n日付ヒストグラムまたは間隔関数が現在のグラフで使用されている場合、使用されている関数に関係なく、「overall_max」はすべてのディメンションで最大値を計算します。\n\n例:範囲の割合\n`(sum(bytes) - overall_min(sum(bytes))) / (overall_max(sum(bytes)) - overall_min(sum(bytes)))`\n ", + "lensFormulaDocs.overall_min.documentation.markdown": "\n現在のグラフの系列のすべてのデータポイントのメトリックの最小値を計算します。系列は日付ヒストグラムまたは間隔関数を使用してディメンションによって定義されます。\n上位の値やフィルターなどのデータを分解する他のディメンションは別の系列として処理されます。\n\n日付ヒストグラムまたは間隔関数が現在のグラフで使用されている場合、使用されている関数に関係なく、「overall_min」はすべてのディメンションで最小値を計算します。\n\n例:範囲の割合\n`(sum(bytes) - overall_min(sum(bytes)) / (overall_max(sum(bytes)) - overall_min(sum(bytes)))`\n ", + "lensFormulaDocs.overall_sum.documentation.markdown": "\n現在のグラフの系列のすべてのデータポイントのメトリックの合計を計算します。系列は日付ヒストグラムまたは間隔関数を使用してディメンションによって定義されます。\n上位の値やフィルターなどのデータを分解する他のディメンションは別の系列として処理されます。\n\n日付ヒストグラムまたは間隔関数が現在のグラフで使用されている場合、使用されている関数に関係なく、「overall_sum」はすべてのディメンションで合計値を計算します。\n\n例:合計の割合\n`sum(bytes) / overall_sum(sum(bytes))`\n ", + "lensFormulaDocs.percentile.documentation.markdown": "\nフィールドの値の指定された百分位数を返します。これはドキュメントに出現する値のnパーセントが小さい値です。\n\n例:値の95 %より大きいバイト数を取得:\n`percentile(bytes, percentile=95)`\n ", + "lensFormulaDocs.percentileRanks.documentation.markdown": "\n特定の値未満の値の割合が返されます。たとえば、値が観察された値の95%以上の場合、95パーセンタイルランクであるとされます。\n\n例:100未満の値のパーセンタイルを取得します。\n`percentile_rank(bytes, value=100)`\n ", + "lensFormulaDocs.standardDeviation.documentation.markdown": "\nフィールドの分散または散布度が返されます。この関数は数値フィールドでのみ動作します。\n\n#### 例\n\n価格の標準偏差を取得するには、standard_deviation(price)を使用します。\n\n英国からの注文書の価格の分散を取得するには、square(standard_deviation(price, kql='location:UK'))を使用します。\n ", + "lensFormulaDocs.time_scale.documentation.markdown": "\n\nこの高度な機能は、特定の期間に対してカウントと合計を正規化する際に役立ちます。すでに特定の期間に対して正規化され、保存されたメトリックとの統合が可能です。\n\nこの機能は、現在のグラフで日付ヒストグラム関数が使用されている場合にのみ使用できます。\n\n例:すでに正規化されているメトリックを、正規化が必要な別のメトリックと比較した比率。\n`normalize_by_unit(counter_rate(max(system.diskio.write.bytes)), unit='s') / last_value(apache.status.bytes_per_second)`\n ", + "lensFormulaDocs.tinymath.base": "基数", + "lensFormulaDocs.boolean": "ブール", + "lensFormulaDocs.tinymath.condition": "条件", + "lensFormulaDocs.tinymath.decimals": "小数点以下", + "lensFormulaDocs.tinymath.defaultValue": "デフォルト", + "lensFormulaDocs.tinymath.left": "左", + "lensFormulaDocs.tinymath.max": "最高", + "lensFormulaDocs.tinymath.min": "分", + "lensFormulaDocs.number": "数字", + "lensFormulaDocs.tinymath.right": "右", + "lensFormulaDocs.string": "文字列", + "lensFormulaDocs.tinymath.value": "値", + "lensFormulaDocs.CommonFormulaDocumentation": "最も一般的な式は2つの値を分割して割合を生成します。正確に表示するには、[値形式]を[割合]に設定します。", + "lensFormulaDocs.documentation.columnCalculationSection": "列計算", + "lensFormulaDocs.documentation.columnCalculationSectionDescription": "各行でこれらの関数が実行されますが、コンテキストとして列全体が提供されます。これはウィンドウ関数とも呼ばれます。", + "lensFormulaDocs.documentation.comparisonSection": "比較", + "lensFormulaDocs.documentation.comparisonSectionDescription": "これらの関数は値を比較するために使用されます。", + "lensFormulaDocs.documentation.constantsSection": "Kibanaコンテキスト", + "lensFormulaDocs.documentation.constantsSectionDescription": "これらの関数は、Kibanaのコンテキスト変数(日付ヒストグラムの「interval」、現在の「now」、選択した「time_range」)を取得するために使用され、日付の計算処理を行うのに役立ちます。", + "lensFormulaDocs.documentation.elasticsearchSection": "Elasticsearch", + "lensFormulaDocs.documentation.elasticsearchSectionDescription": "これらの関数は結果テーブルの各行の未加工ドキュメントで実行され、内訳ディメンションと一致するすべてのドキュメントを単一の値に集約します。", + "lensFormulaDocs.documentation.filterRatio": "フィルター比率", + "lensFormulaDocs.documentation.mathSection": "数学処理", + "lensFormulaDocs.documentation.mathSectionDescription": "これらの関数は、他の関数で計算された同じ行の単一の値を使用して、結果テーブルの各行で実行されます。", + "lensFormulaDocs.documentation.percentOfTotal": "合計の割合", + "lensFormulaDocs.documentation.recentChange": "最近の変更", + "lensFormulaDocs.documentation.weekOverWeek": "週単位", + "lensFormulaDocs.frequentlyUsedHeading": "一般的な式", + "lensFormulaDocs.avg": "平均", + "lensFormulaDocs.cardinality": "ユニークカウント", + "lensFormulaDocs.cardinality.signature": "フィールド:文字列", + "lensFormulaDocs.count": "カウント", + "lensFormulaDocs.count.signature": "[field: string]", + "lensFormulaDocs.counterRate": "カウンターレート", + "lensFormulaDocs.counterRate.signature": "メトリック:数値", + "lensFormulaDocs.cumulative_sum.signature": "メトリック:数値", + "lensFormulaDocs.cumulativeSum": "累積和", + "lensFormulaDocs.derivative": "差異", + "lensFormulaDocs.differences.signature": "メトリック:数値", + "lensFormulaDocs.lastValue": "最終値", + "lensFormulaDocs.lastValue.signature": "フィールド:文字列", + "lensFormulaDocs.max": "最高", + "lensFormulaDocs.median": "中央", + "lensFormulaDocs.metric.signature": "フィールド:文字列", + "lensFormulaDocs.min": "最低", + "lensFormulaDocs.moving_average.signature": "メトリック:数値、[window]:数値", + "lensFormulaDocs.movingAverage": "移動平均", + "lensFormulaDocs.overall_metric": "メトリック:数値", + "lensFormulaDocs.overallMax": "全体最高", + "lensFormulaDocs.overallMin": "全体最低", + "lensFormulaDocs.overallSum": "全体合計", + "lensFormulaDocs.percentile": "パーセンタイル", + "lensFormulaDocs.percentile.signature": "フィールド:文字列、[percentile]:数値", + "lensFormulaDocs.percentileRank": "パーセンタイル順位", + "lensFormulaDocs.percentileRanks.signature": "フィールド: 文字列, [value]: 数値", + "lensFormulaDocs.standardDeviation": "標準偏差", + "lensFormulaDocs.sum": "合計", + "lensFormulaDocs.time_scale": "メトリック:数値、単位:s|m|h|d|w|M|y", + "lensFormulaDocs.timeScale": "単位で正規化", "xpack.licenseApiGuard.license.errorExpiredMessage": "{licenseType} ライセンスが期限切れのため {pluginName} を使用できません。", "xpack.licenseApiGuard.license.errorUnavailableMessage": "現在ライセンス情報が利用できないため {pluginName} を使用できません。", "xpack.licenseApiGuard.license.errorUnsupportedMessage": "ご使用の {licenseType} ライセンスは {pluginName} をサポートしていません。ライセンスをアップグレードしてください。", @@ -29496,46 +29521,6 @@ "xpack.observabilityAiAssistant.setupKb": "ナレッジベースを設定することで、エクスペリエンスが改善されます。", "xpack.observabilityAiAssistant.stopGeneratingButtonLabel": "生成を停止", "xpack.observabilityAiAssistant.technicalPreviewBadgeDescription": "関数呼び出し(根本原因分析やデータの視覚化など)を使用する際に、より一貫性のあるエクスペリエンスを実現するために、GPT4が必要です。GPT3.5は、エラーの説明などのシンプルなワークフローの一部や、頻繁な関数呼び出しの使用が必要とされないKibana内のエクスペリエンスなどのChatGPTで機能します。", - "xpack.observabilityShared.inspector.stats.queryTimeValue": "{queryTime}ms", - "xpack.observabilityShared.breadcrumbs.observabilityLinkText": "Observability", - "xpack.observabilityShared.inspector.stats.dataViewDescription": "Elasticsearchインデックスに接続したデータビューです。", - "xpack.observabilityShared.inspector.stats.dataViewLabel": "データビュー", - "xpack.observabilityShared.inspector.stats.hitsDescription": "クエリにより返されたドキュメントの数です。", - "xpack.observabilityShared.inspector.stats.hitsLabel": "ヒット数", - "xpack.observabilityShared.inspector.stats.hitsTotalDescription": "クエリに一致するドキュメントの数です。", - "xpack.observabilityShared.inspector.stats.hitsTotalLabel": "ヒット数(合計)", - "xpack.observabilityShared.inspector.stats.kibanaApiQueryParametersDescription": "Elasticsearch要求を開始したKibana API要求で使用されているクエリパラメーター。", - "xpack.observabilityShared.inspector.stats.kibanaApiQueryParametersLabel": "Kibana APIクエリパラメーター", - "xpack.observabilityShared.inspector.stats.kibanaApiRouteDescription": "Elasticsearch要求を開始したKibana API要求のルート。", - "xpack.observabilityShared.inspector.stats.kibanaApiRouteLabel": "Kibana APIルート", - "xpack.observabilityShared.inspector.stats.queryTimeDescription": "クエリの処理の所要時間です。リクエストの送信やブラウザーでのパースの時間は含まれません。", - "xpack.observabilityShared.inspector.stats.queryTimeLabel": "クエリ時間", - "xpack.observabilityShared.navigation.betaBadge": "ベータ", - "xpack.observabilityShared.navigation.experimentalBadgeLabel": "テクニカルプレビュー", - "xpack.observabilityShared.navigation.newBadge": "新規", - "xpack.observabilityShared.pageLayout.sideNavTitle": "Observability", - "xpack.observabilityShared.sectionLink.newLabel": "新規", - "xpack.observabilityShared.technicalPreviewBadgeDescription": "この機能はテクニカルプレビュー中であり、将来のリリースでは変更されたり完全に削除されたりする場合があります。Elasticは最善の努力を講じてすべての問題の修正に努めますが、テクニカルプレビュー中の機能には正式なGA機能のサポートSLAが適用されません。", - "xpack.observabilityShared.technicalPreviewBadgeLabel": "テクニカルプレビュー", - "xpack.observabilityShared.tour.alertsStep.imageAltText": "アラートデモ", - "xpack.observabilityShared.tour.alertsStep.tourContent": "電子メール、PagerDuty、Slackなどのサードパーティプラットフォーム統合でアラートをトリガーする条件を定義して検出します。", - "xpack.observabilityShared.tour.alertsStep.tourTitle": "変更が発生したときに通知", - "xpack.observabilityShared.tour.endButtonLabel": "ツアーを終了", - "xpack.observabilityShared.tour.guidedSetupStep.tourContent": "Elasticオブザーバビリティに進む最も簡単な方法は、データアシスタントで推奨された次のステップに従うことです。", - "xpack.observabilityShared.tour.guidedSetupStep.tourTitle": "Elasticオブザーバビリティのその他の機能", - "xpack.observabilityShared.tour.metricsExplorerStep.imageAltText": "メトリックエクスプローラーのデモ", - "xpack.observabilityShared.tour.metricsExplorerStep.tourContent": "システム、クラウド、ネットワーク、その他のインフラストラクチャーソースからメトリックをストリーム、グループ化、可視化します。", - "xpack.observabilityShared.tour.metricsExplorerStep.tourTitle": "インフラストラクチャーの正常性を監視", - "xpack.observabilityShared.tour.nextButtonLabel": "次へ", - "xpack.observabilityShared.tour.observabilityOverviewStep.tourContent": "クイックガイドを表示し、オブザーバビリティデータすべてを1つのスタックに格納する利点をご覧ください。", - "xpack.observabilityShared.tour.observabilityOverviewStep.tourTitle": "Elasticオブザーバビリティへようこそ", - "xpack.observabilityShared.tour.servicesStep.imageAltText": "サービスのデモ", - "xpack.observabilityShared.tour.servicesStep.tourContent": "サービスに関する詳細情報を収集し、パフォーマンスの問題をすばやく検出、修正できます。", - "xpack.observabilityShared.tour.servicesStep.tourTitle": "アプリケーションの問題を特定して解決", - "xpack.observabilityShared.tour.skipButtonLabel": "ツアーをスキップ", - "xpack.observabilityShared.tour.streamStep.imageAltText": "ログストリームのデモ", - "xpack.observabilityShared.tour.streamStep.tourContent": "アプリケーション、サーバー、仮想マシン、コネクターからのログイベントを監視、フィルター、検査します。", - "xpack.observabilityShared.tour.streamStep.tourTitle": "リアルタイムでログを追跡", "xpack.osquery.action.missingPrivileges": "このページにアクセスするには、{osquery} Kibana権限について管理者に確認してください。", "xpack.osquery.agentPolicy.confirmModalCalloutDescription": "選択した{agentPolicyCount, plural, other {エージェントポリシー}}が一部のエージェントですでに使用されていることをFleetが検出しました。このアクションの結果として、Fleetはこの{agentPolicyCount, plural, other {エージェントポリシー}}を使用しているすべてのエージェントに更新をデプロイします。", "xpack.osquery.agentPolicy.confirmModalCalloutTitle": "{agentCount, plural, other {#個のエージェント}}が更新されます", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index e6a5247f6cd9b2..965af95be52733 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -572,7 +572,6 @@ "core.euiComboBoxOptionsList.delimiterMessage": "添加项目,使用 {delimiter} 分隔各个项", "core.euiComboBoxOptionsList.noMatchingOptions": "{searchValue} 不匹配任何选项", "core.euiComboBoxPill.removeSelection": "将 {children} 从此组中的选择移除", - "core.euiControlBar.customScreenReaderAnnouncement": "有称作 {landmarkHeading} 且页面级别控件位于文档结尾的新地区地标。", "core.euiDataGrid.ariaLabel": "{label};第 {page} 页,共 {pageCount} 页。", "core.euiDataGrid.ariaLabelledBy": "第 {page} 页,共 {pageCount} 页。", "core.euiDataGridCell.position": "{columnId}列 {col}行 {row}", @@ -587,13 +586,6 @@ "core.euiFilterButton.filterBadgeActiveAriaLabel": "{count} 个活动筛选", "core.euiFilterButton.filterBadgeAvailableAriaLabel": "{count} 个可用筛选", "core.euiMarkdownEditorFooter.supportedFileTypes": "支持的文件:{supportedFileTypes}", - "core.euiNotificationEventMessages.accordionAriaLabelButtonText": "+ {eventName} 的 {messagesLength} 条消息", - "core.euiNotificationEventMessages.accordionButtonText": "+ 另外 {messagesLength} 条", - "core.euiNotificationEventMeta.contextMenuButton": "{eventName} 的菜单", - "core.euiNotificationEventReadButton.markAsReadAria": "将 {eventName} 标记为已读", - "core.euiNotificationEventReadButton.markAsUnreadAria": "将 {eventName} 标记为未读", - "core.euiNotificationEventReadIcon.readAria": "{eventName} 已读", - "core.euiNotificationEventReadIcon.unreadAria": "{eventName} 未读", "core.euiPagination.firstRangeAriaLabel": "将跳过第 2 至 {lastPage} 页", "core.euiPagination.lastRangeAriaLabel": "将跳过第 {firstPage} 至 {lastPage} 页", "core.euiPagination.pageOfTotalCompressed": "{total} 的 {page}", @@ -741,8 +733,6 @@ "core.euiComboBoxOptionsList.loadingOptions": "正在加载选项", "core.euiComboBoxOptionsList.noAvailableOptions": "没有任何可用选项", "core.euiCommonlyUsedTimeRanges.legend": "常用", - "core.euiControlBar.screenReaderAnnouncement": "有页面级别控件位于文档结尾的新地区地标。", - "core.euiControlBar.screenReaderHeading": "页面级别控件", "core.euiDataGrid.screenReaderNotice": "单元格包含交互内容。", "core.euiDataGridCellActions.expandButtonTitle": "单击或按 Enter 键以便与单元格内容进行交互", "core.euiDataGridHeaderCell.actionsPopoverScreenReaderText": "要在列操作列表中导航,请按 Tab 键或向上和向下箭头键。", @@ -849,11 +839,6 @@ "core.euiMarkdownEditorToolbar.editor": "编辑器", "core.euiMarkdownEditorToolbar.previewMarkdown": "预览", "core.euiModal.closeModal": "关闭此模式窗口", - "core.euiNotificationEventMessages.accordionHideText": "隐藏", - "core.euiNotificationEventReadButton.markAsRead": "标记为已读", - "core.euiNotificationEventReadButton.markAsUnread": "标记为未读", - "core.euiNotificationEventReadIcon.read": "读取", - "core.euiNotificationEventReadIcon.unread": "未读", "core.euiPagination.collection": "收集", "core.euiPagination.fromEndLabel": "自末尾", "core.euiPagination.last": "最后一个", @@ -4895,6 +4880,33 @@ "lensFormulaDocs.percentileRanks.documentation.markdown": "\n返回小于某个值的值的百分比。例如,如果某个值大于或等于 95% 的观察值,则称它处于第 95 个百分位等级\n\n例如:获取小于 100 的值的百分比:\n`percentile_rank(bytes, value=100)`\n ", "lensFormulaDocs.standardDeviation.documentation.markdown": "\n返回字段的变量或差量数量。此函数仅适用于数字字段。\n\n#### 示例\n\n要获取价格的标准偏差,请使用 `standard_deviation(price)`。\n\n要获取来自英国的订单的价格方差,请使用 `square(standard_deviation(price, kql='location:UK'))`。\n ", "lensFormulaDocs.time_scale.documentation.markdown": "\n\n此高级函数用于将计数和总和标准化为特定时间间隔。它允许集成所存储的已标准化为特定时间间隔的指标。\n\n此函数只能在当前图表中使用了日期直方图函数时使用。\n\n例如:将已标准化指标与其他需要标准化的指标进行比较的比率。\n`normalize_by_unit(counter_rate(max(system.diskio.write.bytes)), unit='s') / last_value(apache.status.bytes_per_second)`\n ", + "lensFormulaDocs.tinymath.base": "底数", + "lensFormulaDocs.boolean": "布尔值", + "lensFormulaDocs.tinymath.condition": "条件", + "lensFormulaDocs.tinymath.decimals": "小数", + "lensFormulaDocs.tinymath.defaultValue": "默认值", + "lensFormulaDocs.tinymath.left": "左", + "lensFormulaDocs.tinymath.right": "右", + "lensFormulaDocs.tinymath.value": "值", + "lensFormulaDocs.documentation.filterRatio": "筛选比", + "lensFormulaDocs.documentation.mathSection": "数学", + "lensFormulaDocs.documentation.mathSectionDescription": "结果表的每行使用相同行中使用其他函数计算的单值执行这些函数。", + "lensFormulaDocs.documentation.percentOfTotal": "总计的百分比", + "lensFormulaDocs.documentation.recentChange": "最近更改", + "lensFormulaDocs.documentation.weekOverWeek": "周环比", + "lensFormulaDocs.frequentlyUsedHeading": "常用公式", + "lensFormulaDocs.cardinality.signature": "field: string", + "lensFormulaDocs.count.signature": "[字段:字符串]", + "lensFormulaDocs.counterRate.signature": "指标:数字", + "lensFormulaDocs.cumulative_sum.signature": "指标:数字", + "lensFormulaDocs.differences.signature": "指标:数字", + "lensFormulaDocs.lastValue.signature": "field: string", + "lensFormulaDocs.metric.signature": "field: string", + "lensFormulaDocs.moving_average.signature": "指标:数字,[window]:数字", + "lensFormulaDocs.overall_metric": "指标:数字", + "lensFormulaDocs.percentile.signature": "field: string, [percentile]: number", + "lensFormulaDocs.percentileRanks.signature": "字段:字符串,[值]:数字", + "lensFormulaDocs.time_scale": "指标:数字,单位:s|m|h|d|w|M|y", "links.contentManagement.saveModalTitle": "将 {contentId} 面板保存到库", "links.externalLink.editor.urlFormatError": "格式无效。示例:{exampleUrl}", "links.dashboardLink.description": "前往仪表板", @@ -20232,7 +20244,6 @@ "xpack.infra.homePage.noMetricsIndicesInstructionsActionLabel": "查看设置说明", "xpack.infra.homePage.settingsTabTitle": "设置", "xpack.infra.homePage.tellUsWhatYouThinkK8sLink": "告诉我们您的看法!(K8s)", - "xpack.observabilityShared.featureFeedbackButton.tellUsWhatYouThinkLink": "告诉我们您的看法!", "xpack.infra.homePage.toolbar.kqlSearchFieldPlaceholder": "搜索基础设施数据……(例如 host.name:host-1)", "xpack.infra.hostFlyout.explainProcessMessageTitle": "此进程是什么?", "xpack.infra.hosts.searchPlaceholder": "搜索主机(例如,cloud.provider:gcp AND system.load.1 > 0.5)", @@ -21026,6 +21037,47 @@ "xpack.infra.waffle.unableToSelectMetricErrorTitle": "无法选择指标选项或指标值。", "xpack.infra.waffleTime.autoRefreshButtonLabel": "自动刷新", "xpack.infra.waffleTime.stopRefreshingButtonLabel": "停止刷新", + "xpack.observabilityShared.featureFeedbackButton.tellUsWhatYouThinkLink": "告诉我们您的看法!", + "xpack.observabilityShared.inspector.stats.queryTimeValue": "{queryTime}ms", + "xpack.observabilityShared.breadcrumbs.observabilityLinkText": "Observability", + "xpack.observabilityShared.inspector.stats.dataViewDescription": "连接到 Elasticsearch 索引的数据视图。", + "xpack.observabilityShared.inspector.stats.dataViewLabel": "数据视图", + "xpack.observabilityShared.inspector.stats.hitsDescription": "查询返回的文档数目。", + "xpack.observabilityShared.inspector.stats.hitsLabel": "命中数", + "xpack.observabilityShared.inspector.stats.hitsTotalDescription": "与查询匹配的文档数目。", + "xpack.observabilityShared.inspector.stats.hitsTotalLabel": "命中数(总数)", + "xpack.observabilityShared.inspector.stats.kibanaApiQueryParametersDescription": "发起 Elasticsearch 请求的 Kibana API 请求中使用的查询参数。", + "xpack.observabilityShared.inspector.stats.kibanaApiQueryParametersLabel": "Kibana API 查询参数", + "xpack.observabilityShared.inspector.stats.kibanaApiRouteDescription": "发起 Elasticsearch 请求的 Kibana API 请求的路由。", + "xpack.observabilityShared.inspector.stats.kibanaApiRouteLabel": "Kibana API 路由", + "xpack.observabilityShared.inspector.stats.queryTimeDescription": "处理查询所花费的时间。不包括发送请求或在浏览器中解析它的时间。", + "xpack.observabilityShared.inspector.stats.queryTimeLabel": "查询时间", + "xpack.observabilityShared.navigation.betaBadge": "公测版", + "xpack.observabilityShared.navigation.experimentalBadgeLabel": "技术预览", + "xpack.observabilityShared.navigation.newBadge": "新建", + "xpack.observabilityShared.pageLayout.sideNavTitle": "Observability", + "xpack.observabilityShared.sectionLink.newLabel": "新建", + "xpack.observabilityShared.technicalPreviewBadgeDescription": "此功能处于技术预览状态,在未来版本中可能会更改或完全移除。Elastic 将尽最大努力来修复任何问题,但处于技术预览状态的功能不受正式 GA 功能支持 SLA 的约束。", + "xpack.observabilityShared.technicalPreviewBadgeLabel": "技术预览", + "xpack.observabilityShared.tour.alertsStep.imageAltText": "告警演示", + "xpack.observabilityShared.tour.alertsStep.tourContent": "通过电子邮件、PagerDuty 和 Slack 等第三方平台集成定义并检测触发告警的条件。", + "xpack.observabilityShared.tour.alertsStep.tourTitle": "发生更改时接收通知", + "xpack.observabilityShared.tour.endButtonLabel": "结束教程", + "xpack.observabilityShared.tour.guidedSetupStep.tourContent": "继续使用 Elastic Observability 的最简便方法,是按照数据助手中推荐的后续步骤操作。", + "xpack.observabilityShared.tour.guidedSetupStep.tourTitle": "Elastic Observability 让您事半功倍", + "xpack.observabilityShared.tour.metricsExplorerStep.imageAltText": "指标浏览器演示", + "xpack.observabilityShared.tour.metricsExplorerStep.tourContent": "流式传输、分组并可视化您的系统、云、网络和其他基础架构源中的指标。", + "xpack.observabilityShared.tour.metricsExplorerStep.tourTitle": "监测基础架构运行状况", + "xpack.observabilityShared.tour.nextButtonLabel": "下一步", + "xpack.observabilityShared.tour.observabilityOverviewStep.tourContent": "学习快速教程以了解在一个堆栈中保存所有 Observability 数据的优势。", + "xpack.observabilityShared.tour.observabilityOverviewStep.tourTitle": "欢迎使用 Elastic Observability", + "xpack.observabilityShared.tour.servicesStep.imageAltText": "服务演示", + "xpack.observabilityShared.tour.servicesStep.tourContent": "通过收集有关服务的详细信息快速查找并修复性能问题。", + "xpack.observabilityShared.tour.servicesStep.tourTitle": "确定并解决应用程序问题", + "xpack.observabilityShared.tour.skipButtonLabel": "跳过教程", + "xpack.observabilityShared.tour.streamStep.imageAltText": "日志流演示", + "xpack.observabilityShared.tour.streamStep.tourContent": "监测、筛选并检查从您的应用程序、服务器、虚拟机和容器中流入的日志事件。", + "xpack.observabilityShared.tour.streamStep.tourTitle": "实时跟踪您的日志", "xpack.metricsData.assetDetails.formulas.cpuUsage": "CPU 使用率", "xpack.metricsData.assetDetails.formulas.cpuUsage.iowaitLabel": "iowait", "xpack.metricsData.assetDetails.formulas.cpuUsage.irqLabel": "irq", @@ -22172,11 +22224,6 @@ "xpack.lens.fittingFunctionsTitle.lookahead": "下一个", "xpack.lens.fittingFunctionsTitle.none": "隐藏", "xpack.lens.fittingFunctionsTitle.zero": "零", - "lensFormulaDocs.tinymath.base": "底数", - "lensFormulaDocs.boolean": "布尔值", - "lensFormulaDocs.tinymath.condition": "条件", - "lensFormulaDocs.tinymath.decimals": "小数", - "lensFormulaDocs.tinymath.defaultValue": "默认值", "xpack.lens.formula.disableWordWrapLabel": "禁用自动换行", "xpack.lens.formula.editorHelpInlineHideLabel": "隐藏函数引用", "xpack.lens.formula.editorHelpInlineHideToolTip": "隐藏函数引用", @@ -22184,22 +22231,12 @@ "xpack.lens.formula.fullScreenEnterLabel": "展开", "xpack.lens.formula.fullScreenExitLabel": "折叠", "xpack.lens.formula.kqlExtraArguments": "[kql]?: string, [lucene]?: string", - "lensFormulaDocs.tinymath.left": "左", "xpack.lens.formula.reducedTimeRangeExtraArguments": "[reducedTimeRange]?: 字符串", "xpack.lens.formula.requiredArgument": "必需", - "lensFormulaDocs.tinymath.right": "右", "xpack.lens.formula.shiftExtraArguments": "[shift]?: string", - "lensFormulaDocs.tinymath.value": "值", - "lensFormulaDocs.documentation.filterRatio": "筛选比", - "lensFormulaDocs.documentation.mathSection": "数学", - "lensFormulaDocs.documentation.mathSectionDescription": "结果表的每行使用相同行中使用其他函数计算的单值执行这些函数。", - "lensFormulaDocs.documentation.percentOfTotal": "总计的百分比", - "lensFormulaDocs.documentation.recentChange": "最近更改", - "lensFormulaDocs.documentation.weekOverWeek": "周环比", "xpack.lens.formulaDocumentationHeading": "运作方式", "xpack.lens.formulaEnableWordWrapLabel": "启用自动换行", "xpack.lens.formulaExampleMarkdown": "示例", - "lensFormulaDocs.frequentlyUsedHeading": "常用公式", "xpack.lens.formulaPlaceholderText": "通过将函数与数学表达式组合来键入公式,如:", "xpack.lens.fullExtent.niceValues": "舍入到优先值", "xpack.lens.functions.collapse.args.byHelpText": "要作为分组依据的列 - 这些列将保持原样", @@ -22263,7 +22300,6 @@ "xpack.lens.indexPattern.bitsFormatLabel": "位 (1000)", "xpack.lens.indexPattern.bytesFormatLabel": "字节 (1024)", "xpack.lens.indexPattern.cardinality.documentation.quick": "\n指定数字、字符串、日期或布尔值字段的唯一值的数目。\n ", - "lensFormulaDocs.cardinality.signature": "field: string", "xpack.lens.indexPattern.changeDataViewTitle": "数据视图", "xpack.lens.indexPattern.chooseField": "字段", "xpack.lens.indexPattern.chooseFieldLabel": "要使用此函数,请选择字段。", @@ -22271,11 +22307,8 @@ "xpack.lens.indexPattern.columnFormatLabel": "值格式", "xpack.lens.indexPattern.compactLabel": "紧凑值", "xpack.lens.indexPattern.count.documentation.quick": "\n文档总数。提供字段时,将计算字段值的总数。将计数函数用于单个文档中具有多个值的字段时,将对所有值计数。\n ", - "lensFormulaDocs.count.signature": "[字段:字符串]", "xpack.lens.indexPattern.counterRate.documentation.quick": "\n 不断增长的时间序列指标一段时间的更改速率。\n ", - "lensFormulaDocs.counterRate.signature": "指标:数字", "xpack.lens.indexPattern.countOf": "记录计数", - "lensFormulaDocs.cumulative_sum.signature": "指标:数字", "xpack.lens.indexPattern.cumulativeSum.documentation.quick": "\n 随时间增长的所有值的总和。\n ", "xpack.lens.indexPattern.custom.externalDoc": "数字格式语法", "xpack.lens.indexPattern.custom.patternLabel": "格式", @@ -22306,7 +22339,6 @@ "xpack.lens.indexPattern.decimalPlacesLabel": "小数", "xpack.lens.indexPattern.defaultFormatLabel": "默认", "xpack.lens.indexPattern.differences.documentation.quick": "\n 后续时间间隔中的值之间的更改情况。\n ", - "lensFormulaDocs.differences.signature": "指标:数字", "xpack.lens.indexPattern.dimensionEditor.headingAppearance": "外观", "xpack.lens.indexPattern.dimensionEditor.headingData": "数据", "xpack.lens.indexPattern.dimensionEditor.headingFormula": "公式", @@ -22364,7 +22396,6 @@ "xpack.lens.indexPattern.lastValue.showArrayValues": "显示数组值", "xpack.lens.indexPattern.lastValue.showArrayValuesExplanation": "显示与最后每个文档中的此字段关联的所有值。", "xpack.lens.indexPattern.lastValue.showArrayValuesWithTopValuesWarning": "显示数组值时,无法使用此字段对排名最前值排名。", - "lensFormulaDocs.lastValue.signature": "field: string", "xpack.lens.indexPattern.lastValue.sortField": "按日期字段排序", "xpack.lens.indexPattern.lastValue.sortFieldPlaceholder": "排序字段", "xpack.lens.indexPattern.max.description": "单值指标聚合,返回从聚合文档提取的数值中的最大值。", @@ -22372,12 +22403,10 @@ "xpack.lens.indexPattern.median.description": "单值指标聚合,计算从聚合文档提取的中值。", "xpack.lens.indexPattern.median.quickFunctionDescription": "数字字段的中值。", "xpack.lens.indexPattern.metaFieldsLabel": "元字段", - "lensFormulaDocs.metric.signature": "field: string", "xpack.lens.indexPattern.min.description": "单值指标聚合,返回从聚合文档提取的数值中的最小值。", "xpack.lens.indexPattern.min.quickFunctionDescription": "数字字段的最小值。", "xpack.lens.indexPattern.missingFieldLabel": "缺失字段", "xpack.lens.indexPattern.moveToWorkspaceNotAvailable": "要可视化此字段,请直接将其添加到所需图层。根据您当前的配置,不支持将此字段添加到工作区。", - "lensFormulaDocs.moving_average.signature": "指标:数字,[window]:数字", "xpack.lens.indexPattern.movingAverage.basicExplanation": "移动平均值在数据上滑动时间窗并显示平均值。仅日期直方图支持移动平均值。", "xpack.lens.indexPattern.movingAverage.documentation.quick": "\n 一段时间中移动窗口值的平均值。\n ", "xpack.lens.indexPattern.movingAverage.limitations": "第一个移动平均值开始于第二项。", @@ -22393,15 +22422,12 @@ "xpack.lens.indexPattern.noRealMetricError": "仅包含静态值的图层将不显示结果,请至少使用一个动态指标", "xpack.lens.indexPattern.notAbsoluteTimeShift": "时间偏移无效。", "xpack.lens.indexPattern.numberFormatLabel": "数字", - "lensFormulaDocs.overall_metric": "指标:数字", "xpack.lens.indexPattern.percentFormatLabel": "百分比", "xpack.lens.indexPattern.percentile.documentation.quick": "\n 小于所有文档中出现值的 n% 的最大值。\n ", "xpack.lens.indexPattern.percentile.percentileRanksValue": "百分位等级值", "xpack.lens.indexPattern.percentile.percentileValue": "百分位数", - "lensFormulaDocs.percentile.signature": "field: string, [percentile]: number", "xpack.lens.indexPattern.percentileRanks.documentation.quick": "\n小于特定值的值的百分比。例如,如果某个值大于或等于 95% 的计算值,则该值处于第 95 个百分位等级。\n ", "xpack.lens.indexPattern.percentileRanks.errorMessage": "百分位等级值必须为数字", - "lensFormulaDocs.percentileRanks.signature": "字段:字符串,[值]:数字", "xpack.lens.indexPattern.precisionErrorWarning.accuracyDisabled.shortMessage": "这可能为近似值。要获得更精确的结果,可以启用准确性模式,但这会增加 Elasticsearch 集群的负载。", "xpack.lens.indexPattern.precisionErrorWarning.accuracyEnabled.shortMessage": "这可能为近似值。要获得更精确的结果,请使用筛选或增加排名最前值的数量。", "xpack.lens.indexPattern.precisionErrorWarning.ascendingCountPrecisionErrorWarning.shortMessage": "这可能为近似值,具体取决于如何索引数据。要获得更精确的结果,请按稀有度排序。", @@ -22497,7 +22523,6 @@ "xpack.lens.indexPattern.terms.size": "值数目", "xpack.lens.indexPattern.termsWithMultipleShifts": "在单个图层中,无法将指标与不同时间偏移和动态排名最前值组合。将相同的时间偏移值用于所有指标或使用筛选,而非排名最前值。", "xpack.lens.indexPattern.termsWithMultipleShiftsFixActionLabel": "使用筛选", - "lensFormulaDocs.time_scale": "指标:数字,单位:s|m|h|d|w|M|y", "xpack.lens.indexPattern.timeScale.label": "按单位标准化", "xpack.lens.indexPattern.timeScale.missingUnit": "没有为按单位标准化指定单位。", "xpack.lens.indexPattern.timeScale.tooltip": "将值标准化为始终显示为每指定时间单位速率,无论基础日期时间间隔是多少。", @@ -29480,46 +29505,6 @@ "xpack.observabilityAiAssistant.setupKb": "通过设置知识库来改进体验。", "xpack.observabilityAiAssistant.stopGeneratingButtonLabel": "停止生成", "xpack.observabilityAiAssistant.technicalPreviewBadgeDescription": "需要 GPT4 以在使用函数调用时(例如,执行根本原因分析、数据可视化等时候)获得更加一致的体验。GPT3.5 可作用于某些更简单的工作流(如解释错误),或在 Kibana 中获得不需要频繁使用函数调用的与 ChatGPT 类似的体验。", - "xpack.observabilityShared.inspector.stats.queryTimeValue": "{queryTime}ms", - "xpack.observabilityShared.breadcrumbs.observabilityLinkText": "Observability", - "xpack.observabilityShared.inspector.stats.dataViewDescription": "连接到 Elasticsearch 索引的数据视图。", - "xpack.observabilityShared.inspector.stats.dataViewLabel": "数据视图", - "xpack.observabilityShared.inspector.stats.hitsDescription": "查询返回的文档数目。", - "xpack.observabilityShared.inspector.stats.hitsLabel": "命中数", - "xpack.observabilityShared.inspector.stats.hitsTotalDescription": "与查询匹配的文档数目。", - "xpack.observabilityShared.inspector.stats.hitsTotalLabel": "命中数(总数)", - "xpack.observabilityShared.inspector.stats.kibanaApiQueryParametersDescription": "发起 Elasticsearch 请求的 Kibana API 请求中使用的查询参数。", - "xpack.observabilityShared.inspector.stats.kibanaApiQueryParametersLabel": "Kibana API 查询参数", - "xpack.observabilityShared.inspector.stats.kibanaApiRouteDescription": "发起 Elasticsearch 请求的 Kibana API 请求的路由。", - "xpack.observabilityShared.inspector.stats.kibanaApiRouteLabel": "Kibana API 路由", - "xpack.observabilityShared.inspector.stats.queryTimeDescription": "处理查询所花费的时间。不包括发送请求或在浏览器中解析它的时间。", - "xpack.observabilityShared.inspector.stats.queryTimeLabel": "查询时间", - "xpack.observabilityShared.navigation.betaBadge": "公测版", - "xpack.observabilityShared.navigation.experimentalBadgeLabel": "技术预览", - "xpack.observabilityShared.navigation.newBadge": "新建", - "xpack.observabilityShared.pageLayout.sideNavTitle": "Observability", - "xpack.observabilityShared.sectionLink.newLabel": "新建", - "xpack.observabilityShared.technicalPreviewBadgeDescription": "此功能处于技术预览状态,在未来版本中可能会更改或完全移除。Elastic 将尽最大努力来修复任何问题,但处于技术预览状态的功能不受正式 GA 功能支持 SLA 的约束。", - "xpack.observabilityShared.technicalPreviewBadgeLabel": "技术预览", - "xpack.observabilityShared.tour.alertsStep.imageAltText": "告警演示", - "xpack.observabilityShared.tour.alertsStep.tourContent": "通过电子邮件、PagerDuty 和 Slack 等第三方平台集成定义并检测触发告警的条件。", - "xpack.observabilityShared.tour.alertsStep.tourTitle": "发生更改时接收通知", - "xpack.observabilityShared.tour.endButtonLabel": "结束教程", - "xpack.observabilityShared.tour.guidedSetupStep.tourContent": "继续使用 Elastic Observability 的最简便方法,是按照数据助手中推荐的后续步骤操作。", - "xpack.observabilityShared.tour.guidedSetupStep.tourTitle": "Elastic Observability 让您事半功倍", - "xpack.observabilityShared.tour.metricsExplorerStep.imageAltText": "指标浏览器演示", - "xpack.observabilityShared.tour.metricsExplorerStep.tourContent": "流式传输、分组并可视化您的系统、云、网络和其他基础架构源中的指标。", - "xpack.observabilityShared.tour.metricsExplorerStep.tourTitle": "监测基础架构运行状况", - "xpack.observabilityShared.tour.nextButtonLabel": "下一步", - "xpack.observabilityShared.tour.observabilityOverviewStep.tourContent": "学习快速教程以了解在一个堆栈中保存所有 Observability 数据的优势。", - "xpack.observabilityShared.tour.observabilityOverviewStep.tourTitle": "欢迎使用 Elastic Observability", - "xpack.observabilityShared.tour.servicesStep.imageAltText": "服务演示", - "xpack.observabilityShared.tour.servicesStep.tourContent": "通过收集有关服务的详细信息快速查找并修复性能问题。", - "xpack.observabilityShared.tour.servicesStep.tourTitle": "确定并解决应用程序问题", - "xpack.observabilityShared.tour.skipButtonLabel": "跳过教程", - "xpack.observabilityShared.tour.streamStep.imageAltText": "日志流演示", - "xpack.observabilityShared.tour.streamStep.tourContent": "监测、筛选并检查从您的应用程序、服务器、虚拟机和容器中流入的日志事件。", - "xpack.observabilityShared.tour.streamStep.tourTitle": "实时跟踪您的日志", "xpack.osquery.action.missingPrivileges": "要访问此页面,请联系管理员获取 {osquery} Kibana 权限。", "xpack.osquery.agentPolicy.confirmModalCalloutDescription": "Fleet 检测到您的部分代理已在使用选定{agentPolicyCount, plural, other {代理策略}}。由于此操作,Fleet 会将更新部署到使用此{agentPolicyCount, plural, other {代理策略}}的所有代理。", "xpack.osquery.agentPolicy.confirmModalCalloutTitle": "此操作将更新 {agentCount, plural, other {# 个代理}}", diff --git a/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/__snapshots__/filter_status_button.test.tsx.snap b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/__snapshots__/filter_status_button.test.tsx.snap index e0aaefdf9d5496..8a2095bfdfdf87 100644 --- a/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/__snapshots__/filter_status_button.test.tsx.snap +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/__snapshots__/filter_status_button.test.tsx.snap @@ -10,15 +10,11 @@ exports[`FilterStatusButton renders without errors for valid props 1`] = ` class="euiButtonEmpty__content emotion-euiButtonDisplayContent-euiFilterButton__content" > - - Up - + Up diff --git a/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/__snapshots__/status_filter.test.tsx.snap b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/__snapshots__/status_filter.test.tsx.snap index 7048df79a12d3c..d25aecb486f62c 100644 --- a/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/__snapshots__/status_filter.test.tsx.snap +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/__snapshots__/status_filter.test.tsx.snap @@ -13,15 +13,11 @@ exports[`StatusFilterComponent renders without errors for valid props 1`] = ` class="euiButtonEmpty__content emotion-euiButtonDisplayContent-euiFilterButton__content" > - - All - + All @@ -34,15 +30,11 @@ exports[`StatusFilterComponent renders without errors for valid props 1`] = ` class="euiButtonEmpty__content emotion-euiButtonDisplayContent-euiFilterButton__content" > - - Up - + Up @@ -55,15 +47,11 @@ exports[`StatusFilterComponent renders without errors for valid props 1`] = ` class="euiButtonEmpty__content emotion-euiButtonDisplayContent-euiFilterButton__content" > - - Down - + Down diff --git a/yarn.lock b/yarn.lock index ddfb556b671f9a..3906a11273f81d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1740,10 +1740,10 @@ resolved "https://registry.yarnpkg.com/@elastic/eslint-plugin-eui/-/eslint-plugin-eui-0.0.2.tgz#56b9ef03984a05cc213772ae3713ea8ef47b0314" integrity sha512-IoxURM5zraoQ7C8f+mJb9HYSENiZGgRVcG4tLQxE61yHNNRDXtGDWTZh8N1KIHcsqN1CEPETjuzBXkJYF/fDiQ== -"@elastic/eui@91.3.1": - version "91.3.1" - resolved "https://registry.yarnpkg.com/@elastic/eui/-/eui-91.3.1.tgz#2289b1683f0409c043150c39f5fb7233aa7beb16" - integrity sha512-zxnhBaAsykmDqjbZ3i++CFTyv2dKZSe3UUZKSgYj5MaMnbE86uzeWGjhp3gh1b+LxJZP2672MbNZ6qxVOh1vcQ== +"@elastic/eui@92.0.0-backport.0": + version "92.0.0-backport.0" + resolved "https://registry.yarnpkg.com/@elastic/eui/-/eui-92.0.0-backport.0.tgz#201757bef89141dad6f8f719976fa2a0b52be86a" + integrity sha512-ZliSke0YehCbCuHvYkY0BIMg32QeqTMZy+qgGYsh+Bp0UZ4CZn9j5e7LWavfal3+t8HMFCHTk0RUFFXrcepplA== dependencies: "@hello-pangea/dnd" "^16.3.0" "@types/lodash" "^4.14.198" From 118125168cd28806f033b3a45935fbf3bc468e25 Mon Sep 17 00:00:00 2001 From: Julia Rechkunova Date: Wed, 10 Jan 2024 21:28:52 +0100 Subject: [PATCH 6/6] [UnifiedDocViewer] Redesign header and make actions responsive (#173780) - Resolves https://github.com/elastic/kibana/issues/163239 - Resolves https://github.com/elastic/kibana/issues/164660 - Related PR https://github.com/elastic/kibana/pull/173765 ## Summary - large screen and max 3 items => it will render an icon and a label for each action: Screenshot 2024-01-03 at 18 02 23 - otherwise: max 3 icons and the rest in a context menu: Screenshot 2024-01-03 at 18 02 07 - small screen: all items are in the context menu Screenshot 2024-01-03 at 18 01 39 I also extended "Discover customization" example plugin to showcase more actions. For testing you can run kibana with `yarn start --run-examples` and update number of additional actions locally via https://github.com/jughosta/kibana/blob/690c38e689d8fb802cce8155c1a300f5ca9cb94f/examples/discover_customization_examples/public/plugin.tsx#L411 ### Checklist - [x] Any text added follows [EUI's writing guidelines](https://elastic.github.io/eui/#/guidelines/writing), uses sentence case text and includes [i18n support](https://github.com/elastic/kibana/blob/main/packages/kbn-i18n/README.md) - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios - [x] This renders correctly on smaller devices using a responsive layout. (You can test this [in your browser](https://www.browserstack.com/guide/responsive-testing-on-local-server)) - [x] This was checked for [cross-browser compatibility](https://www.elastic.co/support/matrix#matrix_browsers) --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> Co-authored-by: Davis McPhee --- .../public/plugin.tsx | 23 ++ .../src/components/data_table.scss | 8 - .../discover_grid_flyout.test.tsx | 121 ++++++++++- .../discover_grid_flyout.tsx | 45 ++-- .../discover_grid_flyout_actions.tsx | 201 ++++++++++++++++++ .../use_flyout_actions.tsx | 127 +++-------- .../flyout_customization.ts | 11 +- .../translations/translations/fr-FR.json | 4 - .../translations/translations/ja-JP.json | 4 - .../translations/translations/zh-CN.json | 4 - 10 files changed, 403 insertions(+), 145 deletions(-) create mode 100644 src/plugins/discover/public/components/discover_grid_flyout/discover_grid_flyout_actions.tsx diff --git a/examples/discover_customization_examples/public/plugin.tsx b/examples/discover_customization_examples/public/plugin.tsx index 9368c943532a4a..b66559b020d7a7 100644 --- a/examples/discover_customization_examples/public/plugin.tsx +++ b/examples/discover_customization_examples/public/plugin.tsx @@ -12,6 +12,7 @@ import { EuiFlexItem, EuiPopover, EuiWrappingPopover, + IconType, } from '@elastic/eui'; import { AppNavLinkStatus, @@ -401,6 +402,28 @@ export class DiscoverCustomizationExamplesPlugin implements Plugin { }, }); + customizations.set({ + id: 'flyout', + size: '60%', + title: 'Example custom flyout', + actions: { + getActionItems: () => + Array.from({ length: 5 }, (_, i) => { + const index = i + 1; + return { + id: `action-item-${index}`, + enabled: true, + label: `Action ${index}`, + iconType: ['faceHappy', 'faceNeutral', 'faceSad', 'infinity', 'bell'].at( + i + ) as IconType, + dataTestSubj: `customActionItem${index}`, + onClick: () => alert(index), + }; + }), + }, + }); + return () => { // eslint-disable-next-line no-console console.log('Cleaning up Logs explorer customizations'); diff --git a/packages/kbn-unified-data-table/src/components/data_table.scss b/packages/kbn-unified-data-table/src/components/data_table.scss index e033206635eec0..5c3a6b14ecfa9f 100644 --- a/packages/kbn-unified-data-table/src/components/data_table.scss +++ b/packages/kbn-unified-data-table/src/components/data_table.scss @@ -73,14 +73,6 @@ min-height: 0; } -.unifiedDataTable__flyoutHeader { - white-space: nowrap; -} - -.unifiedDataTable__flyoutDocumentNavigation { - justify-content: flex-end; -} - // We only truncate if the cell is not a control column. .euiDataGridHeader { diff --git a/src/plugins/discover/public/components/discover_grid_flyout/discover_grid_flyout.test.tsx b/src/plugins/discover/public/components/discover_grid_flyout/discover_grid_flyout.test.tsx index 8d4e9bbee4ae10..485a3d2f8a4fe7 100644 --- a/src/plugins/discover/public/components/discover_grid_flyout/discover_grid_flyout.test.tsx +++ b/src/plugins/discover/public/components/discover_grid_flyout/discover_grid_flyout.test.tsx @@ -7,8 +7,8 @@ */ import React from 'react'; +import { EuiButtonIcon, EuiContextMenuItem, EuiPopover } from '@elastic/eui'; import { findTestSubject } from '@elastic/eui/lib/test'; -import { EuiFlexItem } from '@elastic/eui'; import { mountWithIntl } from '@kbn/test-jest-helpers'; import type { Query, AggregateQuery } from '@kbn/es-query'; import { DiscoverGridFlyout, DiscoverGridFlyoutProps } from './discover_grid_flyout'; @@ -36,6 +36,22 @@ jest.mock('../../customizations', () => ({ useDiscoverCustomization: jest.fn(), })); +let mockBreakpointSize: string | null = null; + +jest.mock('@elastic/eui', () => { + const original = jest.requireActual('@elastic/eui'); + return { + ...original, + useIsWithinBreakpoints: jest.fn((breakpoints: string[]) => { + if (mockBreakpointSize && breakpoints.includes(mockBreakpointSize)) { + return true; + } + + return original.useIsWithinBreakpoints(breakpoints); + }), + }; +}); + const waitNextTick = () => new Promise((resolve) => setTimeout(resolve, 0)); const waitNextUpdate = async (component: ReactWrapper) => { @@ -227,7 +243,7 @@ describe('Discover flyout', function () { const singleDocumentView = findTestSubject(component, 'docTableRowAction'); expect(singleDocumentView.length).toBeFalsy(); const flyoutTitle = findTestSubject(component, 'docTableRowDetailsTitle'); - expect(flyoutTitle.text()).toBe('Expanded row'); + expect(flyoutTitle.text()).toBe('Row'); }); describe('with applied customizations', () => { @@ -246,17 +262,32 @@ describe('Discover flyout', function () { describe('when actions are customized', () => { it('should display actions added by getActionItems', async () => { + mockBreakpointSize = 'xl'; mockFlyoutCustomization.actions = { getActionItems: jest.fn(() => [ { id: 'action-item-1', enabled: true, - Content: () => Action 1, + label: 'Action 1', + iconType: 'document', + dataTestSubj: 'customActionItem1', + onClick: jest.fn(), }, { id: 'action-item-2', enabled: true, - Content: () => Action 2, + label: 'Action 2', + iconType: 'document', + dataTestSubj: 'customActionItem2', + onClick: jest.fn(), + }, + { + id: 'action-item-3', + enabled: false, + label: 'Action 3', + iconType: 'document', + dataTestSubj: 'customActionItem3', + onClick: jest.fn(), }, ]), }; @@ -268,6 +299,88 @@ describe('Discover flyout', function () { expect(action1.text()).toBe('Action 1'); expect(action2.text()).toBe('Action 2'); + expect(findTestSubject(component, 'customActionItem3').exists()).toBe(false); + mockBreakpointSize = null; + }); + + it('should display multiple actions added by getActionItems', async () => { + mockFlyoutCustomization.actions = { + getActionItems: jest.fn(() => + Array.from({ length: 5 }, (_, i) => ({ + id: `action-item-${i}`, + enabled: true, + label: `Action ${i}`, + iconType: 'document', + dataTestSubj: `customActionItem${i}`, + onClick: jest.fn(), + })) + ), + }; + + const { component } = await mountComponent({}); + expect( + findTestSubject(component, 'docViewerFlyoutActions') + .find(EuiButtonIcon) + .map((button) => button.prop('data-test-subj')) + ).toEqual([ + 'docTableRowAction', + 'customActionItem0', + 'customActionItem1', + 'docViewerMoreFlyoutActionsButton', + ]); + + act(() => { + findTestSubject(component, 'docViewerMoreFlyoutActionsButton').simulate('click'); + }); + + component.update(); + + expect( + component + .find(EuiPopover) + .find(EuiContextMenuItem) + .map((button) => button.prop('data-test-subj')) + ).toEqual(['customActionItem2', 'customActionItem3', 'customActionItem4']); + }); + + it('should display multiple actions added by getActionItems in mobile view', async () => { + mockBreakpointSize = 's'; + + mockFlyoutCustomization.actions = { + getActionItems: jest.fn(() => + Array.from({ length: 3 }, (_, i) => ({ + id: `action-item-${i}`, + enabled: true, + label: `Action ${i}`, + iconType: 'document', + dataTestSubj: `customActionItem${i}`, + onClick: jest.fn(), + })) + ), + }; + + const { component } = await mountComponent({}); + expect(findTestSubject(component, 'docViewerFlyoutActions').length).toBe(0); + + act(() => { + findTestSubject(component, 'docViewerMobileActionsButton').simulate('click'); + }); + + component.update(); + + expect( + component + .find(EuiPopover) + .find(EuiContextMenuItem) + .map((button) => button.prop('data-test-subj')) + ).toEqual([ + 'docTableRowAction', + 'customActionItem0', + 'customActionItem1', + 'customActionItem2', + ]); + + mockBreakpointSize = null; }); it('should allow disabling default actions', async () => { diff --git a/src/plugins/discover/public/components/discover_grid_flyout/discover_grid_flyout.tsx b/src/plugins/discover/public/components/discover_grid_flyout/discover_grid_flyout.tsx index 58d60466e17b08..40d47e1292f92f 100644 --- a/src/plugins/discover/public/components/discover_grid_flyout/discover_grid_flyout.tsx +++ b/src/plugins/discover/public/components/discover_grid_flyout/discover_grid_flyout.tsx @@ -8,6 +8,7 @@ import React, { useMemo, useCallback } from 'react'; import { i18n } from '@kbn/i18n'; +import { css } from '@emotion/react'; import type { DataView } from '@kbn/data-views-plugin/public'; import { EuiFlexGroup, @@ -29,6 +30,7 @@ import { useDiscoverServices } from '../../hooks/use_discover_services'; import { isTextBasedQuery } from '../../application/main/utils/is_text_based_query'; import { useFlyoutActions } from './use_flyout_actions'; import { useDiscoverCustomization } from '../../customizations'; +import { DiscoverGridFlyoutActions } from './discover_grid_flyout_actions'; export interface DiscoverGridFlyoutProps { savedSearchId?: string; @@ -189,14 +191,13 @@ export function DiscoverGridFlyout({ ); const defaultFlyoutTitle = isPlainRecord - ? i18n.translate('discover.grid.tableRow.textBasedDetailHeading', { - defaultMessage: 'Expanded row', + ? i18n.translate('discover.grid.tableRow.docViewerTextBasedDetailHeading', { + defaultMessage: 'Row', }) - : i18n.translate('discover.grid.tableRow.detailHeading', { - defaultMessage: 'Expanded document', + : i18n.translate('discover.grid.tableRow.docViewerDetailHeading', { + defaultMessage: 'Document', }); const flyoutTitle = flyoutCustomization?.title ?? defaultFlyoutTitle; - const flyoutSize = flyoutCustomization?.size ?? 'm'; return ( @@ -209,17 +210,24 @@ export function DiscoverGridFlyout({ ownFocus={false} > - -

{flyoutTitle}

-
- - - {!isPlainRecord && - flyoutActions.map((action) => action.enabled && )} + + +

{flyoutTitle}

+
+
{activePage !== -1 && ( )}
+ {isPlainRecord || !flyoutActions.length ? null : ( + <> + + + + )}
{bodyContent} diff --git a/src/plugins/discover/public/components/discover_grid_flyout/discover_grid_flyout_actions.tsx b/src/plugins/discover/public/components/discover_grid_flyout/discover_grid_flyout_actions.tsx new file mode 100644 index 00000000000000..a9b168ef7ae8e3 --- /dev/null +++ b/src/plugins/discover/public/components/discover_grid_flyout/discover_grid_flyout_actions.tsx @@ -0,0 +1,201 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import React, { useState } from 'react'; +import { i18n } from '@kbn/i18n'; +import { slice } from 'lodash'; +import { css } from '@emotion/react'; +import { + EuiFlexGroup, + EuiFlexItem, + EuiPopover, + EuiContextMenuPanel, + EuiContextMenuItem, + EuiContextMenuItemIcon, + useIsWithinBreakpoints, + EuiText, + EuiButtonEmpty, + EuiButtonIcon, + EuiPopoverProps, + EuiToolTip, + useEuiTheme, +} from '@elastic/eui'; +import type { FlyoutActionItem } from '../../customizations'; + +const MAX_VISIBLE_ACTIONS_BEFORE_THE_FOLD = 3; + +export interface DiscoverGridFlyoutActionsProps { + flyoutActions: FlyoutActionItem[]; +} + +export function DiscoverGridFlyoutActions({ flyoutActions }: DiscoverGridFlyoutActionsProps) { + const { euiTheme } = useEuiTheme(); + const [isMoreFlyoutActionsPopoverOpen, setIsMoreFlyoutActionsPopoverOpen] = + useState(false); + const isMobileScreen = useIsWithinBreakpoints(['xs', 's']); + const isLargeScreen = useIsWithinBreakpoints(['xl']); + + if (isMobileScreen) { + return ( + setIsMoreFlyoutActionsPopoverOpen(!isMoreFlyoutActionsPopoverOpen)} + > + {i18n.translate('discover.grid.tableRow.mobileFlyoutActionsButton', { + defaultMessage: 'Actions', + })} + + } + isOpen={isMoreFlyoutActionsPopoverOpen} + closePopover={() => setIsMoreFlyoutActionsPopoverOpen(false)} + /> + ); + } + + const visibleFlyoutActions = slice(flyoutActions, 0, MAX_VISIBLE_ACTIONS_BEFORE_THE_FOLD); + const remainingFlyoutActions = slice( + flyoutActions, + MAX_VISIBLE_ACTIONS_BEFORE_THE_FOLD, + flyoutActions.length + ); + const showFlyoutIconsOnly = + remainingFlyoutActions.length > 0 || (!isLargeScreen && visibleFlyoutActions.length > 1); + + return ( + + + + + {i18n.translate('discover.grid.tableRow.actionsLabel', { + defaultMessage: 'Actions', + })} + : + + + + {visibleFlyoutActions.map((action) => ( + + {showFlyoutIconsOnly ? ( + + + + ) : ( + + {/* eslint-disable-next-line @elastic/eui/href-or-on-click */} + + {action.label} + + + )} + + ))} + {remainingFlyoutActions.length > 0 && ( + + + setIsMoreFlyoutActionsPopoverOpen(!isMoreFlyoutActionsPopoverOpen)} + /> + + } + isOpen={isMoreFlyoutActionsPopoverOpen} + closePopover={() => setIsMoreFlyoutActionsPopoverOpen(false)} + /> + + )} + + ); +} + +function FlyoutActionsPopover({ + flyoutActions, + button, + isOpen, + closePopover, +}: { + flyoutActions: DiscoverGridFlyoutActionsProps['flyoutActions']; + button: EuiPopoverProps['button']; + isOpen: EuiPopoverProps['isOpen']; + closePopover: EuiPopoverProps['closePopover']; +}) { + return ( + + ( + + {action.label} + + ))} + /> + + ); +} diff --git a/src/plugins/discover/public/components/discover_grid_flyout/use_flyout_actions.tsx b/src/plugins/discover/public/components/discover_grid_flyout/use_flyout_actions.tsx index fb364995b1c215..e0df28e468003d 100644 --- a/src/plugins/discover/public/components/discover_grid_flyout/use_flyout_actions.tsx +++ b/src/plugins/discover/public/components/discover_grid_flyout/use_flyout_actions.tsx @@ -6,35 +6,18 @@ * Side Public License, v 1. */ -import React from 'react'; -import { - EuiButtonEmpty, - EuiFlexGroup, - EuiFlexItem, - EuiHideFor, - EuiIconTip, - EuiText, -} from '@elastic/eui'; import { i18n } from '@kbn/i18n'; -import { FlyoutCustomization } from '../../customizations'; +import { FlyoutActionItem, FlyoutCustomization } from '../../customizations'; import { UseNavigationProps, useNavigationProps } from '../../hooks/use_navigation_props'; interface UseFlyoutActionsParams extends UseNavigationProps { actions?: FlyoutCustomization['actions']; } -interface FlyoutActionProps { - onClick: React.MouseEventHandler; - href: string; -} - -const staticViewDocumentItem = { - id: 'viewDocument', - enabled: true, - Content: () => , -}; - -export const useFlyoutActions = ({ actions, ...props }: UseFlyoutActionsParams) => { +export const useFlyoutActions = ({ + actions, + ...props +}: UseFlyoutActionsParams): { flyoutActions: FlyoutActionItem[] } => { const { dataView } = props; const { singleDocHref, contextViewHref, onOpenSingleDoc, onOpenContextView } = useNavigationProps(props); @@ -45,95 +28,35 @@ export const useFlyoutActions = ({ actions, ...props }: UseFlyoutActionsParams) } = actions?.defaultActions ?? {}; const customActions = [...(actions?.getActionItems?.() ?? [])]; - const flyoutActions = [ + const flyoutActions: FlyoutActionItem[] = [ { id: 'singleDocument', enabled: !viewSingleDocument.disabled, - Content: () => , + dataTestSubj: 'docTableRowAction', + iconType: 'document', + href: singleDocHref, + onClick: onOpenSingleDoc, + label: i18n.translate('discover.grid.tableRow.viewSingleDocumentLinkLabel', { + defaultMessage: 'View single document', + }), }, { id: 'surroundingDocument', enabled: Boolean(!viewSurroundingDocument.disabled && dataView.isTimeBased() && dataView.id), - Content: () => , + dataTestSubj: 'docTableRowAction', + iconType: 'documents', + href: contextViewHref, + onClick: onOpenContextView, + label: i18n.translate('discover.grid.tableRow.viewSurroundingDocumentsLinkLabel', { + defaultMessage: 'View surrounding documents', + }), + helpText: i18n.translate('discover.grid.tableRow.viewSurroundingDocumentsHover', { + defaultMessage: + 'Inspect documents that occurred before and after this document. Only pinned filters remain active in the Surrounding documents view.', + }), }, ...customActions, ]; - const hasEnabledActions = flyoutActions.some((action) => action.enabled); - - if (hasEnabledActions) { - flyoutActions.unshift(staticViewDocumentItem); - } - - return { flyoutActions, hasEnabledActions }; -}; - -const ViewDocument = () => { - return ( - - - - - {i18n.translate('discover.grid.tableRow.viewText', { - defaultMessage: 'View:', - })} - - - - - ); -}; - -const SingleDocument = (props: FlyoutActionProps) => { - return ( - - - {i18n.translate('discover.grid.tableRow.viewSingleDocumentLinkTextSimple', { - defaultMessage: 'Single document', - })} - - - ); -}; - -const SurroundingDocuments = (props: FlyoutActionProps) => { - return ( - - - - {i18n.translate('discover.grid.tableRow.viewSurroundingDocumentsLinkTextSimple', { - defaultMessage: 'Surrounding documents', - })} - - - - - - - ); + return { flyoutActions: flyoutActions.filter((action) => action.enabled) }; }; diff --git a/src/plugins/discover/public/customizations/customization_types/flyout_customization.ts b/src/plugins/discover/public/customizations/customization_types/flyout_customization.ts index a57a538f216423..794711ba17b178 100644 --- a/src/plugins/discover/public/customizations/customization_types/flyout_customization.ts +++ b/src/plugins/discover/public/customizations/customization_types/flyout_customization.ts @@ -5,10 +5,10 @@ * in compliance with, at your election, the Elastic License 2.0 or the Server * Side Public License, v 1. */ -import { EuiFlyoutProps } from '@elastic/eui'; +import { EuiFlyoutProps, IconType } from '@elastic/eui'; import type { DataTableRecord } from '@kbn/discover-utils/types'; import type { DocViewRenderProps } from '@kbn/unified-doc-viewer/types'; -import React, { type ComponentType } from 'react'; +import React, { type ComponentType, MouseEventHandler } from 'react'; export interface FlyoutDefaultActionItem { disabled?: boolean; @@ -21,8 +21,13 @@ export interface FlyoutDefaultActions { export interface FlyoutActionItem { id: string; - Content: React.ElementType; enabled: boolean; + label: string; + helpText?: string; + iconType: IconType; + onClick: (() => void) | MouseEventHandler; + href?: string; + dataTestSubj?: string; } export interface FlyoutContentProps { diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index 7d00d772784e68..0993a567fe06c0 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -2360,12 +2360,8 @@ "discover.grid.flyout.documentNavigation": "Navigation dans le document", "discover.grid.flyout.toastColumnAdded": "La colonne \"{columnName}\" a été ajoutée.", "discover.grid.flyout.toastColumnRemoved": "La colonne \"{columnName}\" a été supprimée.", - "discover.grid.tableRow.detailHeading": "Document développé", "discover.grid.tableRow.textBasedDetailHeading": "Ligne développée", - "discover.grid.tableRow.viewSingleDocumentLinkTextSimple": "Document unique", "discover.grid.tableRow.viewSurroundingDocumentsHover": "Inspectez des documents qui ont été créés avant et après ce document. Seuls les filtres épinglés restent actifs dans la vue Documents relatifs.", - "discover.grid.tableRow.viewSurroundingDocumentsLinkTextSimple": "Documents relatifs", - "discover.grid.tableRow.viewText": "Afficher :", "discover.helpMenu.appName": "Découverte", "discover.inspectorRequestDataTitleDocuments": "Documents", "discover.inspectorRequestDataTitleMoreDocuments": "Plus de documents", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index aeb90ddb6e8abd..7de467b1da61c3 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -2374,12 +2374,8 @@ "discover.grid.flyout.documentNavigation": "ドキュメントナビゲーション", "discover.grid.flyout.toastColumnAdded": "列'{columnName}'が追加されました", "discover.grid.flyout.toastColumnRemoved": "列'{columnName}'が削除されました", - "discover.grid.tableRow.detailHeading": "拡張ドキュメント", "discover.grid.tableRow.textBasedDetailHeading": "展開された行", - "discover.grid.tableRow.viewSingleDocumentLinkTextSimple": "1つのドキュメント", "discover.grid.tableRow.viewSurroundingDocumentsHover": "このドキュメントの前後に出現したドキュメントを検査します。周りのドキュメントビューでは、固定されたフィルターのみがアクティブのままです。", - "discover.grid.tableRow.viewSurroundingDocumentsLinkTextSimple": "周りのドキュメント", - "discover.grid.tableRow.viewText": "表示:", "discover.helpMenu.appName": "Discover", "discover.inspectorRequestDataTitleDocuments": "ドキュメント", "discover.inspectorRequestDataTitleMoreDocuments": "その他のドキュメント", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index 965af95be52733..97a9fec267ac74 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -2374,12 +2374,8 @@ "discover.grid.flyout.documentNavigation": "文档导航", "discover.grid.flyout.toastColumnAdded": "已添加列“{columnName}”", "discover.grid.flyout.toastColumnRemoved": "已移除列“{columnName}”", - "discover.grid.tableRow.detailHeading": "已展开文档", "discover.grid.tableRow.textBasedDetailHeading": "已展开行", - "discover.grid.tableRow.viewSingleDocumentLinkTextSimple": "单个文档", "discover.grid.tableRow.viewSurroundingDocumentsHover": "检查在此文档之前和之后出现的文档。在周围文档视图中,仅已固定筛选仍处于活动状态。", - "discover.grid.tableRow.viewSurroundingDocumentsLinkTextSimple": "周围文档", - "discover.grid.tableRow.viewText": "视图:", "discover.helpMenu.appName": "Discover", "discover.inspectorRequestDataTitleDocuments": "文档", "discover.inspectorRequestDataTitleMoreDocuments": "更多文档",