Commit graph

11 commits

Author SHA1 Message Date
Dima Arnautov
4c3afc5f42
[ML] Update code editors for Transform, Data Frame and Anomaly Detection wizards (#184518)
## Summary

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

Improves code editors in Anomaly detection, Data frame analytics and
Transform wizards with autocomplete, data types validation and inline
documentation from elasticsearch specification.

![Jun-19-2024
15-33-00](c230deae-962e-4295-8146-0bf3579a66bd)


Adds a package with JSON schemas extracted from the [openapi output of
elasticsearch-specification](https://github.com/elastic/elasticsearch-specification/tree/main/output/openapi).

Schema file is generated per editor/endpoint, keeping only relevant
components.

To test the script locally, execute 
```
yarn run jsonSchema
```
from `/x-pack/packages/ml/json_schemas`.

By default it assumes that your `elasticsearch-specification` folder is
located next to the `kibana` repo, but you can also provide a path to
`openapi` file as a parameter, e.g. `yarn run jsonSchema
/Users/my_user/dev/elasticsearch-specification/output/openapi/elasticsearch-serverless-openapi.json`

#### How JSON files are served 

JSON files are asynchronously imported at the React component level and
passed to the `CodeEditor` instances on mount.

Initially I tried different approaches to take advantage of CDN, but
unfortunately it didn't work out:

#####  Using static assets
 
I made an attempt to retrieve a URL to the JSON schema file as a static
asset using Kibana service
```typescript
const schemaJsonAsset = http?.staticAssets.getPluginAssetHref('my_schema.json') ?? '';
```
and passing it as part of the schema definition, but the browser was
blocking a request 🤔


![image](accf47b1-2a89-4408-9c5a-36bb269e8889)

![image](aa64ae66-8749-4d4d-b645-6cd11b221c68)

##### Using raw loader

Approach with a raw loader also didn't succeed.

```typescript
import mySchema from '!!raw-loader!./my_schema.json';
```

<details>
  <summary>See error </summary>
 
  ```
ERROR in
./public/app/sections/create_transform/components/advanced_pivot_editor/my_schema.json
(/Users/dimaarnautov/Repos/kibana/node_modules/raw-loader/dist/cjs.js!./public/app/sections/create_transform/components/advanced_pivot_editor/my_schema.json)
│ Module parse failed: Unexpected token 'e', "export def"... is not
valid JSON while parsing 'export default "{\n \"type\": \"object\'
       │          File was processed with these loaders:
       │           * ../../../node_modules/raw-loader/dist/cjs.js
│ You may need an additional loader to handle the result of these
loaders.
│ SyntaxError: Unexpected token 'e', "export def"... is not valid JSON
while parsing 'export default "{\n \"type\": \"object\'
       │              at JSON.parse (<anonymous>)
│ at parseJson
(/Users/dimaarnautov/Repos/kibana/node_modules/json-parse-better-errors/index.js:7:17)
│ at JsonParser.parse
(/Users/dimaarnautov/Repos/kibana/node_modules/webpack/lib/JsonParser.js:16:16)
│ at
/Users/dimaarnautov/Repos/kibana/node_modules/webpack/lib/NormalModule.js:482:32
│ at
/Users/dimaarnautov/Repos/kibana/node_modules/webpack/lib/NormalModule.js:358:12
│ at
/Users/dimaarnautov/Repos/kibana/node_modules/loader-runner/lib/LoaderRunner.js:373:3
│ at iterateNormalLoaders
(/Users/dimaarnautov/Repos/kibana/node_modules/loader-runner/lib/LoaderRunner.js:214:10)
│ at iterateNormalLoaders
(/Users/dimaarnautov/Repos/kibana/node_modules/loader-runner/lib/LoaderRunner.js:221:10)
│ at
/Users/dimaarnautov/Repos/kibana/node_modules/loader-runner/lib/LoaderRunner.js:236:3
│ at runSyncOrAsync
(/Users/dimaarnautov/Repos/kibana/node_modules/loader-runner/lib/LoaderRunner.js:130:11)
│ at iterateNormalLoaders
(/Users/dimaarnautov/Repos/kibana/node_modules/loader-runner/lib/LoaderRunner.js:232:2)
│ at
/Users/dimaarnautov/Repos/kibana/node_modules/loader-runner/lib/LoaderRunner.js:205:4
│ at
/Users/dimaarnautov/Repos/kibana/node_modules/webpack/node_modules/enhanced-resolve/lib/CachedInputFileSystem.js:85:15
│ at processTicksAndRejections (node:internal/process/task_queues:77:11)
  ```
</details>



### 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
2024-06-21 16:43:20 +02:00
Dima Arnautov
074220db87
[ML] Progress bar for trained models download (#184906)
## Summary

Closes #182004

Adds a progress bar for trained model downloads. 

<img width="1592" alt="image"
src="c69f2ad8-c211-4349-be98-d8844218aa5c">



### 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] Any UI touched in this PR is usable by keyboard only (learn more
about [keyboard accessibility](https://webaim.org/techniques/keyboard/))
- [x] Any UI touched in this PR does not create any new axe failures
(run axe in browser:
[FF](https://addons.mozilla.org/en-US/firefox/addon/axe-devtools/),
[Chrome](https://chrome.google.com/webstore/detail/axe-web-accessibility-tes/lhdoppojpmngadmnindnejefpokejbdd?hl=en-US))
- [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)
2024-06-13 03:42:31 -07:00
James Gowdy
3670b4fa5f
[ML] Enable consistent-type-imports eslint rule (#176921)
Enabling `consistent-type-imports` rule and running `node scripts/eslint
--no-cache --fix` to fix every type import.

Affects x-pack plugins: `ml`, `transform`, `aiops`, `data_visualizer`
and `x-pack/packages/ml`

---------

Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>
2024-03-07 03:29:20 -07:00
James Gowdy
ac0d04d355
[ML] Assigning elser models to the * space (#169939)
Fixes https://github.com/elastic/kibana/issues/169771

Adds a new endpoint
`/internal/ml/trained_models/install_elastic_trained_model/:modelId`
which wraps the `putTrainedModel` call to start the download of the
elser model. It then reassigns the saved object's space to be `*`.

Also updates the saved object sync call to ensure any internal models
(ones which start with `.`) are assigned to the `*` space, if they've
needed syncing.

It is still possible for a user to reassign the spaces for an elser
model and get themselves into the situation covered described in
https://github.com/elastic/kibana/issues/169771.
In this situation, I believe the best we can do is suggest the user
adjusts the spaces via the stack management page.

At the moment a `Model already exists` error is displayed in a toast. In
a follow up PR we could catch this and show more information to direct
the user to the stack management page.

---------

Co-authored-by: Dima Arnautov <arnautov.dima@gmail.com>
2023-11-06 13:34:15 +00:00
Dima Arnautov
2bce7bbcbe
[ML] Shared service for elastic curated models (#167000)
## Summary

Adds a shared service for elastic curated models. The first use case is
to provide a default/recommended ELSER version based on the hardware of
the current cluster.

#### Why?
In 8.11 we'll provide a platform-specific version of the ELSER v2
alongside the portable one. At the moment several solutions refer to
ELSER for download/inference purposes with a `.elser_model_1` constant.
Starting 8.11 the model ID will vary, so using the `ElastcModels`
service allows retrieving the recommended version of ELSER for the
current cluster without any changes by solution teams in future
releases. It is still possible to request an older version of the model
if necessary.

#### Implementation 
- Adds a new Kibana API endpoint `/trained_models/model_downloads` that
provides a list of model definitions, with the `default` and
`recommended` flags.
- Adds a new Kibana API endpoint `/trained_models/elser_config` that
provides an ELSER configuration based on the cluster architecture.
- `getELSER` method is exposed from the plugin `setup` server-side as
part of our shared services and plugin `start` client-side.

### Checklist

- [ ]
[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
2023-09-25 09:15:35 -07:00
Melissa Alvarez
e5cd6fb493
[ML] Data Frame Analytics Trained models: add ability to reindex after pipeline creation success (#166312)
## Summary

Related issue: https://github.com/elastic/kibana/issues/164997

In the Trained Models list 'Deploy Model' flyout for DFA models:
- adds the ability to reindex in the last step of the flyout after
pipeline creation success

<img width="1343" alt="image"
src="ae76fb04-889c-45da-a9c0-394b5cd039c2">

<img width="1206" alt="image"
src="39bee9b1-338b-4b5b-a295-789363f6d387">

<img width="1107" alt="image"
src="aa98ff65-1b37-46a4-b411-4adb3fe9df17">

<img width="1216" alt="image"
src="2e7c4930-1036-415e-8d27-19f7e6012701">

<img width="1343" alt="image"
src="3654cc6f-4113-44cc-86ab-93dbdf49a9a9">


### Checklist

Delete any items that are not applicable to this PR.

- [ ] 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)
- [ ]
[Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html)
was added for features that require explanation or tutorials
- [ ] [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
- [ ] Any UI touched in this PR is usable by keyboard only (learn more
about [keyboard accessibility](https://webaim.org/techniques/keyboard/))
- [ ] Any UI touched in this PR does not create any new axe failures
(run axe in browser:
[FF](https://addons.mozilla.org/en-US/firefox/addon/axe-devtools/),
[Chrome](https://chrome.google.com/webstore/detail/axe-web-accessibility-tes/lhdoppojpmngadmnindnejefpokejbdd?hl=en-US))
- [ ] 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 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))
- [ ] This was checked for [cross-browser
compatibility](https://www.elastic.co/support/matrix#matrix_browsers)

---------

Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com>
2023-09-19 16:55:34 -06:00
Melissa Alvarez
327448b726
[ML] Adds ability to deploy trained models for data frame analytics jobs (#162537)
## Summary

Related issue: https://github.com/elastic/kibana/issues/161026

This PR adds a 'Deploy model' action in Machine Learning > Model
Management > Trained models.

Action in list:
<img width="1392" alt="image"
src="65978519-a2c2-41ff-8709-9a868587c5af">

Details step:
<img width="1406" alt="image"
src="eba9ebf3-ab69-4e8e-9c02-120982d94373">

Configure processor:
<img width="1403" alt="image"
src="39ae977f-163f-4a86-9034-817abf123ac2">

Configure processor edit:
<img width="1394" alt="image"
src="8dcee306-baef-4871-8ca7-668c77fa95cb">

Configure processor additional:
<img width="1396" alt="image"
src="268c7cf8-19eb-4f29-afbb-8d5e8a0c8598">

Handle failures:
<img width="1310" alt="image"
src="a692c892-6730-4a93-8c27-2acc417505e1">

<img width="1310" alt="image"
src="37087120-b9e6-4399-a2ce-012a17d57a52">

<img width="1308" alt="image"
src="57d840a8-41bf-40ff-9702-39ca7facf610">

Test:
<img width="1397" alt="image"
src="2a07b358-1945-47c7-8ba3-82942f3cf359">

Create:
<img width="1404" alt="image"
src="8bd163b3-64df-4611-924e-06f0e8df1330">

Create success:
<img width="1404" alt="image"
src="be9c7732-9635-465f-9e03-28f11e157711">



### Checklist

Delete any items that are not applicable to this PR.

- [ ] 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)
- [ ]
[Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html)
was added for features that require explanation or tutorials
- [ ] [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
- [ ] Any UI touched in this PR is usable by keyboard only (learn more
about [keyboard accessibility](https://webaim.org/techniques/keyboard/))
- [ ] Any UI touched in this PR does not create any new axe failures
(run axe in browser:
[FF](https://addons.mozilla.org/en-US/firefox/addon/axe-devtools/),
[Chrome](https://chrome.google.com/webstore/detail/axe-web-accessibility-tes/lhdoppojpmngadmnindnejefpokejbdd?hl=en-US))
- [ ] 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 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))
- [ ] This was checked for [cross-browser
compatibility](https://www.elastic.co/support/matrix#matrix_browsers)

---------

Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com>
2023-08-08 14:01:28 -04:00
James Gowdy
716ecb8a04
[ML] Log pattern analysis field validation (#162319)
Uses the recently created [category validation
package](https://github.com/elastic/kibana/pull/161261) to perform
validation on the field selected for pattern analysis.

If the field is considered unsuitable for categorization, a warning
callout is displayed which lists the reasons it is unsuitable.
If the field is suitable, no callout is displayed.

Other changes:
- Adds the selected field to the URL state, so it is remembered on page
refresh.
- If no field is in the URL, it will look for a field called `message`
in the data view and auto select it.
- renames the ML route `/jobs/categorization_field_examples` to
`/jobs/categorization_field_validation` as it is a more accurate name
and it's consistent with the newly added route in AIOPs.

**Log Pattern Analysis page in ML**


![image](c0dfda8b-bc34-48b7-9e71-8bae9e65bdf3)


**Log Pattern Analysis flyout in Discover**


![image](b4d251f3-bae6-424f-9891-bda57ba1673d)

---------

Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>
2023-07-28 16:44:23 +01:00
Dima Arnautov
e41936662e
[ML] Fix indentation in the API content page template (#155498)
## Summary

Fixes indentation in the API content page template
2023-04-21 14:46:47 +02:00
Dima Arnautov
5636060d11
[ML] Script to generate a content page for the ML Kibana API (#154538)
## Summary

- Adds a script to generate a content page with ML Kibana API groups
- Updates the `apiDocs` npm command
2023-04-11 13:35:54 +02:00
Dima Arnautov
c94cce5d10
[ML] Fix apiDoc script (#153366)
## Summary

Previously, apidoc scripts were transpiled to TS and the JS files were
passed as parameters to the npm command. With the recent Kibana changes
related to `tsconfig`, the output structure has changed and caused
`apiDocs` to fail.

With this PR I introduced a scripts folder that utilizes
[setup_node_env](afb09ccf8a/src/setup_node_env/index.js (L10))
and allows us to omit `tsc` step.

Also, the `getTypeAtLocation` method started throwing an error in some
cases. For now, I've added an error handling and need to investigate
what's off.
2023-03-23 10:10:43 -07:00