Commit graph

85706 commits

Author SHA1 Message Date
Drew Tate
c34f74ff3f
[ES|QL] indentation improvements (#217255)
## Summary

The formatter uses a tab size of 2 spaces. The editor should follow suit
so that it is easy to keep the formatting.

Also, the editor should keep the current indentation automatically.





https://github.com/user-attachments/assets/8c89b33a-2ba3-4332-a858-c5b8cb9c65dd

---------

Co-authored-by: Stratoula Kalafateli <efstratia.kalafateli@elastic.co>
2025-04-07 06:16:32 -06:00
Kevin Delemme
e71ea24e0f
feat(streams): add significant events and queries API (#216221) 2025-04-07 14:10:25 +02:00
Alejandro Fernández Haro
6ef920de90
[ES 9.0] Remove body workaround (@elastic/ml-ui) (#217221)
## Summary

Follow up to https://github.com/elastic/kibana/pull/213375: The latest
version of the ES client fixed the issue
https://github.com/elastic/elasticsearch-js/issues/2584.

We should be able to remove all usages of `// @ts-expect-error
elasticsearch@9.0.0
https://github.com/elastic/elasticsearch-js/issues/2584`.
2025-04-07 13:59:52 +02:00
Kenneth Kreindler
54094bdb96
[Security] [AI assistant] setup/cleanup indices for evaluations (#217078)
## Summary

Summarize your PR. If it involves visual changes include a screenshot or
gif.

Setup indices and datastreams for evaluations. This will be used for
ESQL evals and can be extended to setup other indices for other graphs.

How to test:

1. Enable the evaluations feature flag in kibana.dev.yml
```
xpack.securitySolution.enableExperimental: ['assistantModelEvaluation']
```
2. Launch Kibana
4. Go to evaluations
http://localhost:5601/app/management/kibana/securityAiAssistantManagement?tab=evaluation
5. Start evaluations for the default assistant graph
<img width="1840" alt="image"
src="https://github.com/user-attachments/assets/2974b34f-40a7-4300-8294-d25d4f72b27e"
/>

6. Go to discover -> create a dataview
7. Search for `*evaluations*` and check there are datastreams and
indices
<img width="1840" alt="image"
src="https://github.com/user-attachments/assets/b6e9e476-82de-4292-9757-487ac85d7fce"
/>
8. These indices and datastreams are not cleaned up after the evaluation
finishes. However, they are cleaned up when evaluations are re-run. To
test this, run the evaluation again and see new datastreams and indices
created. We can not do the cleanup after evaluations finish because
evaluations happen asynchronously.



### Checklist

Check the PR satisfies following conditions. 

Reviewers should verify this PR satisfies this list as well.

- [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/src/platform/packages/shared/kbn-i18n/README.md)
- [X]
[Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html)
was added for features that require explanation or tutorials
- [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] If a plugin configuration key changed, check if it needs to be
allowlisted in the cloud and added to the [docker
list](https://github.com/elastic/kibana/blob/main/src/dev/build/tasks/os_packages/docker_generator/resources/base/bin/kibana-docker)
- [X] This was checked for breaking HTTP API changes, and any breaking
changes have been approved by the breaking-change committee. The
`release_note:breaking` label should be applied in these situations.
- [X] [Flaky Test
Runner](https://ci-stats.kibana.dev/trigger_flaky_test_runner/1) was
used on any tests changed
- [X] The PR description includes the appropriate Release Notes section,
and the correct `release_note:*` label is applied per the
[guidelines](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process)

### Identify risks

Does this PR introduce any risks? For example, consider risks like hard
to test bugs, performance regression, potential of data loss.

Describe the risk, its severity, and mitigation for each identified
risk. Invite stakeholders and evaluate how to proceed before merging.

- [ ] [See some risk
examples](https://github.com/elastic/kibana/blob/main/RISK_MATRIX.mdx)
- [ ] ...

---------

Co-authored-by: Elastic Machine <elasticmachine@users.noreply.github.com>
Co-authored-by: Patryk Kopyciński <contact@patrykkopycinski.com>
2025-04-07 13:22:26 +02:00
Robert Jaszczurek
d35988152d
[ML] AIOps: Change Point Detection in Dashboards embeddable fix (#217178)
It fixes an issue where adding the `Change Point Detection` embeddable
didn't work properly.
The bug was introduced in https://github.com/elastic/kibana/pull/197943
The main cause was the use of `<ChangePointDetectionContextProvider>`
which calls `timefilter.getActiveBounds()`. However, for
`getActiveBounds` to work, `this.isTimeRangeSelectorEnabled()` must
return true. By default, this is not the case within dashboards.
However, we do not actually need the `ChangePointDetectionContext`
inside the embeddable, so this PR removes its usage.
A functional test has been added to cover adding the Change Point
embeddable from the dashboards app. It's a very simple test that does
not verify the embeddable's functionality, but it could be improved in a
follow-up.

![image](https://github.com/user-attachments/assets/52b7f28b-87a0-423e-a923-d3e02300bf71)

---------

Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>
2025-04-07 12:06:30 +02:00
Mykola Harmash
2524d0d0e8
[APM] Add xpack.apm.managedOtlpServiceUrl config (#217169)
## Context
A new managed OTLP service endpoint was recently added for serverless,
we now use this endpoint during APM onboarding flow for OTel. The issue
is that the endpoint is not yet exposed as a configuration to Kibana
plugins and we're [hacking
around](https://github.com/elastic/kibana/blob/main/x-pack/solutions/observability/plugins/observability_onboarding/server/lib/get_managed_otlp_service_url.ts)
this by modifying an existing APM managed service endpoint. To do this
properly, we need to expose the new endpoint in the APM plugin
configuration along with the existing `managedServiceUrl` config.

This change adds `managedServiceUrl` property to the APM's config
schema, the value itself will be ingested during serverless project
deployment (🔒 [JIRA
ticket](https://elasticco.atlassian.net/browse/CP-10776?atlOrigin=eyJpIjoiOTcxN2RlYzNkNjFlNDYwOWEyNjliZjkzNjU2ZGQ5Y2MiLCJwIjoiamlyYS1zbGFjay1pbnQifQ)
to change the deployment configuration).
2025-04-07 12:01:29 +02:00
Georgiana-Andreea Onoleață
48c19a5070
[ResponseOps][Cases] Support horizontal scrolling for tables inside the markdown editor (#216979)
Closes https://github.com/elastic/kibana/issues/216421

## Summary

- Applied changes to improve layout stability: removed the `word-break
`and limited the outer flex item to `max-width: 75%`, as suggested in
the ticket


https://github.com/user-attachments/assets/607e9867-e10c-4118-9567-580549708806

---------

Co-authored-by: Christos Nasikas <xristosnasikas@gmail.com>
Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>
2025-04-07 11:54:11 +02:00
Jean-Louis Leysens
135b57bbac
[OAS] Migrate _export and _import APIs to code-first OAS (#217146)
## Summary

* Removes manually maintained OAS for Core's `_export` and `_import`
Saved Object APIs
* seeks to remove some code duplication and move our OAS descriptions
closer to the code definitions.
2025-04-07 11:45:47 +02:00
Julia Bardi
afad46b89a
[Fleet] Auto upgrade fixes: filter out inactive agents in status API, fix agent fetcher (#217024)
## Summary

Filter out inactive agents in auto upgrade status API - this fixes
uninstalled agents incorrectly included in the % calculation.

For example with 10 active and 5 uninstalled agents, the percentages are
lower than expected.
<img width="1787" alt="image"
src="https://github.com/user-attachments/assets/bd0ebcea-88c5-40d0-b982-f605e83b4eb8"
/>

After the change, the 5 uninstalled agents are not included:
<img width="1778" alt="image"
src="https://github.com/user-attachments/assets/72349902-bbb8-4adb-a69e-8dbfc92ad89e"
/>

The other fix is related to the auto upgrade logic:
https://github.com/elastic/kibana/pull/215069#discussion_r2026552722

### Checklist

- [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
2025-04-07 10:55:16 +02:00
Kibana Machine
6453530497
[api-docs] 2025-04-07 Daily api_docs build (#217279)
Generated by
https://buildkite.com/elastic/kibana-api-docs-daily/builds/1035
2025-04-07 08:30:08 +02:00
Kibana Machine
2092d4065c
[api-docs] 2025-04-06 Daily api_docs build (#217273)
Generated by
https://buildkite.com/elastic/kibana-api-docs-daily/builds/1034
2025-04-06 07:14:14 +01:00
Kibana Machine
079f4f5d15
[api-docs] 2025-04-05 Daily api_docs build (#217265)
Generated by
https://buildkite.com/elastic/kibana-api-docs-daily/builds/1033
2025-04-05 07:23:42 +01:00
Alberto Blázquez
57f40963fe
Update Asset Inventory to match acceptance criteria (#210470)
## Summary

It closes https://github.com/elastic/kibana/issues/217079

- Update implementation as per the the Asset Inventory [Enable Users to
Search, Filter, and Group Assets within Asset Inventory acceptance
criteria](https://github.com/elastic/security-team/issues/10344):
    - Set the default columns for the data table as it is specified in 
    - Update filter attributes
- Update implementation to match answers given in [this
epic](https://github.com/elastic/security-team/issues/11856):
    - Hide 3-dots button on each data table row
    - Remap bar chart fields to `entity.type` and `entity.sub_type`

### Checklist

- [x] This was checked for breaking HTTP API changes, and any breaking
changes have been approved by the breaking-change committee. The
`release_note:breaking` label should be applied in these situations.
- [x] The PR description includes the appropriate Release Notes section,
and the correct `release_note:*` label is applied per the
[guidelines](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process)

### Risks

No risks whatsoever.

---------

Co-authored-by: Paulo Henrique <paulo.henrique@elastic.co>
2025-04-04 23:13:11 +01:00
Mike Côté
93174d3887
Change reporting CODEOWNERS to response ops (#213560)
In this PR, I'm changing the CODEOWNERS for reporting related modules.
While reviewing, ensure I haven't missed anything or moved a module that
should remain part of sharedux team.

---------

Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>
Co-authored-by: Tim Sullivan <tsullivan@users.noreply.github.com>
Co-authored-by: Timothy Sullivan <tsullivan@elastic.co>
2025-04-04 23:27:42 +02:00
Hannah Mudge
8382475eb5
[kbn-grid-layout] [Dashboard] Fix memoization of onLayoutChange callback (#217235)
Closes https://github.com/elastic/kibana/issues/217117

## Summary

In the dashboard grid component, we memoize the `onLayoutChange`
callback with `viewMode` as a dependency:


64142047fb/src/platform/plugins/shared/dashboard/public/dashboard_renderer/grid/dashboard_grid.tsx (L80-L105)

However, on the `kbn-grid-layout` side, the subscription responsible for
calling `onLayoutChange` was set up in a `useEffect` that did **not**
have the `onLayoutChange` prop as a dependency - so even though the prop
was changing, the subscription continued to use the original value.

That means that if the dashboard starts in view mode, then the
`kbn-grid-layout` layout change subscription will always be calling the
version of `onLayoutChange` where it returns early; and likewise when
you start the dashboard in edit mode. By adding `onLayoutChange` as a
dependency to the `useEffect` that sets up the subscriptions, this no
longer happens.

### Before



https://github.com/user-attachments/assets/5df796f5-929d-4522-b438-64cc49292ed6

### After



https://github.com/user-attachments/assets/286dd459-b429-40fb-8cb7-661b3f870214



### Checklist

- [x] The PR description includes the appropriate Release Notes section,
and the correct `release_note:*` label is applied per the
[guidelines](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process)
2025-04-04 14:53:17 -06:00
Luke Gmys
62b418b907
[Security Solution] Remove .title use in use_selected_patterns (#216994)
## Summary

Internal change removing deprecated `.title` use in favor of
`.getIndexPatterns()` call on the DataView.
2025-04-04 21:00:28 +01:00
Philippe Oberti
837059bcfa
[Security Solution] clean unused types, export components and add many unit tests (#217100)
## Summary

This code change was originally part of [a bigger
PR](https://github.com/elastic/kibana/pull/216744) related to the AI for
SOC effort. I decided to split the work for 2 reasons:
- less files to review, less teams impacted
- this current PR will easily be backported to `8.x` while the AI for
SOC is only targeting `9.1`

This PR makes only a few small changes:
- remove unused types
- export a few components/functions outside of the `alerts_table` folder
to make them reusable within the new AI for SOC alert summary page (see
PR linked above)
- add a lot of unit tests to everything, especially the now exported
components/functions

#### UI remains unchanged:

![Screenshot 2025-04-03 at 6 09
57 PM](https://github.com/user-attachments/assets/3e4135e7-6e2f-4b4f-94e5-0dd72f1710bb)
![Screenshot 2025-04-03 at 6 10
06 PM](https://github.com/user-attachments/assets/382391d6-7ae1-4da4-a76f-495b6db69db3)
![Screenshot 2025-04-03 at 6 10
13 PM](https://github.com/user-attachments/assets/28c5947b-2168-4080-b298-5fea1f3f97c7)
![Screenshot 2025-04-03 at 6 10
21 PM](https://github.com/user-attachments/assets/2dc75fcb-9929-4821-830d-b84fceaf232d)

### 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/src/platform/packages/shared/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

Will unblock https://github.com/elastic/security-team/issues/11973
2025-04-04 14:11:23 -05:00
Philippe Oberti
2ed4266ea5
[AI4DSOC] Fix issue with filtering by integrations (#216574)
## Summary

This PR fixes an issue with the logic implemented in [this previous
PR](https://github.com/elastic/kibana/pull/215586):
_In the AI for SOC effort, each integration is bundled with a single
rule. This means that deselecting a source from the Source filter button
is equivalent to adding a filter to the search bar to exclude all alerts
with the kibana.alert.rule.name property having the value of that
integration._

The problem with the previous logic above is the value in the
`kibana.alert.rule.name` field can be overridden (see `Rule name
override
[here](https://www.elastic.co/guide/en/security/current/rules-ui-create.html)).
Therefore filtering alerts by this value does not guarantee that all the
alerts generated by the rule will be correctly filtered out.

The new logic uses the `rule.id` instead of the `rule.name`, which we
then use to filter using the `signal.rule.id` field instead of
`kibana.alert.rule.name`

### Example:

 There are following 2 integrations installed:
```typescript
[
  {
    id: 'splunk',
    name: 'splunk',
    status: installationStatuses.Installed,
    title: 'Splunk',
    version: '',
  },
  {
    id: 'google_secops',
    name: 'google_secops',
    status: installationStatuses.Installed,
    title: 'Google SecOps',
    version: '',
  },
]
```

This means that - in theory - there are the following 2 rules installed
and running:
```typescript
[
  {
    related_integrations: [{ package: 'splunk' }],
    id: 'splunk_rule_id',
  },
  {
    related_integrations: [{ package: 'google_secops' }],
    id: 'google_secops_rule_id',
  },
]
```

In this case, the `Sources` button would show 2 entries, as follow:
```typescript
[
  {
    checked: 'on',
    key: 'splunk_rule_id',
    label: 'Splunk',
  },
  {
    checked: 'on',
    key: 'google_secops_rule_id',
    label: 'Splunk',
  },
]
```

This PR also fixes a small miss in [the prior
PR](https://github.com/elastic/kibana/pull/215585) that implemented the
KPI section, where I had forgotten to pass the KQL filters to the
charts.

#### Before


https://github.com/user-attachments/assets/77e583c6-718f-46d9-96b4-42ee9976161b

#### After


https://github.com/user-attachments/assets/50e8e541-5798-4906-b7cc-4f9756dbdefc

## How to test

This needs to be ran in Serverless:
- `yarn es serverless --projectType security`
- `yarn serverless-security --no-base-path`

You also need to enable the AI for SOC tier, by adding the following to
your `serverless.security.dev.yaml` file:
```
xpack.securitySolutionServerless.productTypes:
  [
    { product_line: 'ai_soc', product_tier: 'search_ai_lake' },
  ]
```

Use one of these Serverless users:
- `platform_engineer`
- `endpoint_operations_analyst`
- `endpoint_policy_manager`
- `admin`
- `system_indices_superuser`

### Notes

- generate data: `yarn test:generate:serverless-dev`
- create 4 catch all rules, each with a name of a AI for SOC integration
(`google_secops`, `microsoft_sentinel`,, `sentinel_one` and
`crowdstrike`)
- change [this
line](https://github.com/elastic/kibana/blob/main/x-pack/solutions/security/plugins/security_solution/public/detections/hooks/alert_summary/use_fetch_integrations.ts#L73)
to `installedPackages: availablePackages` to force having some packages
installed
- change [this
line](https://github.com/elastic/kibana/blob/main/x-pack/solutions/security/plugins/security_solution/public/detections/hooks/alert_summary/use_integrations.ts#L63)
to `r.name === p.name` to make sure there will be matches between
integrations and rules

### Checklist

- [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

https://github.com/elastic/security-team/issues/11956
2025-04-04 19:59:38 +01:00
Ola
3c2b4daf97
[Dashboards] Update response on HTTP API should return a 200, not 201 (#217054)
## Summary

Changes response from 201 to 200 in the dashboard updateRoute.

Closes: #212673
2025-04-04 18:48:58 +01:00
Dzmitry Lemechko
64142047fb
[scout] fix flaky flyout test (#217153)
## Summary

```
TimeoutError: page.waitForSelector: Timeout 10000ms exceeded.
Call log:
  - waiting for locator('[data-test-subj="globalLoadingIndicator-hidden"]')

    at Object.waitForSelector (src/platform/packages/shared/kbn-scout/src/playwright/fixtures/test/scout_page/single_thread.ts:47:27)
    at Page.waitForLoadingIndicatorHidden (src/platform/packages/shared/kbn-scout/src/playwright/fixtures/test/scout_page/single_thread.ts:91:27)
    at x-pack/solutions/security/plugins/security_solution/ui_tests/parallel_tests/flyout/alert_details_url_sync.spec.ts:40:16
```

Failure rate before changes: 60%

<img width="487" alt="image"
src="https://github.com/user-attachments/assets/9331f973-9337-48cf-9131-c3acbf611d9c"
/>

For some reason specifically in serverless Security project loading
indicator is not hidden on page reload after 10 seconds.

To unblock Teams this PR changes tests to wait for
`detectionsAlertsPage` to be visible instead. The follow-up is to set
loading status directly in Alerting Table component and wait for
`alertsTable-loaded` data-test-subj in UI tests before interacting with
table.

Failure rate with changes: 0%
<img width="1592" alt="Screenshot 2025-04-04 at 17 08 32"
src="https://github.com/user-attachments/assets/c955ed94-bc92-4328-a3b5-0194806d31b1"
/>
2025-04-04 12:21:30 -05:00
Steph Milovic
df86cbbd72
[Security solution] AI Assistant prompt clean up (#217058) 2025-04-04 10:06:40 -06:00
Joe Reuter
9488bff6b8
🌊 Fix managed llm connector check (#217197)
Check was checking the wrong way
2025-04-04 16:44:22 +01:00
florent-leborgne
f7482f0006
[Docs] Add link to 8.18 RNs from 9.0 (#217215)
Add a link since 8.18 is mandatory to upgrade to 9.0
2025-04-04 15:39:27 +00:00
Marco Antonio Ghiani
024f17a6b6
[Streams 🌊] Report ignored_fields error for enrichment simulation docs (#216877)
## 📓 Summary

Closes https://github.com/elastic/streams-program/issues/101

These changes update the simulation to detected ignored fields and
mapping failures.
As these failures are detected simulating an ingestion, the
`_ingest/_simulate` API won't tell us which processor caused the
failure, but we can associate it to the document.

### Wired streams

- `agent.name` is mapped with `ignore_above: 4` to simulate short string
ignored fields
- `long_number` is mapped as `long`

I tried parsing a string into `agent.name` to simulate the
ignored_fields, and similarly I tried parsing a string into
`long_number` to simulate the mapping failure.


https://github.com/user-attachments/assets/09b604da-ae45-43a6-a30a-737061ff0f90

### Classic streams

Tried mapping a word into `nginx.error.connection_id` field which is
mapped as `long`


https://github.com/user-attachments/assets/e6a1d47d-3080-452c-896a-2074f2f0c920
2025-04-04 15:58:45 +01:00
Ania Kowalska
46b000f5fa
Add items count to fields accordion title aria-label (#216993) 2025-04-04 16:55:16 +02:00
Aleh Zasypkin
a0b0de16c8
chore(deps): upgrade tar-fs from 2.1.1 to 2.1.2 (#217173)
## Summary

Upgrade `tar-fs` from `2.1.1` to `2.1.2`.
2025-04-04 16:18:38 +02:00
Drew Tate
a1db715efe
[ES|QL] Remove client-side parsing error log (#217114)
## Summary

We used to log all parsing errors for diagnostic purposes when since
they were never expected to happen.

With
21845ad7a1
they became much more common, especially while editing queries, because
of ANTLR stack popping exceptions (see
https://github.com/elastic/elasticsearch/issues/119025).

We should stop logging them all to the console... it makes it look like
something is wrong.

Query to test with:
`FROM kibana_sample_data_* 
| WHERE @timestamp != )`
2025-04-04 08:03:11 -06:00
Maria Iriarte
e942404cb9
[Lens] Add missing formula editor style for both default and fullscreen configurations (#217003)
## Summary

Closes https://github.com/elastic/kibana/issues/216436

Adds missing lens formula editor style for both default and fullscreen
configurations.

### Screenshots

#### Before

<img width="436" alt="Screenshot 2025-04-03 at 13 52 36"
src="https://github.com/user-attachments/assets/0bdfdbf6-9e31-4416-9713-1cc528a0d166"
/>

#### After

<img width="437" alt="Screenshot 2025-04-03 at 13 51 14"
src="https://github.com/user-attachments/assets/92060fa1-e9c1-4285-aa8c-1b6c38b16fe2"
/>

## Checklist

- [x] The PR description includes the appropriate Release Notes section,
and the correct `release_note:*` label is applied per the
[guidelines](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process)
2025-04-04 14:49:31 +01:00
Jesus Wahrman
4938014343
[SO migration] Move to previous step in update mappings wait when it fails with search_phase_execution_exception (#216693)
## Summary

Resolves https://github.com/elastic/kibana/issues/207096

This continues the work in https://github.com/elastic/kibana/pull/213979

Sometimes ES returns a 200 response containing an error field when we
wait for the update mappings task. This case wasn't being handled. This
PR handles that case, when we find a `search_phase_execution_exception`
in the ES response we return a retryable error that sends us back to the
update mappings state. It does it for both migration algorithms, the
priority is ZDT but seemed like a nice to have in both.

### Checklist

Check the PR satisfies following conditions. 

Reviewers should verify this PR satisfies this list as well.

- [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] The PR description includes the appropriate Release Notes section,
and the correct `release_note:*` label is applied per the
[guidelines](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process)
2025-04-04 14:37:06 +01:00
Julia Bardi
6d1129d8eb
[Fleet] add overlay to add/edit integration page (#217151)
## Summary

Closes https://github.com/elastic/kibana/issues/214266

Prevent edits when Add integration / Edit integration form is being
submitted by adding an overlay.



https://github.com/user-attachments/assets/2bf20e1f-2990-445a-ae76-1cfa75e7c1e1



https://github.com/user-attachments/assets/1f03021f-e990-4b5d-a6e7-3ffabccb9618



https://github.com/user-attachments/assets/6a84e80a-d3a5-49c9-a808-cc5ff8e9248d
2025-04-04 15:13:09 +02:00
Joe Reuter
76c79cb9ed
🌊 Streams: Routing UI improvements (#215925)
Streamlines the UI of routing a bit:
* Move add button to the top right
* Pull enabled/disabled into separate row
* Only show a single line for streams not in edit mode
* Clearly label disabled
* Hide the drag handle by default and slide in on hover

![Kapture 2025-03-25 at 18 12
31](https://github.com/user-attachments/assets/6ecbace5-8ffa-46fe-9b8f-6d275dbbedb6)


Divergence from the design:
* Show preview of existing routing condition on select: This is tricky
for the same reason we can't do previews of changes to routing
conditions. I think we should stay away from it until we actually solved
this problem
* Show form in disabled state when a stream routing is disabled - we
don't retain the disabled condition in this situation and there isn't a
good place to put it. I think we should split that out, but I can see
how it makes sense so you can disable without having to type the
condition again. However, it's a bit of a harder change because it would
change the streams backend as well which I want to decouple from the
relatively forward UX change it is right now
2025-04-04 14:52:36 +02:00
Joe Reuter
64d74b0fe0
🌊 Streams: Fix dashboards error toast on first visit of classic streams (#217163)
When navigating to the details page of a classic stream for the first
time, it would show an error toast from the `/dashboards` endpoint. This
happened because there was a bug in `ensureStream` - it would throw if
the data stream has been found but there wouldn't be a streams
definition.

This PR fixes the bug and adds an integration test for it.
2025-04-04 13:51:53 +01:00
Paul Tavares
12d78d9477
[Security Solution][Endpoint] Improvements to policy selection component (#215417)
## Summary

### Fleet changes

- Fixed `GetPackagePoliciesRequest` (was missing `query` options
supported)


### Security Solution

This PR refactors the Policy Selection UI component - used mainly with
Artifact pages/forms - to remove the prior limitation of only displaying
the first 1,000 policies in the system. This new version of the
component is not connected to the API and allows a user to paginate
through the list of policies in the system, including being able to
search for policies while maintaining those that have been already
selected.

Some of the new features in this new component include:

- Page through list of available policies
- Search for policies (by default, it searches against `name`,
`description`, `policy_ids` and `package.name`)
- Ability to `select all` / `unselect all` policies currently displayed
- Ability to view the already selected list of policies
2025-04-04 08:35:08 -04:00
Miriam
faae1423f0
[ObsUX][A11y] Add aria-label to "Show all" links (#217076)
Closes https://github.com/elastic/kibana/issues/194973

## Summary

There are multiple links that say "Show all" but do not provide context
to answer all of what?

### What was done
Added aria-label to all the "Show all links"

### How to test
Use screen reader to see the context of the link

EXAMPLES

<img width="1232" alt="Screenshot 2025-04-03 at 17 45 47"
src="https://github.com/user-attachments/assets/8e8b33f8-d2f1-45b5-99ed-e9306a832d9c"
/>

<img width="1232" alt="Screenshot 2025-04-03 at 17 46 03"
src="https://github.com/user-attachments/assets/e23cce5c-dca0-41ec-9221-0c32dbc8eb0d"
/>

<img width="1232" alt="Screenshot 2025-04-03 at 17 46 45"
src="https://github.com/user-attachments/assets/c7fe658c-5ab2-4665-a187-671ba7b49bfd"
/>
2025-04-04 13:07:58 +01:00
Elena Shostak
a19056f5c3
[Authz] Moved ApiPrivileges to core server package (#216051)
## Summary

The `ApiPrivileges` utility was introduced in
https://github.com/elastic/kibana/pull/208067 to help enforce naming
convention standards for API privileges, however the utility is located
in a private platform package and not accessible by non-platform
plugins, e.g. solutions.

Moved `ApiPrivileges` to `src/core/packages/security/server`


### Checklist
- [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] The PR description includes the appropriate Release Notes section,
and the correct `release_note:*` label is applied per the
[guidelines](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process)


__Closes: https://github.com/elastic/kibana/issues/215096__

---------

Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>
Co-authored-by: Elastic Machine <elasticmachine@users.noreply.github.com>
2025-04-04 13:31:53 +02:00
Joe Reuter
10358d6f9e
🌊 Streams: Move datepicker into chart panel on overview page (#217014)
This PR moves the datepicker on the overview page into the chart panel
to claim some additional vertical screen space and to make it clearer
what the stats on top of the page mean:

<img width="1016" alt="Screenshot 2025-04-03 at 14 58 27"
src="https://github.com/user-attachments/assets/b0100a3e-e9c4-419e-9803-45558b8a0fad"
/>

It also refactors the code a bit and reduces prop drilling in some
areas.

---------

Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>
2025-04-04 12:07:33 +01:00
Julia Rechkunova
6a0c173b1a
[ES|QL] Fix CSV report time range when exporting from Discover (#216792)
- Closes https://github.com/elastic/kibana/issues/216605

## Summary

This PR makes sure to use the absolute time range when generating a CSV
report in ES|QL mode.


### Checklist

- [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] [Flaky Test
Runner](https://ci-stats.kibana.dev/trigger_flaky_test_runner/1) was
used on any tests changed
2025-04-04 12:54:45 +02:00
Paulina Shakirova
8b848120d1
[SharedUX] SCSS migration image_embeddable plugin (#216045)
## Summary

This PR is a part of SCSS migration of SharedUX team code.
Here is a [meta](https://github.com/elastic/kibana-team/issues/1417)
issue for it.
2025-04-04 11:44:21 +02:00
Paulina Shakirova
8d9e253469
[SharedUX] SCSS migration reporting plugin (#215492)
## Summary

This PR is a part of a [Replace SCSS with
CSS-in-JS](https://github.com/elastic/kibana-team/issues/1417) epic.

- rewriting styles using `@emotion/react`
2025-04-04 11:43:37 +02:00
Jatin Kathuria
5846a5821c
[Siem Migrations] Adds separate migration index to store migration metadata (#216164)
## Summary

Fixes: https://github.com/elastic/security-team/issues/12233


This PR simply adds a new `migration` index to store the migration data
with `migration_id` as the only property for now.

The APIs remain unchanged.

Below are the mapping for new index
`.kibana-siem-rule-migrations-migrations-default` based on the pattern
`..kibana-siem-rule-migrations-<indexAdapterId>-<spaceName>`

```
{
  ".kibana-siem-rule-migrations-migrations-default": {
    "mappings": {
      "dynamic": "false",
      "_meta": {
        "namespace": "default",
        "kibana": {
          "version": "9.1.0"
        },
        "managed": true
      },
      "properties": {
        "created_at": {
          "type": "date"
        },
        "created_by": {
          "type": "keyword"
        },
        "id": {
          "type": "keyword"
        }
      }
    }
  }
}
```


Below is how a sample document looks like:

```json
      {
        "_index": ".kibana-siem-rule-migrations-migrations-default",
        "_id": "C7oi15UBS6DCfB3qd4_l",
        "_score": 1,
        "_source": {
      
          "created_by": "u_mGBROF_q5bmFCATbLXAcCwKa0k8JvONAwSruelyKA5E_0",
          "created_at": "2025-03-27T10:25:15.232Z"
        }
      }
```

---------

Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>
2025-04-04 10:25:12 +01:00
José Luis González
12ebf35673
[Query Rules] Page temaplate and empty state (#216659)
## Summary

First screen of the Query Rules section and basic logic under Feature
Flag:
```
POST kbn:/internal/kibana/settings/queryRules:queryRulesEnabled {"value": true}
```

- [x] Create a page template for query rules UI. 
- [x] Create route for fetch query ruleset list.
- [x] Create hook for the API created
- [x] On page load error case, reroute user to the missing permissions
prompt.(missing permissions prompt is generic, no designs are needed,
can copy from other plugins)
- [x] Create empty rules prompt as shown in design.

![CleanShot 2025-04-03 at 16 47
41@2x](https://github.com/user-attachments/assets/d3bee1f7-ce41-4a9c-9368-a7d0edac7774)


### Related Jira tickets: 
-
https://elasticco.atlassian.net/browse/SEARCH-925?atlOrigin=eyJpIjoiZGFlOTdhYmU3MzE2NDgwMzhjZTg0MjBiZTI2YWY0MGEiLCJwIjoiaiJ9
-
https://elasticco.atlassian.net/browse/SEARCH-926?atlOrigin=eyJpIjoiOTRiNmE0MjY0NDRjNGM0NmJlYzc3NTk1NTczNTliYjUiLCJwIjoiaiJ9

### Checklist

Check the PR satisfies following conditions. 

Reviewers should verify this PR satisfies this list as well.

- [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/src/platform/packages/shared/kbn-i18n/README.md)
- [x]
[Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html)
was added for features that require explanation or tutorials
- [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
- [ ] If a plugin configuration key changed, check if it needs to be
allowlisted in the cloud and added to the [docker
list](https://github.com/elastic/kibana/blob/main/src/dev/build/tasks/os_packages/docker_generator/resources/base/bin/kibana-docker)
- [ ] This was checked for breaking HTTP API changes, and any breaking
changes have been approved by the breaking-change committee. The
`release_note:breaking` label should be applied in these situations.
- [ ] [Flaky Test
Runner](https://ci-stats.kibana.dev/trigger_flaky_test_runner/1) was
used on any tests changed
- [ ] The PR description includes the appropriate Release Notes section,
and the correct `release_note:*` label is applied per the
[guidelines](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process)

### Identify risks

Does this PR introduce any risks? For example, consider risks like hard
to test bugs, performance regression, potential of data loss.

Describe the risk, its severity, and mitigation for each identified
risk. Invite stakeholders and evaluate how to proceed before merging.

- [ ] [See some risk
examples](https://github.com/elastic/kibana/blob/main/RISK_MATRIX.mdx)
- [ ] ...

---------

Co-authored-by: Elastic Machine <elasticmachine@users.noreply.github.com>
Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>
Co-authored-by: Liam Thompson <32779855+leemthompo@users.noreply.github.com>
2025-04-04 11:21:25 +02:00
Joe Reuter
320f1d2aee
🌊 Streams: Warn about EIS costs and improve current storage display (#216884)
If a managed connector is used, show a icon with a tooltip to remind
them this costs money
<img width="436" alt="Screenshot 2025-04-02 at 17 00 56"
src="https://github.com/user-attachments/assets/495fa834-a0ec-4228-802e-ea2eee7678c5"
/>

I checked on serverless prod that the numbers we report on storage size
is identical with what `/app/management/data/data_usage` based on
auto-ops reports, with some caveats:
* We were using the eui number formatter which was configured to use
megabyte (MB, 1000^2) instead of mebibyte (MiB, 1024^2) - auto ops was
using mebibyte but still formatted the number as MB. I switched it over
to use mebibyte, so the numbers are the same now, but it's rendering
`MiB`. IMHO this is OK since it's more exact, but I wanted to call it
out
<img width="141" alt="Screenshot 2025-04-02 at 17 35 03"
src="https://github.com/user-attachments/assets/6145acfb-9a84-4ba0-81d0-a32718a5fff4"
/>

* On the overview page, the refresh button would not refresh the data
stream stats, which would cause a drift of the numbers over time. Fixed
that

---------

Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>
2025-04-04 11:19:07 +02:00
Marco Liberati
baf1864332
[FTR] Reduce debug logging for Selenium elements (#216976)
## Summary

While debugging FTRs I've noticed some methods are flooding the console
with serialized versions of Selenium Elements, which contain useless
details.
So I've came up with a simple solution to reduce this bloat into a
simpler generic placeholder.

* ⬇️ Smaller logs space footprint
*  Faster method serialization
*  Visually the method will be less prominent on a quick scan and a
`search` is required.

<details>
  <summary>Before vs After logs comparison</summary>
Before:

```
     ...
│ debg lensPage.getMetricElementIfExists('h2', {"Keys":{"NULL":"","CANCEL":"","HELP":"","BACK_SPACE":"","TAB":"","CLEAR":"","RETURN":"","ENTER":"","SHIFT":"","CONTROL":"","ALT":"","PAUSE":"","ESCAPE":"","SPACE":"","PAGE_UP":"","PAGE_DOWN":"","END":"","HOME":"","ARROW_LEFT":"","LEFT":"","ARROW_UP":"","UP":"","ARROW_RIGHT":"","RIGHT":"","ARROW_DOWN":"","DOWN":"","INSERT":"","DELETE":"","SEMICOLON":"","EQUALS":"","NUMPAD0":"","NUMPAD1":"","NUMPAD2":"","NUMPAD3":"","NUMPAD4":"","NUMPAD5":"","NUMPAD6":"","NUMPAD7":"","NUMPAD8":"","NUMPAD9":"","MULTIPLY":"","ADD":"","SEPARATOR":"","SUBTRACT":"","DECIMAL":"","DIVIDE":"","F1":"","F2":"","F3":"","F4":"","F5":"","F6":"","F7":"","F8":"","F9":"","F10":"","F11":"","F12":"","COMMAND":"","META":"","ZENKAKU_HANKAKU":""},"isChromium":true,"_webElement":{"driver_":{"session_":{},"executor_":{"customCommands_":{},"log_":{"name_":"driver.http.Executor","level_":null,"parent_":{"name_":"driver.http","level_":null,"parent_":{"name_":"driver","level_":null,"parent_":{"name_":"","level_":{"name_":"OFF","value_":null},"parent_":null,"handlers_":null},"handlers_":null},"handlers_":null},"handlers_":null},"w3c":true},"fileDetector_":null,"authenticatorId_":null,"pinnedScripts_":{}},"id_":{},"log_":{"name_":"driver","level_":null,"parent_":{"name_":"","level_":{"name_":"OFF","value_":null},"parent_":null,"handlers_":null},"handlers_":null}},"locator":null,"driver":{"session_":{},"executor_":{"customCommands_":{},"log_":{"name_":"driver.http.Executor","level_":null,"parent_":{"name_":"driver.http","level_":null,"parent_":{"name_":"driver","level_":null,"parent_":{"name_":"","level_":{"name_":"OFF","value_":null},"parent_":null,"handlers_":null},"handlers_":null},"handlers_":null},"handlers_":null},"w3c":true},"fileDetector_":null,"authenticatorId_":null,"pinnedScripts_":{}},"timeout":10000,"fixedHeaderHeight":100,"logger":{"indentWidth$":{"closed":false,"currentObservers":[],"observers":[],"isStopped":false,"hasError":false,"thrownError":null,"_value":8},"writers$":{"closed":false,"currentObservers":[],"observers":[],"isStopped":false,"hasError":false,"thrownError":null,"_value":[{"level":{"name":"debug","flags":{"silent":true,"error":true,"warning":true,"success":true,"info":true,"debug":true,"verbose":false}},"writeTo":{"connecting":false,"_hadError":false,"_parent":null,"_host":null,"_closeAfterHandlingError":false,"_events":{},"_readableState":{"highWaterMark":0,"buffer":[],"bufferIndex":0,"length":0,"pipes":[],"awaitDrainWriters":null},"_writableState":{"highWaterMark":16384,"length":0,"corked":0,"writelen":0,"bufferedIndex":0,"pendingcb":0},"allowHalfOpen":false,"_eventsCount":1,"_sockname":null,"_pendingData":null,"_pendingEncoding":"","server":null,"_server":null,"columns":272,"rows":56,"_type":"tty","fd":1,"_isStdio":true}}]},"written$":{"closed":false,"currentObservers":[],"observers":[],"isStopped":false,"hasError":false,"thrownError":null}},"browserType":"chrome"})
       │ debg Find.descendantExistsByCssSelector('h2') with timeout=2500
       │ debg lensPage.getMetricElementIfExists('h2', {"Keys":{"NULL":"","CANCEL":"","HELP":"","BACK_SPACE":"","TAB":"","CLEAR":"","RETURN":"","ENTER":"","SHIFT":"","CONTROL":"","ALT":"","PAUSE":"","ESCAPE":"","SPACE":"","PAGE_UP":"","PAGE_DOWN":"","END":"","HOME":"","ARROW_LEFT":"","LEFT":"","ARROW_UP":"","UP":"","ARROW_RIGHT":"","RIGHT":"","ARROW_DOWN":"","DOWN":"","INSERT":"","DELETE":"","SEMICOLON":"","EQUALS":"","NUMPAD0":"","NUMPAD1":"","NUMPAD2":"","NUMPAD3":"","NUMPAD4":"","NUMPAD5":"","NUMPAD6":"","NUMPAD7":"","NUMPAD8":"","NUMPAD9":"","MULTIPLY":"","ADD":"","SEPARATOR":"","SUBTRACT":"","DECIMAL":"","DIVIDE":"","F1":"","F2":"","F3":"","F4":"","F5":"","F6":"","F7":"","F8":"","F9":"","F10":"","F11":"","F12":"","COMMAND":"","META":"","ZENKAKU_HANKAKU":""},"isChromium":true,"_webElement":{"driver_":{"session_":{},"executor_":{"customCommands_":{},"log_":{"name_":"driver.http.Executor","level_":null,"parent_":{"name_":"driver.http","level_":null,"parent_":{"name_":"driver","level_":null,"parent_":{"name_":"","level_":{"name_":"OFF","value_":null},"parent_":null,"handlers_":null},"handlers_":null},"handlers_":null},"handlers_":null},"w3c":true},"fileDetector_":null,"authenticatorId_":null,"pinnedScripts_":{}},"id_":{},"log_":{"name_":"driver","level_":null,"parent_":{"name_":"","level_":{"name_":"OFF","value_":null},"parent_":null,"handlers_":null},"handlers_":null}},"locator":null,"driver":{"session_":{},"executor_":{"customCommands_":{},"log_":{"name_":"driver.http.Executor","level_":null,"parent_":{"name_":"driver.http","level_":null,"parent_":{"name_":"driver","level_":null,"parent_":{"name_":"","level_":{"name_":"OFF","value_":null},"parent_":null,"handlers_":null},"handlers_":null},"handlers_":null},"handlers_":null},"w3c":true},"fileDetector_":null,"authenticatorId_":null,"pinnedScripts_":{}},"timeout":10000,"fixedHeaderHeight":100,"logger":{"indentWidth$":{"closed":false,"currentObservers":[],"observers":[],"isStopped":false,"hasError":false,"thrownError":null,"_value":8},"writers$":{"closed":false,"currentObservers":[],"observers":[],"isStopped":false,"hasError":false,"thrownError":null,"_value":[{"level":{"name":"debug","flags":{"silent":true,"error":true,"warning":true,"success":true,"info":true,"debug":true,"verbose":false}},"writeTo":{"connecting":false,"_hadError":false,"_parent":null,"_host":null,"_closeAfterHandlingError":false,"_events":{},"_readableState":{"highWaterMark":0,"buffer":[],"bufferIndex":0,"length":0,"pipes":[],"awaitDrainWriters":null},"_writableState":{"highWaterMark":16384,"length":0,"corked":0,"writelen":0,"bufferedIndex":0,"pendingcb":0},"allowHalfOpen":false,"_eventsCount":1,"_sockname":null,"_pendingData":null,"_pendingEncoding":"","server":null,"_server":null,"columns":272,"rows":56,"_type":"tty","fd":1,"_isStdio":true}}]},"written$":{"closed":false,"currentObservers":[],"observers":[],"isStopped":false,"hasError":false,"thrownError":null}},"browserType":"chrome"}) - (Took 11 ms)
       │ debg lensPage.getMetricElementIfExists('.echMetricText__subtitle', {"Keys":{"NULL":"","CANCEL":"","HELP":"","BACK_SPACE":"","TAB":"","CLEAR":"","RETURN":"","ENTER":"","SHIFT":"","CONTROL":"","ALT":"","PAUSE":"","ESCAPE":"","SPACE":"","PAGE_UP":"","PAGE_DOWN":"","END":"","HOME":"","ARROW_LEFT":"","LEFT":"","ARROW_UP":"","UP":"","ARROW_RIGHT":"","RIGHT":"","ARROW_DOWN":"","DOWN":"","INSERT":"","DELETE":"","SEMICOLON":"","EQUALS":"","NUMPAD0":"","NUMPAD1":"","NUMPAD2":"","NUMPAD3":"","NUMPAD4":"","NUMPAD5":"","NUMPAD6":"","NUMPAD7":"","NUMPAD8":"","NUMPAD9":"","MULTIPLY":"","ADD":"","SEPARATOR":"","SUBTRACT":"","DECIMAL":"","DIVIDE":"","F1":"","F2":"","F3":"","F4":"","F5":"","F6":"","F7":"","F8":"","F9":"","F10":"","F11":"","F12":"","COMMAND":"","META":"","ZENKAKU_HANKAKU":""},"isChromium":true,"_webElement":{"driver_":{"session_":{},"executor_":{"customCommands_":{},"log_":{"name_":"driver.http.Executor","level_":null,"parent_":{"name_":"driver.http","level_":null,"parent_":{"name_":"driver","level_":null,"parent_":{"name_":"","level_":{"name_":"OFF","value_":null},"parent_":null,"handlers_":null},"handlers_":null},"handlers_":null},"handlers_":null},"w3c":true},"fileDetector_":null,"authenticatorId_":null,"pinnedScripts_":{}},"id_":{},"log_":{"name_":"driver","level_":null,"parent_":{"name_":"","level_":{"name_":"OFF","value_":null},"parent_":null,"handlers_":null},"handlers_":null}},"locator":null,"driver":{"session_":{},"executor_":{"customCommands_":{},"log_":{"name_":"driver.http.Executor","level_":null,"parent_":{"name_":"driver.http","level_":null,"parent_":{"name_":"driver","level_":null,"parent_":{"name_":"","level_":{"name_":"OFF","value_":null},"parent_":null,"handlers_":null},"handlers_":null},"handlers_":null},"handlers_":null},"w3c":true},"fileDetector_":null,"authenticatorId_":null,"pinnedScripts_":{}},"timeout":10000,"fixedHeaderHeight":100,"logger":{"indentWidth$":{"closed":false,"currentObservers":[],"observers":[],"isStopped":false,"hasError":false,"thrownError":null,"_value":8},"writers$":{"closed":false,"currentObservers":[],"observers":[],"isStopped":false,"hasError":false,"thrownError":null,"_value":[{"level":{"name":"debug","flags":{"silent":true,"error":true,"warning":true,"success":true,"info":true,"debug":true,"verbose":false}},"writeTo":{"connecting":false,"_hadError":false,"_parent":null,"_host":null,"_closeAfterHandlingError":false,"_events":{},"_readableState":{"highWaterMark":0,"buffer":[],"bufferIndex":0,"length":0,"pipes":[],"awaitDrainWriters":null},"_writableState":{"highWaterMark":16384,"length":0,"corked":0,"writelen":0,"bufferedIndex":0,"pendingcb":0},"allowHalfOpen":false,"_eventsCount":1,"_sockname":null,"_pendingData":null,"_pendingEncoding":"","server":null,"_server":null,"columns":272,"rows":56,"_type":"tty","fd":1,"_isStdio":true}}]},"written$":{"closed":false,"currentObservers":[],"observers":[],"isStopped":false,"hasError":false,"thrownError":null}},"browserType":"chrome"})
       │ debg Find.descendantExistsByCssSelector('.echMetricText__subtitle') with timeout=2500
       │ debg lensPage.getMetricElementIfExists('.echMetricText__subtitle', {"Keys":{"NULL":"","CANCEL":"","HELP":"","BACK_SPACE":"","TAB":"","CLEAR":"","RETURN":"","ENTER":"","SHIFT":"","CONTROL":"","ALT":"","PAUSE":"","ESCAPE":"","SPACE":"","PAGE_UP":"","PAGE_DOWN":"","END":"","HOME":"","ARROW_LEFT":"","LEFT":"","ARROW_UP":"","UP":"","ARROW_RIGHT":"","RIGHT":"","ARROW_DOWN":"","DOWN":"","INSERT":"","DELETE":"","SEMICOLON":"","EQUALS":"","NUMPAD0":"","NUMPAD1":"","NUMPAD2":"","NUMPAD3":"","NUMPAD4":"","NUMPAD5":"","NUMPAD6":"","NUMPAD7":"","NUMPAD8":"","NUMPAD9":"","MULTIPLY":"","ADD":"","SEPARATOR":"","SUBTRACT":"","DECIMAL":"","DIVIDE":"","F1":"","F2":"","F3":"","F4":"","F5":"","F6":"","F7":"","F8":"","F9":"","F10":"","F11":"","F12":"","COMMAND":"","META":"","ZENKAKU_HANKAKU":""},"isChromium":true,"_webElement":{"driver_":{"session_":{},"executor_":{"customCommands_":{},"log_":{"name_":"driver.http.Executor","level_":null,"parent_":{"name_":"driver.http","level_":null,"parent_":{"name_":"driver","level_":null,"parent_":{"name_":"","level_":{"name_":"OFF","value_":null},"parent_":null,"handlers_":null},"handlers_":null},"handlers_":null},"handlers_":null},"w3c":true},"fileDetector_":null,"authenticatorId_":null,"pinnedScripts_":{}},"id_":{},"log_":{"name_":"driver","level_":null,"parent_":{"name_":"","level_":{"name_":"OFF","value_":null},"parent_":null,"handlers_":null},"handlers_":null}},"locator":null,"driver":{"session_":{},"executor_":{"customCommands_":{},"log_":{"name_":"driver.http.Executor","level_":null,"parent_":{"name_":"driver.http","level_":null,"parent_":{"name_":"driver","level_":null,"parent_":{"name_":"","level_":{"name_":"OFF","value_":null},"parent_":null,"handlers_":null},"handlers_":null},"handlers_":null},"handlers_":null},"w3c":true},"fileDetector_":null,"authenticatorId_":null,"pinnedScripts_":{}},"timeout":10000,"fixedHeaderHeight":100,"logger":{"indentWidth$":{"closed":false,"currentObservers":[],"observers":[],"isStopped":false,"hasError":false,"thrownError":null,"_value":8},"writers$":{"closed":false,"currentObservers":[],"observers":[],"isStopped":false,"hasError":false,"thrownError":null,"_value":[{"level":{"name":"debug","flags":{"silent":true,"error":true,"warning":true,"success":true,"info":true,"debug":true,"verbose":false}},"writeTo":{"connecting":false,"_hadError":false,"_parent":null,"_host":null,"_closeAfterHandlingError":false,"_events":{},"_readableState":{"highWaterMark":0,"buffer":[],"bufferIndex":0,"length":0,"pipes":[],"awaitDrainWriters":null},"_writableState":{"highWaterMark":16384,"length":0,"corked":0,"writelen":0,"bufferedIndex":0,"pendingcb":0},"allowHalfOpen":false,"_eventsCount":1,"_sockname":null,"_pendingData":null,"_pendingEncoding":"","server":null,"_server":null,"columns":272,"rows":56,"_type":"tty","fd":1,"_isStdio":true}}]},"written$":{"closed":false,"currentObservers":[],"observers":[],"isStopped":false,"hasError":false,"thrownError":null}},"browserType":"chrome"}) - (Took 2537 ms)
       │ debg lensPage.getMetricElementIfExists('.echMetricText__extra', {"Keys":{"NULL":"","CANCEL":"","HELP":"","BACK_SPACE":"","TAB":"","CLEAR":"","RETURN":"","ENTER":"","SHIFT":"","CONTROL":"","ALT":"","PAUSE":"","ESCAPE":"","SPACE":"","PAGE_UP":"","PAGE_DOWN":"","END":"","HOME":"","ARROW_LEFT":"","LEFT":"","ARROW_UP":"","UP":"","ARROW_RIGHT":"","RIGHT":"","ARROW_DOWN":"","DOWN":"","INSERT":"","DELETE":"","SEMICOLON":"","EQUALS":"","NUMPAD0":"","NUMPAD1":"","NUMPAD2":"","NUMPAD3":"","NUMPAD4":"","NUMPAD5":"","NUMPAD6":"","NUMPAD7":"","NUMPAD8":"","NUMPAD9":"","MULTIPLY":"","ADD":"","SEPARATOR":"","SUBTRACT":"","DECIMAL":"","DIVIDE":"","F1":"","F2":"","F3":"","F4":"","F5":"","F6":"","F7":"","F8":"","F9":"","F10":"","F11":"","F12":"","COMMAND":"","META":"","ZENKAKU_HANKAKU":""},"isChromium":true,"_webElement":{"driver_":{"session_":{},"executor_":{"customCommands_":{},"log_":{"name_":"driver.http.Executor","level_":null,"parent_":{"name_":"driver.http","level_":null,"parent_":{"name_":"driver","level_":null,"parent_":{"name_":"","level_":{"name_":"OFF","value_":null},"parent_":null,"handlers_":null},"handlers_":null},"handlers_":null},"handlers_":null},"w3c":true},"fileDetector_":null,"authenticatorId_":null,"pinnedScripts_":{}},"id_":{},"log_":{"name_":"driver","level_":null,"parent_":{"name_":"","level_":{"name_":"OFF","value_":null},"parent_":null,"handlers_":null},"handlers_":null}},"locator":null,"driver":{"session_":{},"executor_":{"customCommands_":{},"log_":{"name_":"driver.http.Executor","level_":null,"parent_":{"name_":"driver.http","level_":null,"parent_":{"name_":"driver","level_":null,"parent_":{"name_":"","level_":{"name_":"OFF","value_":null},"parent_":null,"handlers_":null},"handlers_":null},"handlers_":null},"handlers_":null},"w3c":true},"fileDetector_":null,"authenticatorId_":null,"pinnedScripts_":{}},"timeout":10000,"fixedHeaderHeight":100,"logger":{"indentWidth$":{"closed":false,"currentObservers":[],"observers":[],"isStopped":false,"hasError":false,"thrownError":null,"_value":8},"writers$":{"closed":false,"currentObservers":[],"observers":[],"isStopped":false,"hasError":false,"thrownError":null,"_value":[{"level":{"name":"debug","flags":{"silent":true,"error":true,"warning":true,"success":true,"info":true,"debug":true,"verbose":false}},"writeTo":{"connecting":false,"_hadError":false,"_parent":null,"_host":null,"_closeAfterHandlingError":false,"_events":{},"_readableState":{"highWaterMark":0,"buffer":[],"bufferIndex":0,"length":0,"pipes":[],"awaitDrainWriters":null},"_writableState":{"highWaterMark":16384,"length":0,"corked":0,"writelen":0,"bufferedIndex":0,"pendingcb":0},"allowHalfOpen":false,"_eventsCount":1,"_sockname":null,"_pendingData":null,"_pendingEncoding":"","server":null,"_server":null,"columns":272,"rows":56,"_type":"tty","fd":1,"_isStdio":true}}]},"written$":{"closed":false,"currentObservers":[],"observers":[],"isStopped":false,"hasError":false,"thrownError":null}},"browserType":"chrome"})
       │ debg Find.descendantExistsByCssSelector('.echMetricText__extra') with timeout=2500
       │ debg lensPage.getMetricElementIfExists('.echMetricText__extra', {"Keys":{"NULL":"","CANCEL":"","HELP":"","BACK_SPACE":"","TAB":"","CLEAR":"","RETURN":"","ENTER":"","SHIFT":"","CONTROL":"","ALT":"","PAUSE":"","ESCAPE":"","SPACE":"","PAGE_UP":"","PAGE_DOWN":"","END":"","HOME":"","ARROW_LEFT":"","LEFT":"","ARROW_UP":"","UP":"","ARROW_RIGHT":"","RIGHT":"","ARROW_DOWN":"","DOWN":"","INSERT":"","DELETE":"","SEMICOLON":"","EQUALS":"","NUMPAD0":"","NUMPAD1":"","NUMPAD2":"","NUMPAD3":"","NUMPAD4":"","NUMPAD5":"","NUMPAD6":"","NUMPAD7":"","NUMPAD8":"","NUMPAD9":"","MULTIPLY":"","ADD":"","SEPARATOR":"","SUBTRACT":"","DECIMAL":"","DIVIDE":"","F1":"","F2":"","F3":"","F4":"","F5":"","F6":"","F7":"","F8":"","F9":"","F10":"","F11":"","F12":"","COMMAND":"","META":"","ZENKAKU_HANKAKU":""},"isChromium":true,"_webElement":{"driver_":{"session_":{},"executor_":{"customCommands_":{},"log_":{"name_":"driver.http.Executor","level_":null,"parent_":{"name_":"driver.http","level_":null,"parent_":{"name_":"driver","level_":null,"parent_":{"name_":"","level_":{"name_":"OFF","value_":null},"parent_":null,"handlers_":null},"handlers_":null},"handlers_":null},"handlers_":null},"w3c":true},"fileDetector_":null,"authenticatorId_":null,"pinnedScripts_":{}},"id_":{},"log_":{"name_":"driver","level_":null,"parent_":{"name_":"","level_":{"name_":"OFF","value_":null},"parent_":null,"handlers_":null},"handlers_":null}},"locator":null,"driver":{"session_":{},"executor_":{"customCommands_":{},"log_":{"name_":"driver.http.Executor","level_":null,"parent_":{"name_":"driver.http","level_":null,"parent_":{"name_":"driver","level_":null,"parent_":{"name_":"","level_":{"name_":"OFF","value_":null},"parent_":null,"handlers_":null},"handlers_":null},"handlers_":null},"handlers_":null},"w3c":true},"fileDetector_":null,"authenticatorId_":null,"pinnedScripts_":{}},"timeout":10000,"fixedHeaderHeight":100,"logger":{"indentWidth$":{"closed":false,"currentObservers":[],"observers":[],"isStopped":false,"hasError":false,"thrownError":null,"_value":8},"writers$":{"closed":false,"currentObservers":[],"observers":[],"isStopped":false,"hasError":false,"thrownError":null,"_value":[{"level":{"name":"debug","flags":{"silent":true,"error":true,"warning":true,"success":true,"info":true,"debug":true,"verbose":false}},"writeTo":{"connecting":false,"_hadError":false,"_parent":null,"_host":null,"_closeAfterHandlingError":false,"_events":{},"_readableState":{"highWaterMark":0,"buffer":[],"bufferIndex":0,"length":0,"pipes":[],"awaitDrainWriters":null},"_writableState":{"highWaterMark":16384,"length":0,"corked":0,"writelen":0,"bufferedIndex":0,"pendingcb":0},"allowHalfOpen":false,"_eventsCount":1,"_sockname":null,"_pendingData":null,"_pendingEncoding":"","server":null,"_server":null,"columns":272,"rows":56,"_type":"tty","fd":1,"_isStdio":true}}]},"written$":{"closed":false,"currentObservers":[],"observers":[],"isStopped":false,"hasError":false,"thrownError":null}},"browserType":"chrome"}) - (Took 12 ms)
       │ debg lensPage.getMetricElementIfExists('.echMetricText__value', {"Keys":{"NULL":"","CANCEL":"","HELP":"","BACK_SPACE":"","TAB":"","CLEAR":"","RETURN":"","ENTER":"","SHIFT":"","CONTROL":"","ALT":"","PAUSE":"","ESCAPE":"","SPACE":"","PAGE_UP":"","PAGE_DOWN":"","END":"","HOME":"","ARROW_LEFT":"","LEFT":"","ARROW_UP":"","UP":"","ARROW_RIGHT":"","RIGHT":"","ARROW_DOWN":"","DOWN":"","INSERT":"","DELETE":"","SEMICOLON":"","EQUALS":"","NUMPAD0":"","NUMPAD1":"","NUMPAD2":"","NUMPAD3":"","NUMPAD4":"","NUMPAD5":"","NUMPAD6":"","NUMPAD7":"","NUMPAD8":"","NUMPAD9":"","MULTIPLY":"","ADD":"","SEPARATOR":"","SUBTRACT":"","DECIMAL":"","DIVIDE":"","F1":"","F2":"","F3":"","F4":"","F5":"","F6":"","F7":"","F8":"","F9":"","F10":"","F11":"","F12":"","COMMAND":"","META":"","ZENKAKU_HANKAKU":""},"isChromium":true,"_webElement":{"driver_":{"session_":{},"executor_":{"customCommands_":{},"log_":{"name_":"driver.http.Executor","level_":null,"parent_":{"name_":"driver.http","level_":null,"parent_":{"name_":"driver","level_":null,"parent_":{"name_":"","level_":{"name_":"OFF","value_":null},"parent_":null,"handlers_":null},"handlers_":null},"handlers_":null},"handlers_":null},"w3c":true},"fileDetector_":null,"authenticatorId_":null,"pinnedScripts_":{}},"id_":{},"log_":{"name_":"driver","level_":null,"parent_":{"name_":"","level_":{"name_":"OFF","value_":null},"parent_":null,"handlers_":null},"handlers_":null}},"locator":null,"driver":{"session_":{},"executor_":{"customCommands_":{},"log_":{"name_":"driver.http.Executor","level_":null,"parent_":{"name_":"driver.http","level_":null,"parent_":{"name_":"driver","level_":null,"parent_":{"name_":"","level_":{"name_":"OFF","value_":null},"parent_":null,"handlers_":null},"handlers_":null},"handlers_":null},"handlers_":null},"w3c":true},"fileDetector_":null,"authenticatorId_":null,"pinnedScripts_":{}},"timeout":10000,"fixedHeaderHeight":100,"logger":{"indentWidth$":{"closed":false,"currentObservers":[],"observers":[],"isStopped":false,"hasError":false,"thrownError":null,"_value":8},"writers$":{"closed":false,"currentObservers":[],"observers":[],"isStopped":false,"hasError":false,"thrownError":null,"_value":[{"level":{"name":"debug","flags":{"silent":true,"error":true,"warning":true,"success":true,"info":true,"debug":true,"verbose":false}},"writeTo":{"connecting":false,"_hadError":false,"_parent":null,"_host":null,"_closeAfterHandlingError":false,"_events":{},"_readableState":{"highWaterMark":0,"buffer":[],"bufferIndex":0,"length":0,"pipes":[],"awaitDrainWriters":null},"_writableState":{"highWaterMark":16384,"length":0,"corked":0,"writelen":0,"bufferedIndex":0,"pendingcb":0},"allowHalfOpen":false,"_eventsCount":1,"_sockname":null,"_pendingData":null,"_pendingEncoding":"","server":null,"_server":null,"columns":272,"rows":56,"_type":"tty","fd":1,"_isStdio":true}}]},"written$":{"closed":false,"currentObservers":[],"observers":[],"isStopped":false,"hasError":false,"thrownError":null}},"browserType":"chrome"})
       │ debg Find.descendantExistsByCssSelector('.echMetricText__value') with timeout=2500
       │ debg lensPage.getMetricElementIfExists('.echMetricText__value', {"Keys":{"NULL":"","CANCEL":"","HELP":"","BACK_SPACE":"","TAB":"","CLEAR":"","RETURN":"","ENTER":"","SHIFT":"","CONTROL":"","ALT":"","PAUSE":"","ESCAPE":"","SPACE":"","PAGE_UP":"","PAGE_DOWN":"","END":"","HOME":"","ARROW_LEFT":"","LEFT":"","ARROW_UP":"","UP":"","ARROW_RIGHT":"","RIGHT":"","ARROW_DOWN":"","DOWN":"","INSERT":"","DELETE":"","SEMICOLON":"","EQUALS":"","NUMPAD0":"","NUMPAD1":"","NUMPAD2":"","NUMPAD3":"","NUMPAD4":"","NUMPAD5":"","NUMPAD6":"","NUMPAD7":"","NUMPAD8":"","NUMPAD9":"","MULTIPLY":"","ADD":"","SEPARATOR":"","SUBTRACT":"","DECIMAL":"","DIVIDE":"","F1":"","F2":"","F3":"","F4":"","F5":"","F6":"","F7":"","F8":"","F9":"","F10":"","F11":"","F12":"","COMMAND":"","META":"","ZENKAKU_HANKAKU":""},"isChromium":true,"_webElement":{"driver_":{"session_":{},"executor_":{"customCommands_":{},"log_":{"name_":"driver.http.Executor","level_":null,"parent_":{"name_":"driver.http","level_":null,"parent_":{"name_":"driver","level_":null,"parent_":{"name_":"","level_":{"name_":"OFF","value_":null},"parent_":null,"handlers_":null},"handlers_":null},"handlers_":null},"handlers_":null},"w3c":true},"fileDetector_":null,"authenticatorId_":null,"pinnedScripts_":{}},"id_":{},"log_":{"name_":"driver","level_":null,"parent_":{"name_":"","level_":{"name_":"OFF","value_":null},"parent_":null,"handlers_":null},"handlers_":null}},"locator":null,"driver":{"session_":{},"executor_":{"customCommands_":{},"log_":{"name_":"driver.http.Executor","level_":null,"parent_":{"name_":"driver.http","level_":null,"parent_":{"name_":"driver","level_":null,"parent_":{"name_":"","level_":{"name_":"OFF","value_":null},"parent_":null,"handlers_":null},"handlers_":null},"handlers_":null},"handlers_":null},"w3c":true},"fileDetector_":null,"authenticatorId_":null,"pinnedScripts_":{}},"timeout":10000,"fixedHeaderHeight":100,"logger":{"indentWidth$":{"closed":false,"currentObservers":[],"observers":[],"isStopped":false,"hasError":false,"thrownError":null,"_value":8},"writers$":{"closed":false,"currentObservers":[],"observers":[],"isStopped":false,"hasError":false,"thrownError":null,"_value":[{"level":{"name":"debug","flags":{"silent":true,"error":true,"warning":true,"success":true,"info":true,"debug":true,"verbose":false}},"writeTo":{"connecting":false,"_hadError":false,"_parent":null,"_host":null,"_closeAfterHandlingError":false,"_events":{},"_readableState":{"highWaterMark":0,"buffer":[],"bufferIndex":0,"length":0,"pipes":[],"awaitDrainWriters":null},"_writableState":{"highWaterMark":16384,"length":0,"corked":0,"writelen":0,"bufferedIndex":0,"pendingcb":0},"allowHalfOpen":false,"_eventsCount":1,"_sockname":null,"_pendingData":null,"_pendingEncoding":"","server":null,"_server":null,"columns":272,"rows":56,"_type":"tty","fd":1,"_isStdio":true}}]},"written$":{"closed":false,"currentObservers":[],"observers":[],"isStopped":false,"hasError":false,"thrownError":null}},"browserType":"chrome"}) - (Took 11 ms)
       │ debg lensPage.getMetricElementIfExists('.echMetric', {"Keys":{"NULL":"","CANCEL":"","HELP":"","BACK_SPACE":"","TAB":"","CLEAR":"","RETURN":"","ENTER":"","SHIFT":"","CONTROL":"","ALT":"","PAUSE":"","ESCAPE":"","SPACE":"","PAGE_UP":"","PAGE_DOWN":"","END":"","HOME":"","ARROW_LEFT":"","LEFT":"","ARROW_UP":"","UP":"","ARROW_RIGHT":"","RIGHT":"","ARROW_DOWN":"","DOWN":"","INSERT":"","DELETE":"","SEMICOLON":"","EQUALS":"","NUMPAD0":"","NUMPAD1":"","NUMPAD2":"","NUMPAD3":"","NUMPAD4":"","NUMPAD5":"","NUMPAD6":"","NUMPAD7":"","NUMPAD8":"","NUMPAD9":"","MULTIPLY":"","ADD":"","SEPARATOR":"","SUBTRACT":"","DECIMAL":"","DIVIDE":"","F1":"","F2":"","F3":"","F4":"","F5":"","F6":"","F7":"","F8":"","F9":"","F10":"","F11":"","F12":"","COMMAND":"","META":"","ZENKAKU_HANKAKU":""},"isChromium":true,"_webElement":{"driver_":{"session_":{},"executor_":{"customCommands_":{},"log_":{"name_":"driver.http.Executor","level_":null,"parent_":{"name_":"driver.http","level_":null,"parent_":{"name_":"driver","level_":null,"parent_":{"name_":"","level_":{"name_":"OFF","value_":null},"parent_":null,"handlers_":null},"handlers_":null},"handlers_":null},"handlers_":null},"w3c":true},"fileDetector_":null,"authenticatorId_":null,"pinnedScripts_":{}},"id_":{},"log_":{"name_":"driver","level_":null,"parent_":{"name_":"","level_":{"name_":"OFF","value_":null},"parent_":null,"handlers_":null},"handlers_":null}},"locator":null,"driver":{"session_":{},"executor_":{"customCommands_":{},"log_":{"name_":"driver.http.Executor","level_":null,"parent_":{"name_":"driver.http","level_":null,"parent_":{"name_":"driver","level_":null,"parent_":{"name_":"","level_":{"name_":"OFF","value_":null},"parent_":null,"handlers_":null},"handlers_":null},"handlers_":null},"handlers_":null},"w3c":true},"fileDetector_":null,"authenticatorId_":null,"pinnedScripts_":{}},"timeout":10000,"fixedHeaderHeight":100,"logger":{"indentWidth$":{"closed":false,"currentObservers":[],"observers":[],"isStopped":false,"hasError":false,"thrownError":null,"_value":8},"writers$":{"closed":false,"currentObservers":[],"observers":[],"isStopped":false,"hasError":false,"thrownError":null,"_value":[{"level":{"name":"debug","flags":{"silent":true,"error":true,"warning":true,"success":true,"info":true,"debug":true,"verbose":false}},"writeTo":{"connecting":false,"_hadError":false,"_parent":null,"_host":null,"_closeAfterHandlingError":false,"_events":{},"_readableState":{"highWaterMark":0,"buffer":[],"bufferIndex":0,"length":0,"pipes":[],"awaitDrainWriters":null},"_writableState":{"highWaterMark":16384,"length":0,"corked":0,"writelen":0,"bufferedIndex":0,"pendingcb":0},"allowHalfOpen":false,"_eventsCount":1,"_sockname":null,"_pendingData":null,"_pendingEncoding":"","server":null,"_server":null,"columns":272,"rows":56,"_type":"tty","fd":1,"_isStdio":true}}]},"written$":{"closed":false,"currentObservers":[],"observers":[],"isStopped":false,"hasError":false,"thrownError":null}},"browserType":"chrome"})
       │ debg Find.descendantExistsByCssSelector('.echMetric') with timeout=2500
       │ debg lensPage.getMetricElementIfExists('.echMetric', {"Keys":{"NULL":"","CANCEL":"","HELP":"","BACK_SPACE":"","TAB":"","CLEAR":"","RETURN":"","ENTER":"","SHIFT":"","CONTROL":"","ALT":"","PAUSE":"","ESCAPE":"","SPACE":"","PAGE_UP":"","PAGE_DOWN":"","END":"","HOME":"","ARROW_LEFT":"","LEFT":"","ARROW_UP":"","UP":"","ARROW_RIGHT":"","RIGHT":"","ARROW_DOWN":"","DOWN":"","INSERT":"","DELETE":"","SEMICOLON":"","EQUALS":"","NUMPAD0":"","NUMPAD1":"","NUMPAD2":"","NUMPAD3":"","NUMPAD4":"","NUMPAD5":"","NUMPAD6":"","NUMPAD7":"","NUMPAD8":"","NUMPAD9":"","MULTIPLY":"","ADD":"","SEPARATOR":"","SUBTRACT":"","DECIMAL":"","DIVIDE":"","F1":"","F2":"","F3":"","F4":"","F5":"","F6":"","F7":"","F8":"","F9":"","F10":"","F11":"","F12":"","COMMAND":"","META":"","ZENKAKU_HANKAKU":""},"isChromium":true,"_webElement":{"driver_":{"session_":{},"executor_":{"customCommands_":{},"log_":{"name_":"driver.http.Executor","level_":null,"parent_":{"name_":"driver.http","level_":null,"parent_":{"name_":"driver","level_":null,"parent_":{"name_":"","level_":{"name_":"OFF","value_":null},"parent_":null,"handlers_":null},"handlers_":null},"handlers_":null},"handlers_":null},"w3c":true},"fileDetector_":null,"authenticatorId_":null,"pinnedScripts_":{}},"id_":{},"log_":{"name_":"driver","level_":null,"parent_":{"name_":"","level_":{"name_":"OFF","value_":null},"parent_":null,"handlers_":null},"handlers_":null}},"locator":null,"driver":{"session_":{},"executor_":{"customCommands_":{},"log_":{"name_":"driver.http.Executor","level_":null,"parent_":{"name_":"driver.http","level_":null,"parent_":{"name_":"driver","level_":null,"parent_":{"name_":"","level_":{"name_":"OFF","value_":null},"parent_":null,"handlers_":null},"handlers_":null},"handlers_":null},"handlers_":null},"w3c":true},"fileDetector_":null,"authenticatorId_":null,"pinnedScripts_":{}},"timeout":10000,"fixedHeaderHeight":100,"logger":{"indentWidth$":{"closed":false,"currentObservers":[],"observers":[],"isStopped":false,"hasError":false,"thrownError":null,"_value":8},"writers$":{"closed":false,"currentObservers":[],"observers":[],"isStopped":false,"hasError":false,"thrownError":null,"_value":[{"level":{"name":"debug","flags":{"silent":true,"error":true,"warning":true,"success":true,"info":true,"debug":true,"verbose":false}},"writeTo":{"connecting":false,"_hadError":false,"_parent":null,"_host":null,"_closeAfterHandlingError":false,"_events":{},"_readableState":{"highWaterMark":0,"buffer":[],"bufferIndex":0,"length":0,"pipes":[],"awaitDrainWriters":null},"_writableState":{"highWaterMark":16384,"length":0,"corked":0,"writelen":0,"bufferedIndex":0,"pendingcb":0},"allowHalfOpen":false,"_eventsCount":1,"_sockname":null,"_pendingData":null,"_pendingEncoding":"","server":null,"_server":null,"columns":272,"rows":56,"_type":"tty","fd":1,"_isStdio":true}}]},"written$":{"closed":false,"currentObservers":[],"observers":[],"isStopped":false,"hasError":false,"thrownError":null}},"browserType":"chrome"}) - (Took 11 ms)
       │ debg lensPage.getMetricElementIfExists('.echSingleMetricSparkline__svg > rect', {"Keys":{"NULL":"","CANCEL":"","HELP":"","BACK_SPACE":"","TAB":"","CLEAR":"","RETURN":"","ENTER":"","SHIFT":"","CONTROL":"","ALT":"","PAUSE":"","ESCAPE":"","SPACE":"","PAGE_UP":"","PAGE_DOWN":"","END":"","HOME":"","ARROW_LEFT":"","LEFT":"","ARROW_UP":"","UP":"","ARROW_RIGHT":"","RIGHT":"","ARROW_DOWN":"","DOWN":"","INSERT":"","DELETE":"","SEMICOLON":"","EQUALS":"","NUMPAD0":"","NUMPAD1":"","NUMPAD2":"","NUMPAD3":"","NUMPAD4":"","NUMPAD5":"","NUMPAD6":"","NUMPAD7":"","NUMPAD8":"","NUMPAD9":"","MULTIPLY":"","ADD":"","SEPARATOR":"","SUBTRACT":"","DECIMAL":"","DIVIDE":"","F1":"","F2":"","F3":"","F4":"","F5":"","F6":"","F7":"","F8":"","F9":"","F10":"","F11":"","F12":"","COMMAND":"","META":"","ZENKAKU_HANKAKU":""},"isChromium":true,"_webElement":{"driver_":{"session_":{},"executor_":{"customCommands_":{},"log_":{"name_":"driver.http.Executor","level_":null,"parent_":{"name_":"driver.http","level_":null,"parent_":{"name_":"driver","level_":null,"parent_":{"name_":"","level_":{"name_":"OFF","value_":null},"parent_":null,"handlers_":null},"handlers_":null},"handlers_":null},"handlers_":null},"w3c":true},"fileDetector_":null,"authenticatorId_":null,"pinnedScripts_":{}},"id_":{},"log_":{"name_":"driver","level_":null,"parent_":{"name_":"","level_":{"name_":"OFF","value_":null},"parent_":null,"handlers_":null},"handlers_":null}},"locator":null,"driver":{"session_":{},"executor_":{"customCommands_":{},"log_":{"name_":"driver.http.Executor","level_":null,"parent_":{"name_":"driver.http","level_":null,"parent_":{"name_":"driver","level_":null,"parent_":{"name_":"","level_":{"name_":"OFF","value_":null},"parent_":null,"handlers_":null},"handlers_":null},"handlers_":null},"handlers_":null},"w3c":true},"fileDetector_":null,"authenticatorId_":null,"pinnedScripts_":{}},"timeout":10000,"fixedHeaderHeight":100,"logger":{"indentWidth$":{"closed":false,"currentObservers":[],"observers":[],"isStopped":false,"hasError":false,"thrownError":null,"_value":8},"writers$":{"closed":false,"currentObservers":[],"observers":[],"isStopped":false,"hasError":false,"thrownError":null,"_value":[{"level":{"name":"debug","flags":{"silent":true,"error":true,"warning":true,"success":true,"info":true,"debug":true,"verbose":false}},"writeTo":{"connecting":false,"_hadError":false,"_parent":null,"_host":null,"_closeAfterHandlingError":false,"_events":{},"_readableState":{"highWaterMark":0,"buffer":[],"bufferIndex":0,"length":0,"pipes":[],"awaitDrainWriters":null},"_writableState":{"highWaterMark":16384,"length":0,"corked":0,"writelen":0,"bufferedIndex":0,"pendingcb":0},"allowHalfOpen":false,"_eventsCount":1,"_sockname":null,"_pendingData":null,"_pendingEncoding":"","server":null,"_server":null,"columns":272,"rows":56,"_type":"tty","fd":1,"_isStdio":true}}]},"written$":{"closed":false,"currentObservers":[],"observers":[],"isStopped":false,"hasError":false,"thrownError":null}},"browserType":"chrome"}, 500)
       │ debg Find.descendantExistsByCssSelector('.echSingleMetricSparkline__svg > rect') with timeout=500
       │ debg lensPage.getMetricElementIfExists('.echSingleMetricSparkline__svg > rect', {"Keys":{"NULL":"","CANCEL":"","HELP":"","BACK_SPACE":"","TAB":"","CLEAR":"","RETURN":"","ENTER":"","SHIFT":"","CONTROL":"","ALT":"","PAUSE":"","ESCAPE":"","SPACE":"","PAGE_UP":"","PAGE_DOWN":"","END":"","HOME":"","ARROW_LEFT":"","LEFT":"","ARROW_UP":"","UP":"","ARROW_RIGHT":"","RIGHT":"","ARROW_DOWN":"","DOWN":"","INSERT":"","DELETE":"","SEMICOLON":"","EQUALS":"","NUMPAD0":"","NUMPAD1":"","NUMPAD2":"","NUMPAD3":"","NUMPAD4":"","NUMPAD5":"","NUMPAD6":"","NUMPAD7":"","NUMPAD8":"","NUMPAD9":"","MULTIPLY":"","ADD":"","SEPARATOR":"","SUBTRACT":"","DECIMAL":"","DIVIDE":"","F1":"","F2":"","F3":"","F4":"","F5":"","F6":"","F7":"","F8":"","F9":"","F10":"","F11":"","F12":"","COMMAND":"","META":"","ZENKAKU_HANKAKU":""},"isChromium":true,"_webElement":{"driver_":{"session_":{},"executor_":{"customCommands_":{},"log_":{"name_":"driver.http.Executor","level_":null,"parent_":{"name_":"driver.http","level_":null,"parent_":{"name_":"driver","level_":null,"parent_":{"name_":"","level_":{"name_":"OFF","value_":null},"parent_":null,"handlers_":null},"handlers_":null},"handlers_":null},"handlers_":null},"w3c":true},"fileDetector_":null,"authenticatorId_":null,"pinnedScripts_":{}},"id_":{},"log_":{"name_":"driver","level_":null,"parent_":{"name_":"","level_":{"name_":"OFF","value_":null},"parent_":null,"handlers_":null},"handlers_":null}},"locator":null,"driver":{"session_":{},"executor_":{"customCommands_":{},"log_":{"name_":"driver.http.Executor","level_":null,"parent_":{"name_":"driver.http","level_":null,"parent_":{"name_":"driver","level_":null,"parent_":{"name_":"","level_":{"name_":"OFF","value_":null},"parent_":null,"handlers_":null},"handlers_":null},"handlers_":null},"handlers_":null},"w3c":true},"fileDetector_":null,"authenticatorId_":null,"pinnedScripts_":{}},"timeout":10000,"fixedHeaderHeight":100,"logger":{"indentWidth$":{"closed":false,"currentObservers":[],"observers":[],"isStopped":false,"hasError":false,"thrownError":null,"_value":8},"writers$":{"closed":false,"currentObservers":[],"observers":[],"isStopped":false,"hasError":false,"thrownError":null,"_value":[{"level":{"name":"debug","flags":{"silent":true,"error":true,"warning":true,"success":true,"info":true,"debug":true,"verbose":false}},"writeTo":{"connecting":false,"_hadError":false,"_parent":null,"_host":null,"_closeAfterHandlingError":false,"_events":{},"_readableState":{"highWaterMark":0,"buffer":[],"bufferIndex":0,"length":0,"pipes":[],"awaitDrainWriters":null},"_writableState":{"highWaterMark":16384,"length":0,"corked":0,"writelen":0,"bufferedIndex":0,"pendingcb":0},"allowHalfOpen":false,"_eventsCount":1,"_sockname":null,"_pendingData":null,"_pendingEncoding":"","server":null,"_server":null,"columns":272,"rows":56,"_type":"tty","fd":1,"_isStdio":true}}]},"written$":{"closed":false,"currentObservers":[],"observers":[],"isStopped":false,"hasError":false,"thrownError":null}},"browserType":"chrome"}, 500) - (Took 511 ms)
...
```

After:
```
      ...
       | debg Find.descendantExistsByCssSelector('h2') with timeout=2500
       │ debg lensPage.getMetricElementIfExists('h2', '[WebElement]') - (Took 12 ms)
       │ debg lensPage.getMetricElementIfExists('.echMetricText__subtitle', '[WebElement]')
       │ debg Find.descendantExistsByCssSelector('.echMetricText__subtitle') with timeout=2500
       │ debg lensPage.getMetricElementIfExists('.echMetricText__subtitle', '[WebElement]') - (Took 2516 ms)
       │ debg lensPage.getMetricElementIfExists('.echMetricText__extra', '[WebElement]')
       │ debg Find.descendantExistsByCssSelector('.echMetricText__extra') with timeout=2500
       │ debg lensPage.getMetricElementIfExists('.echMetricText__extra', '[WebElement]') - (Took 12 ms)
       │ debg lensPage.getMetricElementIfExists('.echMetricText__value', '[WebElement]')
       │ debg Find.descendantExistsByCssSelector('.echMetricText__value') with timeout=2500
       │ debg lensPage.getMetricElementIfExists('.echMetricText__value', '[WebElement]') - (Took 12 ms)
       │ debg lensPage.getMetricElementIfExists('.echMetric', '[WebElement]')
       │ debg Find.descendantExistsByCssSelector('.echMetric') with timeout=2500
       │ debg lensPage.getMetricElementIfExists('.echMetric', '[WebElement]') - (Took 12 ms)
       │ debg lensPage.getMetricElementIfExists('.echSingleMetricSparkline__svg > rect', '[WebElement]', 500)
       │ debg Find.descendantExistsByCssSelector('.echSingleMetricSparkline__svg > rect') with timeout=500
       │ debg lensPage.getMetricElementIfExists('.echSingleMetricSparkline__svg > rect', '[WebElement]', 500) - (Took 521 ms)
       │ debg lensPage.getMetricElementIfExists('.echSingleMetricSparkline', '[WebElement]', 500)
       │ debg Find.descendantExistsByCssSelector('.echSingleMetricSparkline') with timeout=500
       │ debg lensPage.getMetricElementIfExists('.echSingleMetricSparkline', '[WebElement]', 500) - (Took 512 ms)
       ...
```
</details>
2025-04-04 10:58:20 +02:00
Alex Szabo
9f8503e0b3
[CI] Allow using elastic-images-qa through PR label or env var (#216878)
## Summary
Currently, if you'd like to test something on Kibana's VM image, you'd
have to build a VM image to -qa, then rewrite all references to
`elastic-images-qa` for the PR jobs; once done with testing, we'd undo
the changes to `elastic-images-prod`.

This is a helpful tool for us to test with WIP VM images, we'd be able
to add a label to the PR, and it would automatically grab the QA images,
without any temporary commits.

Jobs in https://buildkite.com/elastic/kibana-pull-request/builds/289599
have ran with an elastic-qa image. 
2025-04-04 10:05:30 +02:00
Joe Reuter
2ac707ba12
🌊 Streams: Hide double entry in global search (#217021)
Before:
<img width="257" alt="Screenshot 2025-04-03 at 15 17 00"
src="https://github.com/user-attachments/assets/130bc4d2-e073-4e35-92bd-252e9ab21eba"
/>



After:
<img width="303" alt="Screenshot 2025-04-03 at 15 16 37"
src="https://github.com/user-attachments/assets/b540f2a0-b7ed-46ab-951d-9148dcb1b019"
/>
2025-04-04 09:46:51 +02:00
Kibana Machine
6927948948
[api-docs] 2025-04-04 Daily api_docs build (#217129)
Generated by
https://buildkite.com/elastic/kibana-api-docs-daily/builds/1032
2025-04-04 07:14:59 +01:00
Stratoula Kalafateli
94f0e694e4
[ES|QL] Refactor and improve the variables configuration (#216469)
## Summary

Part of https://github.com/elastic/kibana/issues/213877

This PR doent introduce a new feature. It is mostly a refactoring to
allow us to give a better UX when a user during creation changes the
variable name from ??value to ?value and vice versa. The biggest change
is that we move 2 components from the individual form (value,
identifier) to index as now they can be shared and they own the same
functionality regardless the control type.

It is required to move to the next step, the creation of controls by
just typing a questionmark

### Checklist

- [ ] [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
2025-04-04 07:50:34 +02:00
Ersin Erdal
5bab6cf836
Create tracked alerts based on AAD (#213670)
Towards making AAD source of truth.

This PR creates a `trackedAlerts` object in the alertsClient and removes
the dependency on task state to fetch tracked alerts.

As fetching tracked alerts becomes a critical part, we throw an error
when it fails.

---------

Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>
2025-04-04 03:13:53 +02:00
Philippe Oberti
59c8d19d95
[AI4DSOR] Alert summary integrations section (#215266)
## Summary

This PR adds the integration section at the top of the alert summary
page. This section shows the installed AI for SOC integrations and an
`Add integration` button. Clicking on the button navigates to the
fleet's page.
In each integration card, we show the integration name, its logo as well
as the last activity time. This last activity value is retrieve as
follow:
- fetch all dataStreams (see [this api
documentation](https://www.elastic.co/docs/api/doc/kibana/operation/operation-get-fleet-data-streams))
- find all the dataStreams that are related to the installed
integrations (via the `package` property)
- from all the matching dataStreams, take the most recently updated (via
the `last_activity_ms` value

![Screenshot 2025-03-20 at 3 53
35 PM](https://github.com/user-attachments/assets/32d6ac14-e0fc-4428-8dac-8df76e6b06be)


https://github.com/user-attachments/assets/7c67e629-e4d3-4ba2-b756-b9ba81e7a667

## How to test

This needs to be ran in Serverless:
- `yarn es serverless --projectType security`
- `yarn serverless-security --no-base-path`

You also need to enable the AI for SOC tier, by adding the following to
your `serverless.security.dev.yaml` file:
```
xpack.securitySolutionServerless.productTypes:
  [
    { product_line: 'ai_soc', product_tier: 'search_ai_lake' },
  ]
```

Use one of these Serverless users:
- `platform_engineer`
- `endpoint_operations_analyst`
- `endpoint_policy_manager`
- `admin`
- `system_indices_superuser`

### Notes

You'll need to either have some AI for SOC integrations installed, or
more easily you can:
- change the `alert_summary.tsx` line `38` from `if
(installedPackages.length === 0) {` to `if (installedPackages.length >
0) {` to force the wrapper component to render
- update `42` of the same `alert_summary.tsx` file from `return <Wrapper
packages={installedPackages} />;` to `return <Wrapper
packages={availablePackages} />;` to be able to see some packages

Also you'll dataStreams if you want to be able to test the last activity
value. Easiest would probably be to mock the call return value following
[the
documentation](https://www.elastic.co/docs/api/doc/kibana/operation/operation-get-fleet-data-streams).

### 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/src/platform/packages/shared/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

https://github.com/elastic/security-team/issues/11955
2025-04-04 00:52:57 +01:00
Kevin Delemme
3a63089dc7
chore(slo): delete by queries (#217108)
## Summary

Add safer parameters when deleting by queries, and make all delete by
queries async (wait = false).
In some cases, I've parallelized the calls
2025-04-03 18:36:35 -04:00