Skip to content

Commit

Permalink
Add execution context service (#102039)
Browse files Browse the repository at this point in the history
* add execution context service on the server-side

* integrate execution context service into http service

* add integration tests for execution context + http server

* update core code

* update integration tests

* update settings docs

* add execution context test plugin

* add a client-side test

* remove requestId from execution context

* add execution context service for the client side

* expose execution context service to plugins

* add execution context service for the server-side

* update http service

* update elasticsearch service

* move integration tests from http to execution_context service

* integrate in es client

* expose to plugins

* refactor functional tests

* remove x-opaque-id from create_cluster tests

* update test plugin package.json

* fix type errors in the test mocks

* fix elasticsearch service tests

* add escaping to support non-ascii symbols in description field

* improve test coverage

* update docs

* remove unnecessary import

* update docs

* Apply suggestions from code review

Co-authored-by: Josh Dover <1813008+joshdover@users.noreply.github.com>

* address comments

* remove execution context cleanup

* add option to disable execution_context service on the server side

* put x-opaque-id test back

* put tests back

* add header size limitation to the server side as well

* fix integration tests

* address comments

Co-authored-by: Josh Dover <1813008+joshdover@users.noreply.github.com>
  • Loading branch information
mshustov and joshdover authored Jul 7, 2021
1 parent 979c6e8 commit e01e682
Show file tree
Hide file tree
Showing 99 changed files with 2,182 additions and 32 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<!-- Do not edit this file. It is automatically generated by API Documenter. -->

[Home](./index.md) &gt; [kibana-plugin-core-public](./kibana-plugin-core-public.md) &gt; [CoreStart](./kibana-plugin-core-public.corestart.md) &gt; [executionContext](./kibana-plugin-core-public.corestart.executioncontext.md)

## CoreStart.executionContext property

[ExecutionContextServiceStart](./kibana-plugin-core-public.executioncontextservicestart.md)

<b>Signature:</b>

```typescript
executionContext: ExecutionContextServiceStart;
```
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ export interface CoreStart
| [chrome](./kibana-plugin-core-public.corestart.chrome.md) | <code>ChromeStart</code> | [ChromeStart](./kibana-plugin-core-public.chromestart.md) |
| [deprecations](./kibana-plugin-core-public.corestart.deprecations.md) | <code>DeprecationsServiceStart</code> | [DeprecationsServiceStart](./kibana-plugin-core-public.deprecationsservicestart.md) |
| [docLinks](./kibana-plugin-core-public.corestart.doclinks.md) | <code>DocLinksStart</code> | [DocLinksStart](./kibana-plugin-core-public.doclinksstart.md) |
| [executionContext](./kibana-plugin-core-public.corestart.executioncontext.md) | <code>ExecutionContextServiceStart</code> | [ExecutionContextServiceStart](./kibana-plugin-core-public.executioncontextservicestart.md) |
| [fatalErrors](./kibana-plugin-core-public.corestart.fatalerrors.md) | <code>FatalErrorsStart</code> | [FatalErrorsStart](./kibana-plugin-core-public.fatalerrorsstart.md) |
| [http](./kibana-plugin-core-public.corestart.http.md) | <code>HttpStart</code> | [HttpStart](./kibana-plugin-core-public.httpstart.md) |
| [i18n](./kibana-plugin-core-public.corestart.i18n.md) | <code>I18nStart</code> | [I18nStart](./kibana-plugin-core-public.i18nstart.md) |
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<!-- Do not edit this file. It is automatically generated by API Documenter. -->

[Home](./index.md) &gt; [kibana-plugin-core-public](./kibana-plugin-core-public.md) &gt; [ExecutionContextServiceStart](./kibana-plugin-core-public.executioncontextservicestart.md) &gt; [create](./kibana-plugin-core-public.executioncontextservicestart.create.md)

## ExecutionContextServiceStart.create property

Creates a context container carrying the meta-data of a runtime operation. Provided meta-data will be propagated to Kibana and Elasticsearch servers.

```js
const context = executionContext.create(...);
http.fetch('/endpoint/', { context });

```

<b>Signature:</b>

```typescript
create: (context: KibanaExecutionContext) => IExecutionContextContainer;
```
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
<!-- Do not edit this file. It is automatically generated by API Documenter. -->

[Home](./index.md) &gt; [kibana-plugin-core-public](./kibana-plugin-core-public.md) &gt; [ExecutionContextServiceStart](./kibana-plugin-core-public.executioncontextservicestart.md)

## ExecutionContextServiceStart interface


<b>Signature:</b>

```typescript
export interface ExecutionContextServiceStart
```

## Properties

| Property | Type | Description |
| --- | --- | --- |
| [create](./kibana-plugin-core-public.executioncontextservicestart.create.md) | <code>(context: KibanaExecutionContext) =&gt; IExecutionContextContainer</code> | Creates a context container carrying the meta-data of a runtime operation. Provided meta-data will be propagated to Kibana and Elasticsearch servers.
```js
const context = executionContext.create(...);
http.fetch('/endpoint/', { context });

```
|

Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<!-- Do not edit this file. It is automatically generated by API Documenter. -->

[Home](./index.md) &gt; [kibana-plugin-core-public](./kibana-plugin-core-public.md) &gt; [HttpFetchOptions](./kibana-plugin-core-public.httpfetchoptions.md) &gt; [context](./kibana-plugin-core-public.httpfetchoptions.context.md)

## HttpFetchOptions.context property

<b>Signature:</b>

```typescript
context?: IExecutionContextContainer;
```
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ export interface HttpFetchOptions extends HttpRequestInit
| --- | --- | --- |
| [asResponse](./kibana-plugin-core-public.httpfetchoptions.asresponse.md) | <code>boolean</code> | When <code>true</code> the return type of [HttpHandler](./kibana-plugin-core-public.httphandler.md) will be an [HttpResponse](./kibana-plugin-core-public.httpresponse.md) with detailed request and response information. When <code>false</code>, the return type will just be the parsed response body. Defaults to <code>false</code>. |
| [asSystemRequest](./kibana-plugin-core-public.httpfetchoptions.assystemrequest.md) | <code>boolean</code> | Whether or not the request should include the "system request" header to differentiate an end user request from Kibana internal request. Can be read on the server-side using KibanaRequest\#isSystemRequest. Defaults to <code>false</code>. |
| [context](./kibana-plugin-core-public.httpfetchoptions.context.md) | <code>IExecutionContextContainer</code> | |
| [headers](./kibana-plugin-core-public.httpfetchoptions.headers.md) | <code>HttpHeadersInit</code> | Headers to send with the request. See [HttpHeadersInit](./kibana-plugin-core-public.httpheadersinit.md)<!-- -->. |
| [prependBasePath](./kibana-plugin-core-public.httpfetchoptions.prependbasepath.md) | <code>boolean</code> | Whether or not the request should automatically prepend the basePath. Defaults to <code>true</code>. |
| [query](./kibana-plugin-core-public.httpfetchoptions.query.md) | <code>HttpFetchQuery</code> | The query string for an HTTP request. See [HttpFetchQuery](./kibana-plugin-core-public.httpfetchquery.md)<!-- -->. |
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<!-- Do not edit this file. It is automatically generated by API Documenter. -->

[Home](./index.md) &gt; [kibana-plugin-core-public](./kibana-plugin-core-public.md) &gt; [IExecutionContextContainer](./kibana-plugin-core-public.iexecutioncontextcontainer.md)

## IExecutionContextContainer interface


<b>Signature:</b>

```typescript
export interface IExecutionContextContainer
```

## Properties

| Property | Type | Description |
| --- | --- | --- |
| [toHeader](./kibana-plugin-core-public.iexecutioncontextcontainer.toheader.md) | <code>() =&gt; Record&lt;string, string&gt;</code> | |

Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<!-- Do not edit this file. It is automatically generated by API Documenter. -->

[Home](./index.md) &gt; [kibana-plugin-core-public](./kibana-plugin-core-public.md) &gt; [IExecutionContextContainer](./kibana-plugin-core-public.iexecutioncontextcontainer.md) &gt; [toHeader](./kibana-plugin-core-public.iexecutioncontextcontainer.toheader.md)

## IExecutionContextContainer.toHeader property

<b>Signature:</b>

```typescript
toHeader: () => Record<string, string>;
```
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<!-- Do not edit this file. It is automatically generated by API Documenter. -->

[Home](./index.md) &gt; [kibana-plugin-core-public](./kibana-plugin-core-public.md) &gt; [KibanaExecutionContext](./kibana-plugin-core-public.kibanaexecutioncontext.md) &gt; [description](./kibana-plugin-core-public.kibanaexecutioncontext.description.md)

## KibanaExecutionContext.description property

human readable description. For example, a vis title, action name

<b>Signature:</b>

```typescript
readonly description: string;
```
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<!-- Do not edit this file. It is automatically generated by API Documenter. -->

[Home](./index.md) &gt; [kibana-plugin-core-public](./kibana-plugin-core-public.md) &gt; [KibanaExecutionContext](./kibana-plugin-core-public.kibanaexecutioncontext.md) &gt; [id](./kibana-plugin-core-public.kibanaexecutioncontext.id.md)

## KibanaExecutionContext.id property

unique value to indentify find the source

<b>Signature:</b>

```typescript
readonly id: string;
```
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<!-- Do not edit this file. It is automatically generated by API Documenter. -->

[Home](./index.md) &gt; [kibana-plugin-core-public](./kibana-plugin-core-public.md) &gt; [KibanaExecutionContext](./kibana-plugin-core-public.kibanaexecutioncontext.md)

## KibanaExecutionContext interface


<b>Signature:</b>

```typescript
export interface KibanaExecutionContext
```

## Properties

| Property | Type | Description |
| --- | --- | --- |
| [description](./kibana-plugin-core-public.kibanaexecutioncontext.description.md) | <code>string</code> | human readable description. For example, a vis title, action name |
| [id](./kibana-plugin-core-public.kibanaexecutioncontext.id.md) | <code>string</code> | unique value to indentify find the source |
| [name](./kibana-plugin-core-public.kibanaexecutioncontext.name.md) | <code>string</code> | public name of a user-facing feature |
| [type](./kibana-plugin-core-public.kibanaexecutioncontext.type.md) | <code>string</code> | Kibana application initated an operation. Can be narrowed to an enum later. |
| [url](./kibana-plugin-core-public.kibanaexecutioncontext.url.md) | <code>string</code> | in browser - url to navigate to a current page, on server - endpoint path, for task: task SO url |

Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<!-- Do not edit this file. It is automatically generated by API Documenter. -->

[Home](./index.md) &gt; [kibana-plugin-core-public](./kibana-plugin-core-public.md) &gt; [KibanaExecutionContext](./kibana-plugin-core-public.kibanaexecutioncontext.md) &gt; [name](./kibana-plugin-core-public.kibanaexecutioncontext.name.md)

## KibanaExecutionContext.name property

public name of a user-facing feature

<b>Signature:</b>

```typescript
readonly name: string;
```
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<!-- Do not edit this file. It is automatically generated by API Documenter. -->

[Home](./index.md) &gt; [kibana-plugin-core-public](./kibana-plugin-core-public.md) &gt; [KibanaExecutionContext](./kibana-plugin-core-public.kibanaexecutioncontext.md) &gt; [type](./kibana-plugin-core-public.kibanaexecutioncontext.type.md)

## KibanaExecutionContext.type property

Kibana application initated an operation. Can be narrowed to an enum later.

<b>Signature:</b>

```typescript
readonly type: string;
```
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<!-- Do not edit this file. It is automatically generated by API Documenter. -->

[Home](./index.md) &gt; [kibana-plugin-core-public](./kibana-plugin-core-public.md) &gt; [KibanaExecutionContext](./kibana-plugin-core-public.kibanaexecutioncontext.md) &gt; [url](./kibana-plugin-core-public.kibanaexecutioncontext.url.md)

## KibanaExecutionContext.url property

in browser - url to navigate to a current page, on server - endpoint path, for task: task SO url

<b>Signature:</b>

```typescript
readonly url?: string;
```
3 changes: 3 additions & 0 deletions docs/development/core/public/kibana-plugin-core-public.md
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ The plugin integrates with the core system via lifecycle events: `setup`<!-- -->
| [DocLinksStart](./kibana-plugin-core-public.doclinksstart.md) | |
| [DomainDeprecationDetails](./kibana-plugin-core-public.domaindeprecationdetails.md) | |
| [ErrorToastOptions](./kibana-plugin-core-public.errortoastoptions.md) | Options available for [IToasts](./kibana-plugin-core-public.itoasts.md) error APIs. |
| [ExecutionContextServiceStart](./kibana-plugin-core-public.executioncontextservicestart.md) | |
| [FatalErrorInfo](./kibana-plugin-core-public.fatalerrorinfo.md) | Represents the <code>message</code> and <code>stack</code> of a fatal Error |
| [FatalErrorsSetup](./kibana-plugin-core-public.fatalerrorssetup.md) | FatalErrors stop the Kibana Public Core and displays a fatal error screen with details about the Kibana build and the error. |
| [HttpFetchOptions](./kibana-plugin-core-public.httpfetchoptions.md) | All options that may be used with a [HttpHandler](./kibana-plugin-core-public.httphandler.md)<!-- -->. |
Expand All @@ -79,12 +80,14 @@ The plugin integrates with the core system via lifecycle events: `setup`<!-- -->
| [I18nStart](./kibana-plugin-core-public.i18nstart.md) | I18nStart.Context is required by any localizable React component from @<!-- -->kbn/i18n and @<!-- -->elastic/eui packages and is supposed to be used as the topmost component for any i18n-compatible React tree. |
| [IAnonymousPaths](./kibana-plugin-core-public.ianonymouspaths.md) | APIs for denoting paths as not requiring authentication |
| [IBasePath](./kibana-plugin-core-public.ibasepath.md) | APIs for manipulating the basePath on URL segments. |
| [IExecutionContextContainer](./kibana-plugin-core-public.iexecutioncontextcontainer.md) | |
| [IExternalUrl](./kibana-plugin-core-public.iexternalurl.md) | APIs for working with external URLs. |
| [IExternalUrlPolicy](./kibana-plugin-core-public.iexternalurlpolicy.md) | A policy describing whether access to an external destination is allowed. |
| [IHttpFetchError](./kibana-plugin-core-public.ihttpfetcherror.md) | |
| [IHttpInterceptController](./kibana-plugin-core-public.ihttpinterceptcontroller.md) | Used to halt a request Promise chain in a [HttpInterceptor](./kibana-plugin-core-public.httpinterceptor.md)<!-- -->. |
| [IHttpResponseInterceptorOverrides](./kibana-plugin-core-public.ihttpresponseinterceptoroverrides.md) | Properties that can be returned by HttpInterceptor.request to override the response. |
| [IUiSettingsClient](./kibana-plugin-core-public.iuisettingsclient.md) | Client-side client that provides access to the advanced settings stored in elasticsearch. The settings provide control over the behavior of the Kibana application. For example, a user can specify how to display numeric or date fields. Users can adjust the settings via Management UI. [IUiSettingsClient](./kibana-plugin-core-public.iuisettingsclient.md) |
| [KibanaExecutionContext](./kibana-plugin-core-public.kibanaexecutioncontext.md) | |
| [NavigateToAppOptions](./kibana-plugin-core-public.navigatetoappoptions.md) | Options for the [navigateToApp API](./kibana-plugin-core-public.applicationstart.navigatetoapp.md) |
| [NotificationsSetup](./kibana-plugin-core-public.notificationssetup.md) | |
| [NotificationsStart](./kibana-plugin-core-public.notificationsstart.md) | |
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<!-- Do not edit this file. It is automatically generated by API Documenter. -->

[Home](./index.md) &gt; [kibana-plugin-core-server](./kibana-plugin-core-server.md) &gt; [CoreSetup](./kibana-plugin-core-server.coresetup.md) &gt; [executionContext](./kibana-plugin-core-server.coresetup.executioncontext.md)

## CoreSetup.executionContext property

[ExecutionContextSetup](./kibana-plugin-core-server.executioncontextsetup.md)

<b>Signature:</b>

```typescript
executionContext: ExecutionContextSetup;
```
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ export interface CoreSetup<TPluginsStart extends object = object, TStart = unkno
| [context](./kibana-plugin-core-server.coresetup.context.md) | <code>ContextSetup</code> | [ContextSetup](./kibana-plugin-core-server.contextsetup.md) |
| [deprecations](./kibana-plugin-core-server.coresetup.deprecations.md) | <code>DeprecationsServiceSetup</code> | [DeprecationsServiceSetup](./kibana-plugin-core-server.deprecationsservicesetup.md) |
| [elasticsearch](./kibana-plugin-core-server.coresetup.elasticsearch.md) | <code>ElasticsearchServiceSetup</code> | [ElasticsearchServiceSetup](./kibana-plugin-core-server.elasticsearchservicesetup.md) |
| [executionContext](./kibana-plugin-core-server.coresetup.executioncontext.md) | <code>ExecutionContextSetup</code> | [ExecutionContextSetup](./kibana-plugin-core-server.executioncontextsetup.md) |
| [getStartServices](./kibana-plugin-core-server.coresetup.getstartservices.md) | <code>StartServicesAccessor&lt;TPluginsStart, TStart&gt;</code> | [StartServicesAccessor](./kibana-plugin-core-server.startservicesaccessor.md) |
| [http](./kibana-plugin-core-server.coresetup.http.md) | <code>HttpServiceSetup &amp; {</code><br/><code> resources: HttpResources;</code><br/><code> }</code> | [HttpServiceSetup](./kibana-plugin-core-server.httpservicesetup.md) |
| [i18n](./kibana-plugin-core-server.coresetup.i18n.md) | <code>I18nServiceSetup</code> | [I18nServiceSetup](./kibana-plugin-core-server.i18nservicesetup.md) |
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<!-- Do not edit this file. It is automatically generated by API Documenter. -->

[Home](./index.md) &gt; [kibana-plugin-core-server](./kibana-plugin-core-server.md) &gt; [CoreStart](./kibana-plugin-core-server.corestart.md) &gt; [executionContext](./kibana-plugin-core-server.corestart.executioncontext.md)

## CoreStart.executionContext property

[ExecutionContextStart](./kibana-plugin-core-server.executioncontextstart.md)

<b>Signature:</b>

```typescript
executionContext: ExecutionContextStart;
```
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ export interface CoreStart
| --- | --- | --- |
| [capabilities](./kibana-plugin-core-server.corestart.capabilities.md) | <code>CapabilitiesStart</code> | [CapabilitiesStart](./kibana-plugin-core-server.capabilitiesstart.md) |
| [elasticsearch](./kibana-plugin-core-server.corestart.elasticsearch.md) | <code>ElasticsearchServiceStart</code> | [ElasticsearchServiceStart](./kibana-plugin-core-server.elasticsearchservicestart.md) |
| [executionContext](./kibana-plugin-core-server.corestart.executioncontext.md) | <code>ExecutionContextStart</code> | [ExecutionContextStart](./kibana-plugin-core-server.executioncontextstart.md) |
| [http](./kibana-plugin-core-server.corestart.http.md) | <code>HttpServiceStart</code> | [HttpServiceStart](./kibana-plugin-core-server.httpservicestart.md) |
| [metrics](./kibana-plugin-core-server.corestart.metrics.md) | <code>MetricsServiceStart</code> | [MetricsServiceStart](./kibana-plugin-core-server.metricsservicestart.md) |
| [savedObjects](./kibana-plugin-core-server.corestart.savedobjects.md) | <code>SavedObjectsServiceStart</code> | [SavedObjectsServiceStart](./kibana-plugin-core-server.savedobjectsservicestart.md) |
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
<!-- Do not edit this file. It is automatically generated by API Documenter. -->

[Home](./index.md) &gt; [kibana-plugin-core-server](./kibana-plugin-core-server.md) &gt; [ExecutionContextSetup](./kibana-plugin-core-server.executioncontextsetup.md) &gt; [get](./kibana-plugin-core-server.executioncontextsetup.get.md)

## ExecutionContextSetup.get() method

Retrieves an opearation meta-data for the current async context.

<b>Signature:</b>

```typescript
get(): IExecutionContextContainer | undefined;
```
<b>Returns:</b>

`IExecutionContextContainer | undefined`

Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
<!-- Do not edit this file. It is automatically generated by API Documenter. -->

[Home](./index.md) &gt; [kibana-plugin-core-server](./kibana-plugin-core-server.md) &gt; [ExecutionContextSetup](./kibana-plugin-core-server.executioncontextsetup.md)

## ExecutionContextSetup interface


<b>Signature:</b>

```typescript
export interface ExecutionContextSetup
```

## Methods

| Method | Description |
| --- | --- |
| [get()](./kibana-plugin-core-server.executioncontextsetup.get.md) | Retrieves an opearation meta-data for the current async context. |
| [set(context)](./kibana-plugin-core-server.executioncontextsetup.set.md) | Stores the meta-data of a runtime operation. Data are carried over all async operations automatically. The sequential calls merge provided "context" object shallowly. |

Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
<!-- Do not edit this file. It is automatically generated by API Documenter. -->

[Home](./index.md) &gt; [kibana-plugin-core-server](./kibana-plugin-core-server.md) &gt; [ExecutionContextSetup](./kibana-plugin-core-server.executioncontextsetup.md) &gt; [set](./kibana-plugin-core-server.executioncontextsetup.set.md)

## ExecutionContextSetup.set() method

Stores the meta-data of a runtime operation. Data are carried over all async operations automatically. The sequential calls merge provided "context" object shallowly.

<b>Signature:</b>

```typescript
set(context: Partial<KibanaServerExecutionContext>): void;
```

## Parameters

| Parameter | Type | Description |
| --- | --- | --- |
| context | <code>Partial&lt;KibanaServerExecutionContext&gt;</code> | |

<b>Returns:</b>

`void`

Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<!-- Do not edit this file. It is automatically generated by API Documenter. -->

[Home](./index.md) &gt; [kibana-plugin-core-server](./kibana-plugin-core-server.md) &gt; [ExecutionContextStart](./kibana-plugin-core-server.executioncontextstart.md)

## ExecutionContextStart type


<b>Signature:</b>

```typescript
export declare type ExecutionContextStart = ExecutionContextSetup;
```
Loading

0 comments on commit e01e682

Please sign in to comment.