From 4c45ae0645fa1f0f00a38b5334f97e37dfed65e3 Mon Sep 17 00:00:00 2001 From: Liza Katz Date: Mon, 19 Apr 2021 12:21:50 +0300 Subject: [PATCH 01/13] [Search] enable fun-ctional tests (#97398) * only fun-ctional * fix functional tests * tests * Type --- .../search_examples/public/search/app.tsx | 28 +++++++++++--- .../search_examples/search_example.ts | 37 ++++++++++++++----- .../search_examples/search_sessions_cache.ts | 6 ++- 3 files changed, 56 insertions(+), 15 deletions(-) diff --git a/examples/search_examples/public/search/app.tsx b/examples/search_examples/public/search/app.tsx index b2a4991d0717b..65d939088515a 100644 --- a/examples/search_examples/public/search/app.tsx +++ b/examples/search_examples/public/search/app.tsx @@ -195,7 +195,7 @@ export const SearchExamplesApp = ({ }); }; - const doSearchSourceSearch = async () => { + const doSearchSourceSearch = async (otherBucket: boolean) => { if (!indexPattern) return; const query = data.query.queryString.getQuery(); @@ -221,7 +221,7 @@ export const SearchExamplesApp = ({ aggDef.push({ type: 'terms', schema: 'split', - params: { field: selectedBucketField.name, size: 2, otherBucket: true }, + params: { field: selectedBucketField.name, size: 2, otherBucket }, }); } if (selectedNumericField) { @@ -280,8 +280,8 @@ export const SearchExamplesApp = ({ } }; - const onSearchSourceClickHandler = () => { - doSearchSourceSearch(); + const onSearchSourceClickHandler = (withOtherBucket: boolean) => { + doSearchSourceSearch(withOtherBucket); }; const reqTabs = [ @@ -367,6 +367,7 @@ export const SearchExamplesApp = ({ setIndexPattern(newIndexPattern); }} isClearable={false} + data-test-subj="indexPatternSelector" /> @@ -449,7 +450,7 @@ export const SearchExamplesApp = ({ onSearchSourceClickHandler(true)} iconType="play" data-test-subj="searchSourceWithOther" > @@ -464,6 +465,23 @@ export const SearchExamplesApp = ({ defaultMessage="Bucket and metrics aggregations with other bucket." /> + onSearchSourceClickHandler(false)} + iconType="play" + data-test-subj="searchSourceWithoutOther" + > + + + + + diff --git a/x-pack/test/examples/search_examples/search_example.ts b/x-pack/test/examples/search_examples/search_example.ts index 19a9535ebb951..c841b595ed119 100644 --- a/x-pack/test/examples/search_examples/search_example.ts +++ b/x-pack/test/examples/search_examples/search_example.ts @@ -12,26 +12,45 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const testSubjects = getService('testSubjects'); const PageObjects = getPageObjects(['common', 'timePicker']); const retry = getService('retry'); + const comboBox = getService('comboBox'); - describe.skip('Search session example', () => { + describe('Search session example', () => { const appId = 'searchExamples'; before(async function () { await PageObjects.common.navigateToApp(appId, { insertTimestamp: false }); + await comboBox.set('indexPatternSelector', 'logstash-*'); + await comboBox.set('searchBucketField', 'geo.src'); + await comboBox.set('searchMetricField', 'memory'); + await PageObjects.timePicker.setAbsoluteRange( + 'Mar 1, 2015 @ 00:00:00.000', + 'Nov 1, 2015 @ 00:00:00.000' + ); }); it('should have an other bucket', async () => { - await PageObjects.timePicker.setAbsoluteRange( - 'Jan 1, 2014 @ 00:00:00.000', - 'Jan 1, 2016 @ 00:00:00.000' - ); await testSubjects.click('searchSourceWithOther'); + await testSubjects.click('responseTab'); + const codeBlock = await testSubjects.find('responseCodeBlock'); + await retry.waitFor('get code block', async () => { + const visibleText = await codeBlock.getVisibleText(); + const parsedResponse = JSON.parse(visibleText); + const buckets = parsedResponse.aggregations[1].buckets; + return ( + buckets.length === 3 && buckets[2].key === '__other__' && buckets[2].doc_count === 9039 + ); + }); + }); - await retry.waitFor('has other bucket', async () => { - await testSubjects.click('responseTab'); - const codeBlock = await testSubjects.find('responseCodeBlock'); + it('should not have an other bucket', async () => { + await testSubjects.click('searchSourceWithoutOther'); + await testSubjects.click('responseTab'); + const codeBlock = await testSubjects.find('responseCodeBlock'); + await retry.waitFor('get code block', async () => { const visibleText = await codeBlock.getVisibleText(); - return visibleText.indexOf('__other__') > -1; + const parsedResponse = JSON.parse(visibleText); + const buckets = parsedResponse.aggregations[1].buckets; + return buckets.length === 2; }); }); }); diff --git a/x-pack/test/examples/search_examples/search_sessions_cache.ts b/x-pack/test/examples/search_examples/search_sessions_cache.ts index 57b2d1665d901..7e52849ed2a7e 100644 --- a/x-pack/test/examples/search_examples/search_sessions_cache.ts +++ b/x-pack/test/examples/search_examples/search_sessions_cache.ts @@ -14,6 +14,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const PageObjects = getPageObjects(['common']); const toasts = getService('toasts'); const retry = getService('retry'); + const comboBox = getService('comboBox'); async function getExecutedAt() { const toast = await toasts.getToastElement(1); @@ -26,11 +27,14 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { return text; } - describe.skip('Search session client side cache', () => { + describe('Search session client side cache', () => { const appId = 'searchExamples'; before(async function () { await PageObjects.common.navigateToApp(appId, { insertTimestamp: false }); + await comboBox.set('indexPatternSelector', 'logstash-*'); + await comboBox.set('searchBucketField', 'extension.raw'); + await comboBox.set('searchMetricField', 'phpmemory'); }); it('should cache responses by search session id', async () => { From 249f9aca15c619931b2e96bb0f9f40124539a446 Mon Sep 17 00:00:00 2001 From: Vadim Dalecky Date: Mon, 19 Apr 2021 11:57:01 +0200 Subject: [PATCH 02/13] RFC: URL Service (TTL: expired) (#95416) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * docs: ✏️ start URL Service RFC * docs: ✏️ improe short URL example * docs: ✏️ add summary, basic examples and motivation sections * docs: ✏️ fill end sections of rfc * feat: 🎸 start "Detailed design" section * docs: ✏️ add HTTP endpoints section * docs: ✏️ use table layout * docs: ✏️ cleanup various text parts * feat: 🎸 add redirect route GET endpoints * docs: ✏️ add alternatives * docs: ✏️ update examples * docs: ✏️ update client interfaces * docs: ✏️ update HTTP endpoints * docs: ✏️ update url generator references * docs: ✏️ add note about short URL migration * docs: ✏️ add Peter's clarifications * docs: ✏️ fix typos * docs: ✏️ remove short url create() method * docs: ✏️ update redirect endpoints * docs: ✏️ add note about locator usage * docs: ✏️ make paramsVersion required * docs: ✏️ add goals section * docs: ✏️ add suggested bullet points --- rfcs/images/url_service/new_architecture.png | Bin 0 -> 198480 bytes rfcs/images/url_service/old_architecture.png | Bin 0 -> 166166 bytes rfcs/text/0017_url_service.md | 600 +++++++++++++++++++ 3 files changed, 600 insertions(+) create mode 100644 rfcs/images/url_service/new_architecture.png create mode 100644 rfcs/images/url_service/old_architecture.png create mode 100644 rfcs/text/0017_url_service.md diff --git a/rfcs/images/url_service/new_architecture.png b/rfcs/images/url_service/new_architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..9faa025d429bf8465d14de64b31a4a05ceb4a2d5 GIT binary patch literal 198480 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%0AG0;{S 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
$%Qg~=}!uz48JkE+dC&$hV`XJmdWtp7(DgE8& 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 Qf&b1bs+~^#&E(Gi1Etq+yZ`_I literal 0 HcmV?d00001 diff --git a/rfcs/images/url_service/old_architecture.png b/rfcs/images/url_service/old_architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..fdb1c13fabf34959e00f744a69ebcf9b1f07b7ea GIT binary patch literal 166166 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 literal 0 HcmV?d00001 diff --git a/rfcs/text/0017_url_service.md b/rfcs/text/0017_url_service.md new file mode 100644 index 0000000000000..87a8a92c090d6 --- /dev/null +++ b/rfcs/text/0017_url_service.md @@ -0,0 +1,600 @@ +- Start Date: 2021-03-26 +- RFC PR: (leave this empty) +- Kibana Issue: (leave this empty) + + +# Summary + +Currently in the Kibana `share` plugin we have two services that deal with URLs. + +One is *Short URL Service*: given a long internal Kibana URL it returns an ID. +That ID can be used to "resolve" back to the long URL and redirect the user to +that long URL page. (The Short URL Service is now used in Dashboard, Discover, +Visualize apps, and have a few upcoming users, for example, when sharing panels +by Slack or e-mail we will want to use short URLs.) + +```ts +// It does not have a plugin API, you can only use it through an HTTP request. +const shortUrl = await http.post('/api/shorten_url', { + url: '/some/long/kibana/url/.../very?long=true#q=(rison:approved)' +}); +``` + +The other is the *URL Generator Service*: it simply receives an object of +parameters and returns back a deep link within Kibana. (You can use it, for +example, to navigate to some specific query with specific filters for a +specific index pattern in the Discover app. As of this writing, there are +eight registered URL generators, which are used by ten plugins.) + +```ts +// You first register a URL generator. +const myGenerator = plugins.share.registerUrlGenerator(/* ... */); + +// You can fetch it from the registry (if you don't already have it). +const myGenerator = plugins.share.getUrlGenerator(/* ... */); + +// Now you can use it to generate a deep link into Kibana. +const deepLink: string = myGenerator.createUrl({ /* ... */ }); +``` + + +## Goals of the project + +The proposal is to unify both of these services (Short URL Service and URL +Generator Service) into a single new *URL Service*. The new unified service +will still provide all the functionality the above mentioned services provide +and in addition will implement the following improvements: + +1. Standardize a way for apps to deep link and navigate into other Kibana apps, + with ability to use *location state* to specify the state of the app which is + not part of the URL. +2. Combine Short URL Service with URL Generator Service to allow short URLs to + be constructed from URL generators, which will also allow us to automatically + migrate the short URLs if the parameters of the underlying URL generator + change and be able to store location state in every short URL. +3. Make the short url service easier to use. (It was previously undocumented, + and no server side plugin APIs existed, which meant consumers had to use + REST APIs which is discouraged. Merging the two services will help achieve + this goal by simplifying the APIs.) +4. Support short urls being deleted (previously not possible). +5. Support short urls being migrated (previously not possible). + +See more detailed explanation and other small improvements in the "Motivation" +section below. + + +# Terminology + +In the proposed new service we introduce "locators". This is mostly a change +in language, we are renaming "URL generators" to "locators". The old name would +no longer make sense as we are not returning URLs from locators. + + +# Basic example + +The URL Service will have a client (`UrlServiceClient`) which will have the same +interface, both, on the server-side and the client-side. It will also have a +documented public set of HTTP API endpoints for use by: (1) the client-side +client; (2) external users, Elastic Cloud, and Support. + +The following code examples will work, both, on the server-side and the +client-side, as the base `UrlServiceClient` interface will be similar in both +environments. + +Below we consider four main examples of usage of the URL Service. All four +examples are existing use cases we currently have in Kibana. + + +## Navigating within Kibana using locators + +In this example let's consider a case where Discover app creates a locator, +then another plugin uses that locator to navigate to a deep link within the +Discover app. + +First, the Discover plugin creates its locator (usually one per app). It needs +to do this on the client and server. + + +```ts +const locator = plugins.share.locators.create({ + id: 'DISCOVER_DEEP_LINKS', + getLocation: ({ + indexPattern, + highlightedField, + filters: [], + query: {}, + fields: [], + activeDoc: 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx', + }) => { + app: 'discover', + route: `/${indexPatten}#_a=(${risonEncode({filters, query, fields})})`, + state: { + highlightedField, + activeDoc, + }, + }, +}); +``` + +Now, the Discover plugin exports this locator from its plugin contract. + +```ts +class DiscoverPlugin() { + start() { + return { + locator, + }; + } +} +``` + +Finally, if any other app now wants to navigate to a deep link within the +Discover application, they use this exported locator. + +```ts +plugins.discover.locator.navigate({ + indexPattern: 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx', + highlightedField: 'foo', +}); +``` + +Note, in this example the `highlightedField` parameter will not appear in the +URL bar, it will be passed to the Discover app through [`history.pushState()`](https://developer.mozilla.org/en-US/docs/Web/API/History/pushState) +mechanism (in Kibana case, using the [`history`](https://www.npmjs.com/package/history) package, which is used by `core.application.navigateToApp`). + + +## Sending a deep link to Kibana + +We have use cases were a deep link to some Kibana app is sent out, for example, +through e-mail or as a Slack message. + +In this example, lets consider some plugin gets hold of the Discover locator +on the server-side. + +```ts +const location = plugins.discover.locator.getRedirectPath({ + indexPattern: 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx', + highlightedField: 'foo', +}); +``` + +This would return the location of the client-side redirect endpoint. The redirect +endpoint could look like this: + +``` +/app/goto/_redirect/DISCOVER_DEEP_LINKS?params={"indexPattern":"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx","highlightedField":"foo"}¶msVersion=7.x +``` + +This redirect client-side endpoint would find the Discover locator and and +execute the `.navigate()` method on it. + + +## Creating a short link + +In this example, lets create a short link using the Discover locator. + +```ts +const shortUrl = await plugins.discover.locator.createShortUrl( + { + indexPattern: 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx', + highlightedField: 'foo', + } + 'human-readable-slug', +}); +``` + +The above example creates a short link and persists it in a saved object. The +short URL can have a human-readable slug, which uniquely identifies that short +URL. + +```ts +shortUrl.slug === 'human-readable-slug' +``` + +The short URL can be used to navigate to the Discover app. The redirect +client-side endpoint currently looks like this: + +``` +/app/goto/human-readable-slug +``` + +This persisted short URL would effectively work the same as the full version: + +``` +/app/goto/_redirect/DISCOVER_DEEP_LINKS?params={"indexPattern":"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx","highlightedField":"foo"}¶msVersion=7.x +``` + + +## External users navigating to a Kibana deep link + +Currently Elastic Cloud and Support have many links linking into Kibana. Most of +them are deep links into Discover and Dashboard apps where, for example, index +pattern is selected, or filters and time range are set. + +The external users could use the above mentioned client-side redirect endpoint +to navigate to their desired deep location within Kibana, for example, to the +Discover application: + +``` +/app/goto/_redirect/DISCOVER_DEEP_LINKS?params={"indexPattern":"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx","highlightedField":"foo"}¶msVersion=7.x +``` + + +# Motivation + +Our motivation to improve the URL services comes from us intending to use them +more, for example, for panel sharing to Slack or e-mail; and we believe that the +current state of the URL services needs an upgrade. + + +## Limitations of the Short URL Service + +We have identified the following limitations in the current implementation of +the Short URL Service: + +1. There is no migration system. If an application exposes this functionality, + every possible URL that might be generated should be supported forever. A + migration could be written inside the app itself, on page load, but this is a + risky path for URLs with many possibilities. + 1. __Will do:__ Short URLs will be created using locators. We will use + migrations provided by the locators to migrate the stored parameters + in the short URL saved object. +1. Short URLs store only the URL of the destination page. However, the + destination page might have other state which affects the display of the page + but is not present in the URL. Once the short URL is used to navigate to that + page, any state that is kept only in memory is lost. + 1. __Will do:__ The new implementation of the short URLs will also persist + the location state of the URL. That state would be provided to a + Kibana app once a user navigates to that app using a short URL. +1. It exposes only HTTP endpoint API. + 1. __Will do:__ We will also expose a URL Service client through plugin + contract on the server and browser. +1. It only has 3 HTTP endpoints, yet all three have different paths: + (1) `/short_url`, (2) `/shorten_url`; and (3) `/goto`. + 1. __Will do:__ We will normalize the HTTP endpoints. We will use HTTP + method "verbs" like POST, instead of verbs in the url like "shorten_url". +1. There is not much documentation for developers. + 1. __Will do:__ The new service will have a much nicer API and docs. +1. There is no way to delete short URLs once they are created. + 1. __Will do:__ The new service will provide CRUD API to manage short URLs, + including deletion. +1. Short URL service uses MD5 algorithm to hash long URLs. Security team + requested to stop using that algorithm. + 1. __Will do:__ The new URL Service will not use MD5 algorithm. +1. Short URLs are not automatically deleted when the target (say dashboard) is + deleted. (#10450) + 1. __Could do:__ The URL Service will not provide such feature. Though the + short URLs will keep track of saved object references used in the params + to generate a short URL. Maybe those saved references could somehow be + used in the future to provide such a facility. + + Currently, there are two possible avenues for deleting a short URL when + the underlying dashboard is deleted: + + 1. The Dashboard app could keep track of short URLs it generates for each + dashboard. Once a dashboard is deleted, the Dashboard app also + deletes all short URLs associated with that dashboard. + 1. Saved Objects Service could implement *cascading deletes*. Once a saved + object is deleted, the associated saved objects are also deleted + (#71453). +1. Add additional metadata to each short URL. + 1. __Could do:__ Each short URL already keeps a counter of how often it was + resolved, we could also keep track of a timestamp when it was last + resolved, and have an ability for users to give a title to each short URL. +1. Short URLs don't have a management UI. + 1. __Will NOT do:__ We will not create a dedicated UI for managing short + URLs. We could improve how short URLs saved objects are presented in saved + object management UI. +1. Short URLs can't be created by read-only users (#18006). + 1. __Will NOT do:__ Currently short URLs are stored as saved objects of type + `url`, we would like to keep it that way and benefit from saved object + facilities like references, migrations, authorization etc.. The consensus + is that we will not allow anonymous users to create short URLs. We want to + continue using saved object for short URLs going forward and not + compromise on their security model. + + +## Limitations of the URL Generator Service + +We have identified the following limitations in the current implementation of +the URL Generator Service: + +1. URL generator generate only the URL of the destination. However there is + also the ability to use location state with `core.application.navigateToApp` + navigation method. + 1. __Will do:__ The new locators will also generate the location state, which + will be used in `.navigateToApp` method. +1. URL generators are available only on the client-side. There is no way to use + them together with short URLs. + 1. __Will do:__ We will implement locators also on the server-side + (they will be available in both environments) and we will combine them + with the Short URL Service. +1. URL generators are not exposed externally, thus Cloud and Support cannot use + them to generate deep links into Kibana. + 1. __Will do:__ We will expose HTTP endpoints on the server-side and the + "redirect" app on the client-side which external users will be able to use + to deep link into Kibana using locators. + + +## Limitations of the architecture + +One major reason we want to "refresh" the Short URL Service and the URL +Generator Service is their architecture. + +Currently, the Short URL Service is implemented on top of the `url` type saved +object on the server-side. However, it only exposes the +HTTP endpoints, it does not expose any API on the server for the server-side +plugins to consume; on the client-side there is no plugin API either, developers +need to manually execute HTTP requests. + +The URL Generator Service is only available on the client-side, there is no way +to use it on the server-side, yet we already have use cases (for example ML +team) where a server-side plugin wants to use a URL generator. + +![Current Short URL Service and URL Generator Service architecture](../images/url_service/old_architecture.png) + +The current architecture does not allow both services to be conveniently used, +also as they are implemented in different locations, they are disjointed— +we cannot create a short URL using an URL generator. + + +# Detailed design + +In general we will try to provide as much as possible the same API on the +server-side and the client-side. + + +## High level architecture + +Below diagram shows the proposed architecture of the URL Service. + +![URL Service architecture](../images/url_service/new_architecture.png) + + +## Plugin contracts + +The aim is to provide developers the same experience on the server and browser. + +Below are preliminary interfaces of the new URL Service. `IUrlService` will be +a shared interface defined in `/common` folder shared across server and browser. +This will allow us to provide users a common API interface on the server and +browser, wherever they choose to use the URL Service: + +```ts +/** + * Common URL Service client interface for the server-side and the client-side. + */ +interface IUrlService { + locators: ILocatorClient; + shortUrls: IShortUrlClient; +} +``` + + +### Locators + +The locator business logic will be contained in `ILocatorClient` client and will +provide two main functionalities: + +1. It will provide a facility to create locators. +1. It will also be a registry of locators, every newly created locator is + automatically added to the registry. The registry should never be used when + locator ID is known at the compile time, but is reserved only for use cases + when we only know ID of a locator at runtime. + +```ts +interface ILocatorClient { + create

(definition: LocatorDefinition

): Locator

; + get

(id: string): Locator

; +} +``` + +The `LocatorDefinition` interface is a developer-friendly interface for creating +new locators. Mainly two things will be required from each new locator: + +1. Implement the `getLocation()` method, which gives the locator specific `params` + object returns a Kibana location, see description of `KibanaLocation` below. +2. Implement the `PersistableState` interface which we use in Kibana. This will + allow to migrate the locator `params`. Implementation of the `PersistableState` + interface will replace the `.isDeprecated` and `.migrate()` properties of URL + generators. + + +```ts +interface LocatorDefinition

extends PeristableState

{ + id: string; + getLocation(params: P): KibanaLocation; +} +``` + +Each constructed locator will have the following interface: + +```ts +interface Locator

{ + /** Creates a new short URL saved object using this locator. */ + createShortUrl(params: P, slug?: string): Promise; + /** Returns a relative URL to the client-side redirect endpoint using this locator. */ + getRedirectPath(params: P): string; + /** Navigate using core.application.navigateToApp() using this locator. */ + navigate(params: P): void; // Only on browser. +} +``` + + +### Short URLs + +The short URL client `IShortUrlClient` which will be the same on the server and +browser. However, the server and browser might add extra utility methods for +convenience. + +```ts +/** + * CRUD-like API for short URLs. + */ +interface IShortUrlClient { + /** + * Delete a short URL. + * + * @param slug The slug (ID) of the short URL. + * @return Returns true if deletion was successful. + */ + delete(slug: string): Promise; + + /** + * Fetch short URL. + * + * @param slug The slug (ID) of the short URL. + */ + get(slug: string): Promise; + + /** + * Same as `get()` but it also increments the "view" counter and the + * "last view" timestamp of this short URL. + * + * @param slug The slug (ID) of the short URL. + */ + resolve(slug: string): Promise; +} +``` + +Note, that in this new service to create a short URL the developer will have to +use a locator (instead of creating it directly from a long URL). + +```ts +const shortUrl = await plugins.share.shortUrls.create( + plugins.discover.locator, + { + indexPattern: 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx', + highlightedField: 'foo', + }, + 'optional-human-readable-slug', +); +``` + +These short URLs will be stored in saved objects of type `url` and will be +automatically migrated using the locator. The long URL will NOT be stored in the +saved object. The locator ID and locator params will be stored in the saved +object, that will allow us to do the migrations for short URLs. + + +### `KibanaLocation` interface + +The `KibanaLocation` interface is a simple interface to store a location in some +Kibana application. + +```ts +interface KibanaLocation { + app: string; + route: string; + state: object; +} +``` + +It maps directly to a `.navigateToApp()` call. + +```ts +let location: KibanaLocation; + +core.application.navigateToApp(location.app, { + route: location.route, + state: location.state, +}); +``` + + +## HTTP endpoints + + +### Short URL CRUD+ HTTP endpoints + +Below HTTP endpoints are designed to work specifically with short URLs: + +| HTTP method | Path | Description | +|-----------------------|-------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------| +| __POST__ | `/api/short_url` | Endpoint for creating new short URLs. | +| __GET__ | `/api/short_url/` | Endpoint for retrieving information about an existing short URL. | +| __DELETE__ | `/api/short_url/` | Endpoint for deleting an existing short URL. | +| __POST__ | `/api/short_url/` | Endpoint for updating information about an existing short URL. | +| __POST__ | `/api/short_url//_resolve` | Similar to `GET /api/short_url/`, but also increments the short URL access count counter and the last access timestamp. | + + +### The client-side navigate endpoint + +__NOTE.__ We are currently investigating if we really need this endpoint. The +main user of it was expected to be Cloud and Support to deeply link into Kibana, +but we are now reconsidering if we want to support this endpoint and possibly +find a different solution. + +The `/app/goto/_redirect/?params=...¶msVersion=...` client-side +endpoint will receive the locator ID and locator params, it will use those to +find the locator and execute `locator.navigate(params)` method. + +The `paramsVersion` parameter will be used to specify the version of the +`params` parameter. If the version is behind the latest version, then the migration +facilities of the locator will be used to on-the-fly migrate the `params` to the +latest version. + + +### Legacy endpoints + +Below are the legacy HTTP endpoints implemented by the `share` plugin, with a +plan of action for each endpoint: + +| HTTP method | Path | Description | +|-----------------------|-------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------| +| __ANY__ | `/goto/` | Endpoint for redirecting short URLs, we will keep it to redirect short URLs. | +| __GET__ | `/api/short_url/` | The new `GET /api/short_url/` endpoint will return a superset of the payload that the legacy endpoint now returns. | +| __POST__ | `/api/shorten_url` | The legacy endpoints for creating short URLs. We will remove it or deprecate this endpoint and maintain it until 8.0 major release. | + + +# Drawbacks + +Why should we *not* do this? + +- Implementation cost will be a few weeks, but the code complexity and quality + will improve. +- There is a cost of migrating existing Kibana plugins to use the new API. + + +# Alternatives + +We haven't considered other design alternatives. + +One alternative is still do the short URL improvements outlined above. But +reconsider URL generators: + +- Do we need URL generators at all? + - Kibana URLs are not stable and have changed in our past experience. Hence, + the URL generators were created to make the URL generator parameters stable + unless a migration is available. +- Do we want to put migration support in URL generators? + - Alternative would be for each app to support URLs forever or do the + migrations on the fly for old URLs. +- Should Kibana URLs be stable and break only during major releases? +- Should the Kibana application interface be extended such that some version of + URL generators is built in? + +The impact of not doing this change is essentially extending technical debt. + + +# Adoption strategy + +Is this a breaking change? It is a breaking change in the sense that the API +will change. However, all the existing use cases will be supported. When +implementing this we will also adjust all Kibana code to use the new API. From +the perspective of the developers when using the existing URL services nothing +will change, they will simply need to review a PR which stops using the URL +Generator Service and uses the combined URL Service instead, which will provide +a superset of features. + +Alternatively, we can deprecate the URL Generator Service and maintain it for a +few minor releases. + + +# How we teach this + +For the existing short URL and URL generator functionality there is nothing to +teach, as they will continue working with a largely similar API. + +Everything else in the new URL Service will have JSDoc comments and good +documentation on our website. From f5a8405eb97b301021b14f129830975663830555 Mon Sep 17 00:00:00 2001 From: Uladzislau Lasitsa Date: Mon, 19 Apr 2021 12:58:33 +0300 Subject: [PATCH 03/13] [Vega] Fixes problem with controls not being displayed on a map (#97373) * add element for vegaControls * Fix check types * Fixed type check Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../vis_type_vega/public/vega_view/vega_base_view.d.ts | 1 + .../public/vega_view/vega_map_view/layers/vega_layer.test.ts | 1 + .../public/vega_view/vega_map_view/layers/vega_layer.ts | 5 +++-- .../vis_type_vega/public/vega_view/vega_map_view/view.ts | 1 + 4 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/plugins/vis_type_vega/public/vega_view/vega_base_view.d.ts b/src/plugins/vis_type_vega/public/vega_view/vega_base_view.d.ts index b0ccdbba021ed..8f5770500253f 100644 --- a/src/plugins/vis_type_vega/public/vega_view/vega_base_view.d.ts +++ b/src/plugins/vis_type_vega/public/vega_view/vega_base_view.d.ts @@ -34,6 +34,7 @@ export class VegaBaseView { destroy(): Promise; _$container: any; + _$controls: any; _parser: any; _vegaViewConfig: any; _serviceSettings: VegaViewParams['serviceSettings']; diff --git a/src/plugins/vis_type_vega/public/vega_view/vega_map_view/layers/vega_layer.test.ts b/src/plugins/vis_type_vega/public/vega_view/vega_map_view/layers/vega_layer.test.ts index da4c14c77bc98..53337388dc190 100644 --- a/src/plugins/vis_type_vega/public/vega_view/vega_map_view/layers/vega_layer.test.ts +++ b/src/plugins/vis_type_vega/public/vega_view/vega_map_view/layers/vega_layer.test.ts @@ -36,6 +36,7 @@ describe('vega_map_view/tms_raster_layer', () => { vegaView: ({ initialize: jest.fn(), } as unknown) as View, + vegaControls: 'element', updateVegaView: jest.fn(), }; }); diff --git a/src/plugins/vis_type_vega/public/vega_view/vega_map_view/layers/vega_layer.ts b/src/plugins/vis_type_vega/public/vega_view/vega_map_view/layers/vega_layer.ts index a3efba804b454..8972b80cb99c5 100644 --- a/src/plugins/vis_type_vega/public/vega_view/vega_map_view/layers/vega_layer.ts +++ b/src/plugins/vis_type_vega/public/vega_view/vega_map_view/layers/vega_layer.ts @@ -13,12 +13,13 @@ import type { LayerParameters } from './types'; export interface VegaLayerContext { vegaView: View; updateVegaView: (map: Map, view: View) => void; + vegaControls: any; } export function initVegaLayer({ id, map: mapInstance, - context: { vegaView, updateVegaView }, + context: { vegaView, vegaControls, updateVegaView }, }: LayerParameters) { const vegaLayer: CustomLayerInterface = { id, @@ -34,7 +35,7 @@ export function initVegaLayer({ vegaContainer.style.height = mapCanvas.style.height; mapContainer.appendChild(vegaContainer); - vegaView.initialize(vegaContainer); + vegaView.initialize(vegaContainer, vegaControls); }, render() { updateVegaView(mapInstance, vegaView); diff --git a/src/plugins/vis_type_vega/public/vega_view/vega_map_view/view.ts b/src/plugins/vis_type_vega/public/vega_view/vega_map_view/view.ts index b1ec79e6b8310..61ae1ce4e5d78 100644 --- a/src/plugins/vis_type_vega/public/vega_view/vega_map_view/view.ts +++ b/src/plugins/vis_type_vega/public/vega_view/vega_map_view/view.ts @@ -175,6 +175,7 @@ export class VegaMapView extends VegaBaseView { map: mapBoxInstance, context: { vegaView, + vegaControls: this._$controls.get(0), updateVegaView, }, }); From b6fd28884b5800e147b2374bf4569625665b7ab8 Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Mon, 19 Apr 2021 11:37:56 +0100 Subject: [PATCH 04/13] chore(NA): moving @kbn/babel-preset into bazel (#97271) * chore(NA): moving @kbn/babel-preset into bazel * chore(NA): remove unused deps from xpack package.json --- .../monorepo-packages.asciidoc | 1 + package.json | 2 +- packages/BUILD.bazel | 1 + packages/kbn-ace/package.json | 3 +- packages/kbn-analytics/package.json | 3 +- packages/kbn-babel-code-parser/package.json | 3 - packages/kbn-babel-preset/BUILD.bazel | 63 +++++++++++++++++++ packages/kbn-dev-utils/package.json | 1 - packages/kbn-es/package.json | 3 - packages/kbn-i18n/package.json | 1 - packages/kbn-interpreter/package.json | 1 - packages/kbn-monaco/package.json | 1 - packages/kbn-optimizer/package.json | 1 - packages/kbn-test/package.json | 1 - packages/kbn-ui-shared-deps/package.json | 1 - x-pack/package.json | 4 +- yarn.lock | 2 +- 17 files changed, 70 insertions(+), 22 deletions(-) create mode 100644 packages/kbn-babel-preset/BUILD.bazel diff --git a/docs/developer/getting-started/monorepo-packages.asciidoc b/docs/developer/getting-started/monorepo-packages.asciidoc index bc47e46f6763b..9564087dabefe 100644 --- a/docs/developer/getting-started/monorepo-packages.asciidoc +++ b/docs/developer/getting-started/monorepo-packages.asciidoc @@ -63,6 +63,7 @@ yarn kbn watch-bazel - @elastic/datemath - @kbn/apm-utils +- @kbn/babel-preset - @kbn/config-schema - @kbn/tinymath - @kbn/utility-types diff --git a/package.json b/package.json index c6f33d263df84..38eaec444ac5d 100644 --- a/package.json +++ b/package.json @@ -454,7 +454,7 @@ "@istanbuljs/schema": "^0.1.2", "@jest/reporters": "^26.5.2", "@kbn/babel-code-parser": "link:packages/kbn-babel-code-parser", - "@kbn/babel-preset": "link:packages/kbn-babel-preset", + "@kbn/babel-preset": "link:bazel-bin/packages/kbn-babel-preset/npm_module", "@kbn/cli-dev-mode": "link:packages/kbn-cli-dev-mode", "@kbn/dev-utils": "link:packages/kbn-dev-utils", "@kbn/docs-utils": "link:packages/kbn-docs-utils", diff --git a/packages/BUILD.bazel b/packages/BUILD.bazel index fe0e8efe0d44f..e1a85e926f049 100644 --- a/packages/BUILD.bazel +++ b/packages/BUILD.bazel @@ -5,6 +5,7 @@ filegroup( srcs = [ "//packages/elastic-datemath:build", "//packages/kbn-apm-utils:build", + "//packages/kbn-babel-preset:build", "//packages/kbn-config-schema:build", "//packages/kbn-tinymath:build", "//packages/kbn-utility-types:build", diff --git a/packages/kbn-ace/package.json b/packages/kbn-ace/package.json index 30f37b4786f36..5b4b0312aa1ae 100644 --- a/packages/kbn-ace/package.json +++ b/packages/kbn-ace/package.json @@ -10,7 +10,6 @@ "kbn:bootstrap": "yarn build --dev" }, "devDependencies": { - "@kbn/dev-utils": "link:../kbn-dev-utils", - "@kbn/babel-preset": "link:../kbn-babel-preset" + "@kbn/dev-utils": "link:../kbn-dev-utils" } } \ No newline at end of file diff --git a/packages/kbn-analytics/package.json b/packages/kbn-analytics/package.json index 715f0af96ea3e..5b9db79febd77 100644 --- a/packages/kbn-analytics/package.json +++ b/packages/kbn-analytics/package.json @@ -14,7 +14,6 @@ "kbn:watch": "node scripts/build --source-maps --watch" }, "devDependencies": { - "@kbn/dev-utils": "link:../kbn-dev-utils", - "@kbn/babel-preset": "link:../kbn-babel-preset" + "@kbn/dev-utils": "link:../kbn-dev-utils" } } \ No newline at end of file diff --git a/packages/kbn-babel-code-parser/package.json b/packages/kbn-babel-code-parser/package.json index bfe01c6eae8e3..a5e05da6f8ee4 100755 --- a/packages/kbn-babel-code-parser/package.json +++ b/packages/kbn-babel-code-parser/package.json @@ -13,8 +13,5 @@ "build": "../../node_modules/.bin/babel src --out-dir target", "kbn:bootstrap": "yarn build --quiet", "kbn:watch": "yarn build --watch" - }, - "dependencies": { - "@kbn/babel-preset": "link:../kbn-babel-preset" } } diff --git a/packages/kbn-babel-preset/BUILD.bazel b/packages/kbn-babel-preset/BUILD.bazel new file mode 100644 index 0000000000000..13542ed6e73ad --- /dev/null +++ b/packages/kbn-babel-preset/BUILD.bazel @@ -0,0 +1,63 @@ +load("@build_bazel_rules_nodejs//:index.bzl", "js_library", "pkg_npm") + +PKG_BASE_NAME = "kbn-babel-preset" +PKG_REQUIRE_NAME = "@kbn/babel-preset" + +SOURCE_FILES = glob([ + "common_babel_parser_options.js", + "common_preset.js", + "istanbul_preset.js", + "node_preset.js", + "webpack_preset.js", +]) + +SRCS = SOURCE_FILES + +filegroup( + name = "srcs", + srcs = SRCS, +) + +NPM_MODULE_EXTRA_FILES = [ + "package.json", + "README.md", +] + +DEPS = [ + "@npm//@babel/plugin-proposal-class-properties", + "@npm//@babel/plugin-proposal-export-namespace-from", + "@npm//@babel/plugin-proposal-nullish-coalescing-operator", + "@npm//@babel/plugin-proposal-optional-chaining", + "@npm//@babel/plugin-proposal-private-methods", + "@npm//@babel/preset-env", + "@npm//@babel/preset-react", + "@npm//@babel/preset-typescript", + "@npm//babel-plugin-add-module-exports", + "@npm//babel-plugin-styled-components", +] + +js_library( + name = PKG_BASE_NAME, + srcs = [ + ":srcs", + ], + deps = DEPS, + package_name = PKG_REQUIRE_NAME, + visibility = ["//visibility:public"], +) + +pkg_npm( + name = "npm_module", + srcs = NPM_MODULE_EXTRA_FILES, + deps = [ + ":%s" % PKG_BASE_NAME, + ] +) + +filegroup( + name = "build", + srcs = [ + ":npm_module", + ], + visibility = ["//visibility:public"], +) diff --git a/packages/kbn-dev-utils/package.json b/packages/kbn-dev-utils/package.json index e1990fca4e0bb..87e142c3bece7 100644 --- a/packages/kbn-dev-utils/package.json +++ b/packages/kbn-dev-utils/package.json @@ -17,7 +17,6 @@ "@kbn/utils": "link:../kbn-utils" }, "devDependencies": { - "@kbn/babel-preset": "link:../kbn-babel-preset", "@kbn/expect": "link:../kbn-expect" } } \ No newline at end of file diff --git a/packages/kbn-es/package.json b/packages/kbn-es/package.json index c8fe2101bd639..f47f042505cad 100644 --- a/packages/kbn-es/package.json +++ b/packages/kbn-es/package.json @@ -14,8 +14,5 @@ }, "dependencies": { "@kbn/dev-utils": "link:../kbn-dev-utils" - }, - "devDependencies": { - "@kbn/babel-preset": "link:../kbn-babel-preset" } } \ No newline at end of file diff --git a/packages/kbn-i18n/package.json b/packages/kbn-i18n/package.json index d3b4e56fe05d4..570110589490b 100644 --- a/packages/kbn-i18n/package.json +++ b/packages/kbn-i18n/package.json @@ -12,7 +12,6 @@ "kbn:watch": "node scripts/build --watch --source-maps" }, "devDependencies": { - "@kbn/babel-preset": "link:../kbn-babel-preset", "@kbn/dev-utils": "link:../kbn-dev-utils" } } \ No newline at end of file diff --git a/packages/kbn-interpreter/package.json b/packages/kbn-interpreter/package.json index 59a14fa828583..491a7205be210 100644 --- a/packages/kbn-interpreter/package.json +++ b/packages/kbn-interpreter/package.json @@ -13,7 +13,6 @@ "@kbn/i18n": "link:../kbn-i18n" }, "devDependencies": { - "@kbn/babel-preset": "link:../kbn-babel-preset", "@kbn/dev-utils": "link:../kbn-dev-utils" } } \ No newline at end of file diff --git a/packages/kbn-monaco/package.json b/packages/kbn-monaco/package.json index bdf36915bab3a..f4309e08f5bdb 100644 --- a/packages/kbn-monaco/package.json +++ b/packages/kbn-monaco/package.json @@ -11,7 +11,6 @@ "build:antlr4ts": "../../node_modules/antlr4ts-cli/antlr4ts ./src/painless/antlr/painless_lexer.g4 ./src/painless/antlr/painless_parser.g4 && node ./scripts/fix_generated_antlr.js" }, "devDependencies": { - "@kbn/babel-preset": "link:../kbn-babel-preset", "@kbn/dev-utils": "link:../kbn-dev-utils" }, "dependencies": { diff --git a/packages/kbn-optimizer/package.json b/packages/kbn-optimizer/package.json index ac73fbc0fc16a..3c14d98755a32 100644 --- a/packages/kbn-optimizer/package.json +++ b/packages/kbn-optimizer/package.json @@ -11,7 +11,6 @@ "kbn:watch": "yarn build --watch" }, "dependencies": { - "@kbn/babel-preset": "link:../kbn-babel-preset", "@kbn/config": "link:../kbn-config", "@kbn/dev-utils": "link:../kbn-dev-utils", "@kbn/std": "link:../kbn-std", diff --git a/packages/kbn-test/package.json b/packages/kbn-test/package.json index a2dc8f84cfb51..2afbe41e0e00e 100644 --- a/packages/kbn-test/package.json +++ b/packages/kbn-test/package.json @@ -19,7 +19,6 @@ "@kbn/optimizer": "link:../kbn-optimizer" }, "devDependencies": { - "@kbn/babel-preset": "link:../kbn-babel-preset", "@kbn/dev-utils": "link:../kbn-dev-utils", "@kbn/expect": "link:../kbn-expect", "@kbn/utils": "link:../kbn-utils" diff --git a/packages/kbn-ui-shared-deps/package.json b/packages/kbn-ui-shared-deps/package.json index 47a2fa19e7a8e..00c6f677cd223 100644 --- a/packages/kbn-ui-shared-deps/package.json +++ b/packages/kbn-ui-shared-deps/package.json @@ -14,7 +14,6 @@ "@kbn/monaco": "link:../kbn-monaco" }, "devDependencies": { - "@kbn/babel-preset": "link:../kbn-babel-preset", "@kbn/dev-utils": "link:../kbn-dev-utils" } } \ No newline at end of file diff --git a/x-pack/package.json b/x-pack/package.json index 36a6d120d946b..0c0924b51264a 100644 --- a/x-pack/package.json +++ b/x-pack/package.json @@ -27,14 +27,12 @@ "yarn": "^1.21.1" }, "devDependencies": { - "@kbn/babel-preset": "link:../packages/kbn-babel-preset", "@kbn/dev-utils": "link:../packages/kbn-dev-utils", "@kbn/es": "link:../packages/kbn-es", "@kbn/expect": "link:../packages/kbn-expect", "@kbn/plugin-helpers": "link:../packages/kbn-plugin-helpers", "@kbn/storybook": "link:../packages/kbn-storybook", - "@kbn/test": "link:../packages/kbn-test", - "@kbn/utility-types": "link:../packages/kbn-utility-types" + "@kbn/test": "link:../packages/kbn-test" }, "dependencies": { "@elastic/safer-lodash-set": "link:../packages/elastic-safer-lodash-set", diff --git a/yarn.lock b/yarn.lock index 4d453cdb1dd27..c1b0fe1d1be4a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2624,7 +2624,7 @@ version "0.0.0" uid "" -"@kbn/babel-preset@link:packages/kbn-babel-preset": +"@kbn/babel-preset@link:bazel-bin/packages/kbn-babel-preset/npm_module": version "0.0.0" uid "" From 2f4e9db7fc8de5752e32e8c30675099617af768a Mon Sep 17 00:00:00 2001 From: John Schulz Date: Mon, 19 Apr 2021 07:33:27 -0400 Subject: [PATCH 05/13] Use for consistent name+icon lockup (#97377) ## Summary From design ticket https://github.com/elastic/observability-design/issues/32 > any ... place we display a link to the hosted agent policy, show an icon with hover tooltip: This PR closes 1B + 1C from https://github.com/elastic/kibana/issues/91906 & two other places which followed the same pattern. Factored out some repeated code at each call site into a `` component

Screenshots

Agent Policy List View

Screen Shot 2021-04-16 at 1 01 55 PM

Agent List View

Screen Shot 2021-04-16 at 12 38 40 PM

Packaged Policy List View

Screen Shot 2021-04-16 at 10 23 49 AM

Agent Policy Detail View

Screen Shot 2021-04-16 at 12 21 42 PM
### Checklist Delete any items that are not applicable to this PR. - [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/master/packages/kbn-i18n/README.md) Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../fleet/components/link_and_revision.tsx | 75 +++++++++++-------- .../sections/agent_policy/list_page/index.tsx | 14 +--- .../agent_details/agent_details_overview.tsx | 13 +--- .../sections/agents/agent_list_page/index.tsx | 46 +++--------- .../detail/policies/package_policies.tsx | 31 +------- .../translations/translations/ja-JP.json | 2 - .../translations/translations/zh-CN.json | 3 +- 7 files changed, 64 insertions(+), 120 deletions(-) diff --git a/x-pack/plugins/fleet/public/applications/fleet/components/link_and_revision.tsx b/x-pack/plugins/fleet/public/applications/fleet/components/link_and_revision.tsx index 071a9dc5943b2..41ef63b23b564 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/components/link_and_revision.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/components/link_and_revision.tsx @@ -5,43 +5,54 @@ * 2.0. */ -import { EuiFlexGroup, EuiFlexItem, EuiLink, EuiText } from '@elastic/eui'; +import { EuiFlexGroup, EuiFlexItem, EuiIconTip, EuiLink, EuiText } from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n/react'; import type { CSSProperties } from 'react'; import React, { memo } from 'react'; -import type { EuiLinkProps } from '@elastic/eui/src/components/link/link'; +import type { AgentPolicy } from '../../../../common/types'; +import { useLink } from '../hooks'; const MIN_WIDTH: CSSProperties = { minWidth: 0 }; const NO_WRAP_WHITE_SPACE: CSSProperties = { whiteSpace: 'nowrap' }; -export type LinkAndRevisionProps = EuiLinkProps & { - revision?: string | number; -}; - -/** - * Components shows a link for a given value along with a revision number to its right. The display - * value is truncated if it is longer than the width of where it is displayed, while the revision - * always remain visible - */ -export const LinkAndRevision = memo( - ({ revision, className, ...euiLinkProps }) => { - return ( - - - +export const AgentPolicySummaryLine = memo<{ policy: AgentPolicy }>(({ policy }) => { + const { getHref } = useLink(); + const { name, id, revision, is_managed: isManaged } = policy; + return ( + + + + {name || id} + + + {isManaged && ( + + )} + {revision && ( + + + + - {revision && ( - - - - - - )} - - ); - } -); + )} + + ); +}); diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/list_page/index.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/list_page/index.tsx index 55788da05bcea..48b9118d11566 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/list_page/index.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/list_page/index.tsx @@ -36,7 +36,7 @@ import { useUrlParams, useBreadcrumbs, } from '../../../hooks'; -import { LinkAndRevision, SearchBar } from '../../../components'; +import { AgentPolicySummaryLine, SearchBar } from '../../../components'; import { LinkedAgentCount, AgentPolicyActionMenu } from '../components'; import { CreateAgentPolicyFlyout } from './components'; @@ -74,7 +74,7 @@ const AgentPolicyListPageLayout: React.FunctionComponent = ({ children }) => ( export const AgentPolicyListPage: React.FunctionComponent<{}> = () => { useBreadcrumbs('policies_list'); - const { getHref, getPath } = useLink(); + const { getPath } = useLink(); const hasWriteCapabilites = useCapabilities().write; const { agents: { enabled: isFleetEnabled }, @@ -132,13 +132,7 @@ export const AgentPolicyListPage: React.FunctionComponent<{}> = () => { }), width: '20%', render: (name: string, agentPolicy: AgentPolicy) => ( - - {name || agentPolicy.id} - + ), }, { @@ -205,7 +199,7 @@ export const AgentPolicyListPage: React.FunctionComponent<{}> = () => { } return cols; - }, [getHref, isFleetEnabled, resendRequest]); + }, [isFleetEnabled, resendRequest]); const createAgentPolicyButton = useMemo( () => ( diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_details/agent_details_overview.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_details/agent_details_overview.tsx index 482861b3db9e8..bf8385712dd23 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_details/agent_details_overview.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_details/agent_details_overview.tsx @@ -21,10 +21,10 @@ import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n/react'; import type { Agent, AgentPolicy } from '../../../../../types'; -import { useKibanaVersion, useLink } from '../../../../../hooks'; +import { useKibanaVersion } from '../../../../../hooks'; import { isAgentUpgradeable } from '../../../../../services'; import { AgentPolicyPackageBadges } from '../../../components/agent_policy_package_badges'; -import { LinkAndRevision } from '../../../../../components'; +import { AgentPolicySummaryLine } from '../../../../../components'; // Allows child text to be truncated const FlexItemWithMinWidth = styled(EuiFlexItem)` @@ -35,7 +35,6 @@ export const AgentDetailsOverviewSection: React.FunctionComponent<{ agent: Agent; agentPolicy?: AgentPolicy; }> = memo(({ agent, agentPolicy }) => { - const { getHref } = useLink(); const kibanaVersion = useKibanaVersion(); return ( @@ -52,13 +51,7 @@ export const AgentDetailsOverviewSection: React.FunctionComponent<{ defaultMessage: 'Agent policy', }), description: agentPolicy ? ( - - {agentPolicy.name || agentPolicy.id} - + ) : ( agent.policy_id || '-' ), diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/index.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/index.tsx index 10f35aab44c5a..6dd1b8a9693e8 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/index.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/index.tsx @@ -37,7 +37,7 @@ import { useKibanaVersion, useStartServices, } from '../../../hooks'; -import { ContextMenuActions } from '../../../components'; +import { AgentPolicySummaryLine, ContextMenuActions } from '../../../components'; import { AgentStatusKueryHelper, isAgentUpgradeable } from '../../../services'; import { AGENT_SAVED_OBJECT_TYPE } from '../../../constants'; import { @@ -374,48 +374,24 @@ export const AgentListPage: React.FunctionComponent<{}> = () => { defaultMessage: 'Agent policy', }), render: (policyId: string, agent: Agent) => { - const policyName = agentPoliciesIndexedById[policyId]?.name; + const agentPolicy = agentPoliciesIndexedById[policyId]; + const showWarning = agent.policy_revision && agentPolicy?.revision > agent.policy_revision; + return ( - - - {policyName || policyId} - - - {agent.policy_revision && ( + + {showWarning && ( - + + +   )} - {agent.policy_id && - agent.policy_revision && - agentPoliciesIndexedById[agent.policy_id] && - agentPoliciesIndexedById[agent.policy_id].revision > agent.policy_revision && ( - - - -   - {true && ( - <> - - - )} - - - )} ); }, diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/epm/screens/detail/policies/package_policies.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/epm/screens/detail/policies/package_policies.tsx index 94b4b748cb1bd..b14551098e688 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/epm/screens/detail/policies/package_policies.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/epm/screens/detail/policies/package_policies.tsx @@ -5,7 +5,6 @@ * 2.0. */ -import type { ReactNode } from 'react'; import React, { memo, useCallback, useMemo } from 'react'; import { Redirect } from 'react-router-dom'; import type { CriteriaWithPagination, EuiTableFieldDataColumnType } from '@elastic/eui'; @@ -16,8 +15,7 @@ import { FormattedRelative, FormattedMessage } from '@kbn/i18n/react'; import { InstallStatus } from '../../../../../types'; import { useLink, useUrlPagination } from '../../../../../hooks'; import { PACKAGE_POLICY_SAVED_OBJECT_TYPE } from '../../../../../constants'; -import type { LinkAndRevisionProps } from '../../../../../components'; -import { LinkAndRevision } from '../../../../../components'; +import { AgentPolicySummaryLine } from '../../../../../components'; import { LinkedAgentCount } from '../../../../../components/linked_agent_count'; import { useGetPackageInstallStatus } from '../../../hooks'; @@ -42,27 +40,6 @@ const IntegrationDetailsLink = memo<{ ); }); - -const AgentPolicyDetailLink = memo<{ - agentPolicyId: string; - revision: LinkAndRevisionProps['revision']; - children: ReactNode; -}>(({ agentPolicyId, revision, children }) => { - const { getHref } = useLink(); - - return ( - - {children} - - ); -}); - interface PackagePoliciesPanelProps { name: string; version: string; @@ -112,11 +89,7 @@ export const PackagePoliciesPage = ({ name, version }: PackagePoliciesPanelProps }), truncateText: true, render(id, { agentPolicy }) { - return ( - - {agentPolicy.name ?? id} - - ); + return ; }, }, { diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index 29f162a005a98..ec604eaf255cb 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -8248,7 +8248,6 @@ "xpack.fleet.agentList.policyColumnTitle": "エージェントポリシー", "xpack.fleet.agentList.policyFilterText": "エージェントポリシー", "xpack.fleet.agentList.reassignActionText": "新しいポリシーに割り当てる", - "xpack.fleet.agentList.revisionNumber": "rev. {revNumber}", "xpack.fleet.agentList.showUpgradeableFilterLabel": "アップグレードが利用可能です", "xpack.fleet.agentList.statusColumnTitle": "ステータス", "xpack.fleet.agentList.statusFilterText": "ステータス", @@ -8666,7 +8665,6 @@ "xpack.fleet.policyForm.generalSettingsGroupDescription": "エージェントポリシーの名前と説明を選択してください。", "xpack.fleet.policyForm.generalSettingsGroupTitle": "一般設定", "xpack.fleet.policyForm.unableToDeleteDefaultPolicyText": "デフォルトポリシーは削除できません", - "xpack.fleet.policyNameLink.revisionNumber": "rev. {revNumber}", "xpack.fleet.securityRequiredErrorMessage": "Fleet を使用するには、Kibana と Elasticsearch でセキュリティを有効にする必要があります。", "xpack.fleet.securityRequiredErrorTitle": "セキュリティが有効ではありません", "xpack.fleet.settings.additionalYamlConfig": "Elasticsearch出力構成", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index 0553e3c195532..729e32e11a5ff 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -8323,7 +8323,6 @@ "xpack.fleet.agentList.policyColumnTitle": "代理策略", "xpack.fleet.agentList.policyFilterText": "代理策略", "xpack.fleet.agentList.reassignActionText": "分配到新策略", - "xpack.fleet.agentList.revisionNumber": "修订版 {revNumber}", "xpack.fleet.agentList.showUpgradeableFilterLabel": "升级可用", "xpack.fleet.agentList.statusColumnTitle": "状态", "xpack.fleet.agentList.statusFilterText": "状态", @@ -8751,7 +8750,7 @@ "xpack.fleet.policyForm.generalSettingsGroupDescription": "为您的代理策略选择名称和描述。", "xpack.fleet.policyForm.generalSettingsGroupTitle": "常规设置", "xpack.fleet.policyForm.unableToDeleteDefaultPolicyText": "默认策略无法删除", - "xpack.fleet.policyNameLink.revisionNumber": "修订版 {revNumber}", + "xpack.fleet.agentPolicySummaryLine.revisionNumber": "修订版 {revNumber}", "xpack.fleet.securityRequiredErrorMessage": "必须在 Kibana 和 Elasticsearch 启用安全性,才能使用 Fleet。", "xpack.fleet.securityRequiredErrorTitle": "安全性未启用", "xpack.fleet.settings.additionalYamlConfig": "Elasticsearch 输出配置", From 0ea0e40331fa85a88e695779f9e1669fe563a9f9 Mon Sep 17 00:00:00 2001 From: Joe Reuter Date: Mon, 19 Apr 2021 13:49:26 +0200 Subject: [PATCH 06/13] [Lens] Better defaults for top values odering (#97099) --- .../indexpattern_suggestions.test.tsx | 14 ++- .../operations/definitions/index.ts | 2 +- .../operations/definitions/terms/index.tsx | 50 ++++++++--- .../definitions/terms/terms.test.tsx | 85 +++++++++++++++++-- .../operations/layer_helpers.test.ts | 52 +++++++++++- .../operations/layer_helpers.ts | 12 ++- .../test/functional/apps/lens/chart_data.ts | 16 ++-- 7 files changed, 198 insertions(+), 33 deletions(-) diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/indexpattern_suggestions.test.tsx b/x-pack/plugins/lens/public/indexpattern_datasource/indexpattern_suggestions.test.tsx index c4ebcab85e722..ccae659934ba7 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/indexpattern_suggestions.test.tsx +++ b/x-pack/plugins/lens/public/indexpattern_datasource/indexpattern_suggestions.test.tsx @@ -965,7 +965,19 @@ describe('IndexPattern Data Source suggestions', () => { currentLayer: { ...initialState.layers.currentLayer, columns: { - cola: initialState.layers.currentLayer.columns.cola, + cola: { + dataType: 'string', + isBucketed: true, + sourceField: 'source', + label: 'values of source', + customLabel: true, + operationType: 'terms', + params: { + orderBy: { type: 'alphabetical', fallback: false }, + orderDirection: 'asc', + size: 5, + }, + }, }, columnOrder: ['cola'], }, diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/index.ts b/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/index.ts index 0b63dc6ece974..37bd64251ed81 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/index.ts +++ b/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/index.ts @@ -179,7 +179,7 @@ interface BaseOperationDefinitionProps { columns: Record ) => string; /** - * This function is called if another column in the same layer changed or got removed. + * This function is called if another column in the same layer changed or got added/removed. * Can be used to update references to other columns (e.g. for sorting). * Based on the current column and the other updated columns, this function has to * return an updated column. If not implemented, the `id` function is used instead. diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/terms/index.tsx b/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/terms/index.tsx index 857e8b3605cfc..d226fe6f2a745 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/terms/index.tsx +++ b/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/terms/index.tsx @@ -57,7 +57,9 @@ export interface TermsIndexPatternColumn extends FieldBasedIndexPatternColumn { operationType: 'terms'; params: { size: number; - orderBy: { type: 'alphabetical' } | { type: 'column'; columnId: string }; + // if order is alphabetical, the `fallback` flag indicates whether it became alphabetical because there wasn't + // another option or whether the user explicitly chose to make it alphabetical. + orderBy: { type: 'alphabetical'; fallback?: boolean } | { type: 'column'; columnId: string }; orderDirection: 'asc' | 'desc'; otherBucket?: boolean; missingBucket?: boolean; @@ -123,7 +125,7 @@ export const termsOperation: OperationDefinition { const columns = layer.columns; const currentColumn = columns[thisColumnId] as TermsIndexPatternColumn; - if (currentColumn.params.orderBy.type === 'column') { + if (currentColumn.params.orderBy.type === 'column' || currentColumn.params.orderBy.fallback) { // check whether the column is still there and still a metric - const columnSortedBy = columns[currentColumn.params.orderBy.columnId]; - if (!columnSortedBy || !isSortableByColumn(layer, changedColumnId)) { + const columnSortedBy = + currentColumn.params.orderBy.type === 'column' + ? columns[currentColumn.params.orderBy.columnId] + : undefined; + if ( + !columnSortedBy || + (currentColumn.params.orderBy.type === 'column' && + !isSortableByColumn(layer, currentColumn.params.orderBy.columnId)) + ) { + // check whether we can find another metric column to sort by + const existingMetricColumn = Object.entries(layer.columns) + .filter(([columnId]) => isSortableByColumn(layer, columnId)) + .map(([id]) => id)[0]; return { ...currentColumn, params: { ...currentColumn.params, - orderBy: { type: 'alphabetical' }, - orderDirection: 'asc', + orderBy: existingMetricColumn + ? { type: 'column', columnId: existingMetricColumn } + : { type: 'alphabetical', fallback: true }, + orderDirection: existingMetricColumn ? 'desc' : 'asc', }, }; } @@ -197,7 +212,7 @@ export const termsOperation: OperationDefinition) => + onChange={(e: React.ChangeEvent) => { + const newOrderByValue = fromValue(e.target.value); + const updatedLayer = updateColumnParam({ + layer, + columnId, + paramName: 'orderBy', + value: newOrderByValue, + }); updateLayer( updateColumnParam({ - layer, + layer: updatedLayer, columnId, - paramName: 'orderBy', - value: fromValue(e.target.value), + paramName: 'orderDirection', + value: newOrderByValue.type === 'alphabetical' ? 'asc' : 'desc', }) - ) - } + ); + }} aria-label={i18n.translate('xpack.lens.indexPattern.terms.orderBy', { defaultMessage: 'Rank by', })} diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/terms/terms.test.tsx b/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/terms/terms.test.tsx index f75bec141ccae..2e7307f6a2ec4 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/terms/terms.test.tsx +++ b/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/terms/terms.test.tsx @@ -358,7 +358,7 @@ describe('terms', () => { }, }); expect(termsColumn.params).toEqual( - expect.objectContaining({ orderBy: { type: 'alphabetical' } }) + expect.objectContaining({ orderBy: { type: 'alphabetical', fallback: true } }) ); }); @@ -469,7 +469,7 @@ describe('terms', () => { ); expect(updatedColumn.params).toEqual( expect.objectContaining({ - orderBy: { type: 'alphabetical' }, + orderBy: { type: 'alphabetical', fallback: true }, }) ); }); @@ -516,7 +516,7 @@ describe('terms', () => { ); expect(updatedColumn.params).toEqual( expect.objectContaining({ - orderBy: { type: 'alphabetical' }, + orderBy: { type: 'alphabetical', fallback: true }, }) ); }); @@ -548,7 +548,7 @@ describe('terms', () => { ); expect(termsColumn.params).toEqual( expect.objectContaining({ - orderBy: { type: 'alphabetical' }, + orderBy: { type: 'alphabetical', fallback: true }, }) ); }); @@ -592,7 +592,81 @@ describe('terms', () => { ); expect(termsColumn.params).toEqual( expect.objectContaining({ - orderBy: { type: 'alphabetical' }, + orderBy: { type: 'alphabetical', fallback: true }, + }) + ); + }); + + it('should set order to ascending if falling back to alphabetical', () => { + const termsColumn = termsOperation.onOtherColumnChanged!( + { + columns: { + col2: { + label: 'Top value of category', + dataType: 'string', + isBucketed: true, + + // Private + operationType: 'terms', + params: { + orderBy: { type: 'column', columnId: 'col1' }, + size: 3, + orderDirection: 'desc', + }, + sourceField: 'category', + }, + }, + columnOrder: [], + indexPatternId: '', + }, + 'col2', + 'col1' + ); + expect(termsColumn.params).toEqual( + expect.objectContaining({ + orderDirection: 'asc', + }) + ); + }); + + it('should switch back to descending metric sorting if alphabetical sorting was applied as fallback', () => { + const initialColumn: TermsIndexPatternColumn = { + label: 'Top value of category', + dataType: 'string', + isBucketed: true, + + // Private + operationType: 'terms', + params: { + orderBy: { type: 'alphabetical', fallback: true }, + size: 3, + orderDirection: 'asc', + }, + sourceField: 'category', + }; + const updatedColumn = termsOperation.onOtherColumnChanged!( + { + indexPatternId: '', + columnOrder: [], + columns: { + col2: initialColumn, + col1: { + label: 'Count', + dataType: 'number', + isBucketed: false, + sourceField: 'Records', + operationType: 'count', + }, + }, + }, + 'col2', + 'col1' + ); + + expect(updatedColumn.params).toEqual( + expect.objectContaining({ + orderBy: { type: 'column', columnId: 'col1' }, + orderDirection: 'desc', }) ); }); @@ -774,6 +848,7 @@ describe('terms', () => { type: 'column', columnId: 'col2', }, + orderDirection: 'desc', }, }, }, diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/operations/layer_helpers.test.ts b/x-pack/plugins/lens/public/indexpattern_datasource/operations/layer_helpers.test.ts index 34e2eb2c90122..d3ca70c086cb5 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/operations/layer_helpers.test.ts +++ b/x-pack/plugins/lens/public/indexpattern_datasource/operations/layer_helpers.test.ts @@ -352,6 +352,50 @@ describe('state_helpers', () => { ).toEqual(expect.objectContaining({ columnOrder: ['col1', 'col2'] })); }); + it('should call onOtherColumn changed on existing columns', () => { + expect( + insertNewColumn({ + layer: { + indexPatternId: '1', + columnOrder: ['col1'], + columns: { + col1: { + label: 'Top values of source', + dataType: 'string', + isBucketed: true, + + // Private + operationType: 'terms', + sourceField: 'source', + params: { + orderBy: { type: 'alphabetical', fallback: true }, + orderDirection: 'asc', + size: 5, + }, + }, + }, + }, + columnId: 'col2', + indexPattern, + op: 'sum', + field: indexPattern.fields[2], + visualizationGroups: [], + }) + ).toEqual( + expect.objectContaining({ + columns: expect.objectContaining({ + col1: expect.objectContaining({ + params: { + orderBy: { columnId: 'col2', type: 'column' }, + orderDirection: 'desc', + size: 5, + }, + }), + }), + }) + ); + }); + it('should allow multiple metrics', () => { expect( insertNewColumn({ @@ -908,7 +952,11 @@ describe('state_helpers', () => { columns: { col1: { ...termsColumn, - params: { orderBy: { type: 'alphabetical' }, orderDirection: 'asc', size: 5 }, + params: { + orderBy: { type: 'alphabetical', fallback: true }, + orderDirection: 'asc', + size: 5, + }, }, id1: expect.objectContaining({ dataType: 'number', @@ -1624,7 +1672,7 @@ describe('state_helpers', () => { ...termsColumn, params: { ...termsColumn.params, - orderBy: { type: 'alphabetical' }, + orderBy: { type: 'alphabetical', fallback: true }, orderDirection: 'asc', }, }, diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/operations/layer_helpers.ts b/x-pack/plugins/lens/public/indexpattern_datasource/operations/layer_helpers.ts index 1661e5de8248e..bbe2ca4cd3d61 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/operations/layer_helpers.ts +++ b/x-pack/plugins/lens/public/indexpattern_datasource/operations/layer_helpers.ts @@ -714,7 +714,11 @@ function addBucket( columns: { ...layer.columns, [addedColumnId]: column }, columnOrder: updatedColumnOrder, }; - return { ...tempLayer, columnOrder: getColumnOrder(tempLayer) }; + return { + ...tempLayer, + columns: adjustColumnReferencesForChangedColumn(tempLayer, addedColumnId), + columnOrder: getColumnOrder(tempLayer), + }; } export function reorderByGroups( @@ -766,7 +770,11 @@ function addMetric( [addedColumnId]: column, }, }; - return { ...tempLayer, columnOrder: getColumnOrder(tempLayer) }; + return { + ...tempLayer, + columnOrder: getColumnOrder(tempLayer), + columns: adjustColumnReferencesForChangedColumn(tempLayer, addedColumnId), + }; } export function getMetricOperationTypes(field: IndexPatternField) { diff --git a/x-pack/test/functional/apps/lens/chart_data.ts b/x-pack/test/functional/apps/lens/chart_data.ts index c4db59c020f13..887906ce2205b 100644 --- a/x-pack/test/functional/apps/lens/chart_data.ts +++ b/x-pack/test/functional/apps/lens/chart_data.ts @@ -37,19 +37,19 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); const expectedData = [ - { x: '0.53.251.53', y: 4624.75 }, - { x: '0.108.3.2', y: 7359.41 }, - { x: '0.209.80.244', y: 6169.9 }, - { x: '0.228.1.71', y: 7092.8 }, - { x: '0.254.91.215', y: 3835.58 }, - { x: '__other__', y: 5727.24 }, + { x: '97.220.3.248', y: 19755 }, + { x: '169.228.188.120', y: 18994 }, + { x: '78.83.247.30', y: 17246 }, + { x: '226.82.228.233', y: 15687 }, + { x: '93.28.27.24', y: 15614.33 }, + { x: '__other__', y: 5722.77 }, ]; function assertMatchesExpectedData(state: DebugState) { expect( state.bars![0].bars.map((bar) => ({ x: bar.x, - y: Math.round(bar.y * 100) / 100, + y: Math.floor(bar.y * 100) / 100, })) ).to.eql(expectedData); } @@ -94,7 +94,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { expect(terms.map((term) => (term === 'Other' ? '__other__' : term))).to.eql( expectedData.map(({ x }) => x) ); - expect(values.map((value) => Math.round(100 * Number(value.replace(',', ''))) / 100)).to.eql( + expect(values.map((value) => Math.floor(100 * Number(value.replace(',', ''))) / 100)).to.eql( expectedData.map(({ y }) => y) ); }); From a021946e85bee62dd2d68b1da4b1c34cc852cdc2 Mon Sep 17 00:00:00 2001 From: Joe Reuter Date: Mon, 19 Apr 2021 13:52:49 +0200 Subject: [PATCH 07/13] [Lens] Reload on runtime edit (#97161) --- .../lens/public/app_plugin/app.test.tsx | 23 ++++++++++++++++++- x-pack/plugins/lens/public/app_plugin/app.tsx | 20 +++++++++++++++- .../indexpattern_datasource/datapanel.tsx | 2 ++ 3 files changed, 43 insertions(+), 2 deletions(-) diff --git a/x-pack/plugins/lens/public/app_plugin/app.test.tsx b/x-pack/plugins/lens/public/app_plugin/app.test.tsx index b7dbf1bbe4d87..a4137aa0407ba 100644 --- a/x-pack/plugins/lens/public/app_plugin/app.test.tsx +++ b/x-pack/plugins/lens/public/app_plugin/app.test.tsx @@ -6,7 +6,7 @@ */ import React from 'react'; -import { Observable } from 'rxjs'; +import { Observable, Subject } from 'rxjs'; import { ReactWrapper } from 'enzyme'; import { act } from 'react-dom/test-utils'; import { App } from './app'; @@ -77,6 +77,8 @@ function createMockFrame(): jest.Mocked { }; } +const sessionIdSubject = new Subject(); + function createMockSearchService() { let sessionIdCounter = 1; return { @@ -84,6 +86,7 @@ function createMockSearchService() { start: jest.fn(() => `sessionId-${sessionIdCounter++}`), clear: jest.fn(), getSessionId: jest.fn(() => `sessionId-${sessionIdCounter}`), + getSession$: jest.fn(() => sessionIdSubject.asObservable()), }, }; } @@ -1328,6 +1331,24 @@ describe('Lens App', () => { ); }); + it('re-renders the frame if session id changes from the outside', async () => { + const services = makeDefaultServices(); + const { frame } = mountWith({ props: undefined, services }); + + act(() => { + sessionIdSubject.next('new-session-id'); + }); + await act(async () => { + await new Promise((r) => setTimeout(r, 0)); + }); + expect(frame.mount).toHaveBeenCalledWith( + expect.any(Element), + expect.objectContaining({ + searchSessionId: `new-session-id`, + }) + ); + }); + it('updates the searchSessionId when the active saved query is cleared', () => { const { component, frame, services } = mountWith({}); act(() => diff --git a/x-pack/plugins/lens/public/app_plugin/app.tsx b/x-pack/plugins/lens/public/app_plugin/app.tsx index 8caa1737c00ad..e30fcda40276c 100644 --- a/x-pack/plugins/lens/public/app_plugin/app.tsx +++ b/x-pack/plugins/lens/public/app_plugin/app.tsx @@ -14,7 +14,7 @@ import { Toast } from 'kibana/public'; import { VisualizeFieldContext } from 'src/plugins/ui_actions/public'; import { Datatable } from 'src/plugins/expressions/public'; import { EuiBreadcrumb } from '@elastic/eui'; -import { finalize, switchMap, tap } from 'rxjs/operators'; +import { delay, finalize, switchMap, tap } from 'rxjs/operators'; import { downloadMultipleAs } from '../../../../../src/plugins/share/public'; import { createKbnUrlStateStorage, @@ -221,11 +221,29 @@ export function App({ kbnUrlStateStorage ); + const sessionSubscription = data.search.session + .getSession$() + // wait for a tick to filter/timerange subscribers the chance to update the session id in the state + .pipe(delay(0)) + // then update if it didn't get updated yet + .subscribe((newSessionId) => { + if (newSessionId) { + setState((prevState) => { + if (prevState.searchSessionId !== newSessionId) { + return { ...prevState, searchSessionId: newSessionId }; + } else { + return prevState; + } + }); + } + }); + return () => { stopSyncingQueryServiceStateWithUrl(); filterSubscription.unsubscribe(); timeSubscription.unsubscribe(); autoRefreshSubscription.unsubscribe(); + sessionSubscription.unsubscribe(); }; }, [ data.query.filterManager, diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/datapanel.tsx b/x-pack/plugins/lens/public/indexpattern_datasource/datapanel.tsx index 2cad77b003454..1b7c8d64de36e 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/datapanel.tsx +++ b/x-pack/plugins/lens/public/indexpattern_datasource/datapanel.tsx @@ -503,6 +503,8 @@ export const InnerIndexPatternDataPanel = function InnerIndexPatternDataPanel({ patterns: [currentIndexPattern.id], }); onUpdateIndexPattern(newlyMappedIndexPattern[currentIndexPattern.id]); + // start a new session so all charts are refreshed + data.search.session.start(); }, [data, currentIndexPattern, onUpdateIndexPattern]); const editField = useMemo( From ce6d2f5a50cbff4c304be023f1641be1e5fc0298 Mon Sep 17 00:00:00 2001 From: Joe Reuter Date: Mon, 19 Apr 2021 14:06:13 +0200 Subject: [PATCH 08/13] improve custom label handling (#97219) --- .../dimension_panel/dimension_editor.tsx | 7 +++- .../dimension_panel/dimension_panel.test.tsx | 38 +++++++++++++++++++ 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/dimension_panel/dimension_editor.tsx b/x-pack/plugins/lens/public/indexpattern_datasource/dimension_panel/dimension_editor.tsx index 1fc755ec489c7..2c503a7bd6967 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/dimension_panel/dimension_editor.tsx +++ b/x-pack/plugins/lens/public/indexpattern_datasource/dimension_panel/dimension_editor.tsx @@ -542,7 +542,12 @@ export function DimensionEditor(props: DimensionEditorProps) { [columnId]: { ...selectedColumn, label: value, - customLabel: true, + customLabel: + operationDefinitionMap[selectedColumn.operationType].getDefaultLabel( + selectedColumn, + state.indexPatterns[state.layers[layerId].indexPatternId], + state.layers[layerId].columns + ) !== value, }, }, }, diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/dimension_panel/dimension_panel.test.tsx b/x-pack/plugins/lens/public/indexpattern_datasource/dimension_panel/dimension_panel.test.tsx index 7d1644d07d2aa..5e79fde0fa8fa 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/dimension_panel/dimension_panel.test.tsx +++ b/x-pack/plugins/lens/public/indexpattern_datasource/dimension_panel/dimension_panel.test.tsx @@ -683,6 +683,44 @@ describe('IndexPatternDimensionEditorPanel', () => { ); }); + it('should remove customLabel flag if label is set to default', () => { + wrapper = mount( + + ); + + act(() => { + wrapper + .find('input[data-test-subj="indexPattern-label-edit"]') + .simulate('change', { target: { value: 'Maximum of bytes' } }); + }); + + expect(setState).toHaveBeenCalledWith({ + ...state, + layers: { + first: { + ...state.layers.first, + columns: { + ...state.layers.first.columns, + col1: expect.objectContaining({ + label: 'Maximum of bytes', + customLabel: false, + // Other parts of this don't matter for this test + }), + }, + }, + }, + }); + }); + describe('transient invalid state', () => { it('should set the state if selecting an operation incompatible with the current field', () => { wrapper = mount(); From 5035230190e2bfa351a697d4afc28f67cb39ea98 Mon Sep 17 00:00:00 2001 From: Maja Grubic Date: Mon, 19 Apr 2021 13:10:24 +0100 Subject: [PATCH 09/13] [Discover] Sort option: Introduce format parameter (#96774) * [Discover] Updating a functional test * [Discover] Context view: add support for date nanos custom * Remove unnecessary change to a functional test * Fix failing unit tests * Remove unnecessary intialization * Add new type definition to data plugin * Update docs * Simplify return statement * Removing unnecessary type export Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- ...-plugin-plugins-data-public.esquerysortvalue.md | 2 +- .../data/common/search/search_source/types.ts | 10 +++++++++- src/plugins/data/public/public.api.md | 3 ++- .../application/angular/context/api/_stubs.js | 2 +- .../context/api/context.predecessors.test.js | 5 ++++- .../angular/context/api/context.successors.test.js | 5 ++++- .../application/angular/context/api/context.ts | 2 +- .../angular/context/api/utils/get_es_query_sort.ts | 14 ++++++++++++-- .../apps/context/_date_nanos_custom_timestamp.js | 7 +++---- 9 files changed, 37 insertions(+), 13 deletions(-) diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.esquerysortvalue.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.esquerysortvalue.md index 83762c22f0f82..15f45532cce2f 100644 --- a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.esquerysortvalue.md +++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.esquerysortvalue.md @@ -7,5 +7,5 @@ Signature: ```typescript -export declare type EsQuerySortValue = Record; +export declare type EsQuerySortValue = Record; ``` diff --git a/src/plugins/data/common/search/search_source/types.ts b/src/plugins/data/common/search/search_source/types.ts index 99f3f67a5e257..507fda0dc9e47 100644 --- a/src/plugins/data/common/search/search_source/types.ts +++ b/src/plugins/data/common/search/search_source/types.ts @@ -42,12 +42,20 @@ export enum SortDirection { desc = 'desc', } +export interface SortDirectionFormat { + order: SortDirection; + format?: string; +} + export interface SortDirectionNumeric { order: SortDirection; numeric_type?: 'double' | 'long' | 'date' | 'date_nanos'; } -export type EsQuerySortValue = Record; +export type EsQuerySortValue = Record< + string, + SortDirection | SortDirectionNumeric | SortDirectionFormat +>; interface SearchField { [key: string]: SearchFieldValue; diff --git a/src/plugins/data/public/public.api.md b/src/plugins/data/public/public.api.md index 0dd06691d68bb..dc138b7347d04 100644 --- a/src/plugins/data/public/public.api.md +++ b/src/plugins/data/public/public.api.md @@ -832,10 +832,11 @@ export interface EsQueryConfig { } // Warning: (ae-forgotten-export) The symbol "SortDirectionNumeric" needs to be exported by the entry point index.d.ts +// Warning: (ae-forgotten-export) The symbol "SortDirectionFormat" needs to be exported by the entry point index.d.ts // Warning: (ae-missing-release-tag) "EsQuerySortValue" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) -export type EsQuerySortValue = Record; +export type EsQuerySortValue = Record; // Warning: (ae-forgotten-export) The symbol "ExpressionTypeDefinition" needs to be exported by the entry point index.d.ts // Warning: (ae-forgotten-export) The symbol "name" needs to be exported by the entry point index.d.ts diff --git a/src/plugins/discover/public/application/angular/context/api/_stubs.js b/src/plugins/discover/public/application/angular/context/api/_stubs.js index 3baa7424e35d7..6930e96a0d411 100644 --- a/src/plugins/discover/public/application/angular/context/api/_stubs.js +++ b/src/plugins/discover/public/application/angular/context/api/_stubs.js @@ -66,7 +66,7 @@ export function createContextSearchSourceStub(hits, timeField = '@timestamp') { const lastQuery = searchSourceStub.setField.withArgs('query').lastCall.args[1]; const timeRange = lastQuery.query.bool.must.constant_score.filter.range[timeField]; const lastSort = searchSourceStub.setField.withArgs('sort').lastCall.args[1]; - const sortDirection = lastSort[0][timeField]; + const sortDirection = lastSort[0][timeField].order; const sortFunction = sortDirection === 'asc' ? (first, second) => first[timeField] - second[timeField] diff --git a/src/plugins/discover/public/application/angular/context/api/context.predecessors.test.js b/src/plugins/discover/public/application/angular/context/api/context.predecessors.test.js index ab47111f70e92..9f5e62da398d2 100644 --- a/src/plugins/discover/public/application/angular/context/api/context.predecessors.test.js +++ b/src/plugins/discover/public/application/angular/context/api/context.predecessors.test.js @@ -211,7 +211,10 @@ describe('context app', function () { [] ).then(() => { expect( - mockSearchSource.setField.calledWith('sort', [{ '@timestamp': 'asc' }, { _doc: 'asc' }]) + mockSearchSource.setField.calledWith('sort', [ + { '@timestamp': { order: 'asc', format: 'strict_date_optional_time' } }, + { _doc: 'asc' }, + ]) ).toBe(true); }); }); diff --git a/src/plugins/discover/public/application/angular/context/api/context.successors.test.js b/src/plugins/discover/public/application/angular/context/api/context.successors.test.js index d4f3754f3d0a5..4936c937aa2fa 100644 --- a/src/plugins/discover/public/application/angular/context/api/context.successors.test.js +++ b/src/plugins/discover/public/application/angular/context/api/context.successors.test.js @@ -215,7 +215,10 @@ describe('context app', function () { [] ).then(() => { expect( - mockSearchSource.setField.calledWith('sort', [{ '@timestamp': 'desc' }, { _doc: 'desc' }]) + mockSearchSource.setField.calledWith('sort', [ + { '@timestamp': { order: 'desc', format: 'strict_date_optional_time' } }, + { _doc: 'desc' }, + ]) ).toBe(true); }); }); diff --git a/src/plugins/discover/public/application/angular/context/api/context.ts b/src/plugins/discover/public/application/angular/context/api/context.ts index 43f6e83d286b3..820e37d754ef2 100644 --- a/src/plugins/discover/public/application/angular/context/api/context.ts +++ b/src/plugins/discover/public/application/angular/context/api/context.ts @@ -87,7 +87,7 @@ function fetchContextProvider(indexPatterns: IndexPatternsContract, useNewFields useNewFieldsApi ); - const sort = getEsQuerySort(timeField, tieBreakerField, sortDirToApply); + const sort = getEsQuerySort(timeField, tieBreakerField, sortDirToApply, nanos); const hits = await fetchHitsInInterval( searchSource, diff --git a/src/plugins/discover/public/application/angular/context/api/utils/get_es_query_sort.ts b/src/plugins/discover/public/application/angular/context/api/utils/get_es_query_sort.ts index a560315dc04a4..2144d2f1cd7fd 100644 --- a/src/plugins/discover/public/application/angular/context/api/utils/get_es_query_sort.ts +++ b/src/plugins/discover/public/application/angular/context/api/utils/get_es_query_sort.ts @@ -14,11 +14,21 @@ import { EsQuerySortValue, SortDirection } from '../../../../../kibana_services' * @param timeField * @param tieBreakerField * @param sortDir + * @param nanos */ export function getEsQuerySort( timeField: string, tieBreakerField: string, - sortDir: SortDirection + sortDir: SortDirection, + nanos?: string ): [EsQuerySortValue, EsQuerySortValue] { - return [{ [timeField]: sortDir }, { [tieBreakerField]: sortDir }]; + return [ + { + [timeField]: { + order: sortDir, + format: nanos ? 'strict_date_optional_time_nanos' : 'strict_date_optional_time', + }, + }, + { [tieBreakerField]: sortDir }, + ]; } diff --git a/test/functional/apps/context/_date_nanos_custom_timestamp.js b/test/functional/apps/context/_date_nanos_custom_timestamp.js index 8860204b058a5..b837c55d821ac 100644 --- a/test/functional/apps/context/_date_nanos_custom_timestamp.js +++ b/test/functional/apps/context/_date_nanos_custom_timestamp.js @@ -27,7 +27,6 @@ export default function ({ getService, getPageObjects }) { await kibanaServer.uiSettings.update({ 'context:defaultSize': `${TEST_DEFAULT_CONTEXT_SIZE}`, 'context:step': `${TEST_STEP_SIZE}`, - 'discover:searchFieldsFromSource': true, }); }); @@ -35,9 +34,9 @@ export default function ({ getService, getPageObjects }) { await PageObjects.context.navigateTo(TEST_INDEX_PATTERN, '1'); const actualRowsText = await docTable.getRowsText(); const expectedRowsText = [ - 'Oct 21, 2019 @ 08:30:04.828733000 -', - 'Oct 21, 2019 @ 00:30:04.828740000 -', - 'Oct 21, 2019 @ 00:30:04.828723000 -', + 'Oct 21, 2019 @ 08:30:04.828733000', + 'Oct 21, 2019 @ 00:30:04.828740000', + 'Oct 21, 2019 @ 00:30:04.828723000', ]; expect(actualRowsText).to.eql(expectedRowsText); }); From 4540a943d795245df9386dd222b9e1b63232e707 Mon Sep 17 00:00:00 2001 From: Joe Reuter Date: Mon, 19 Apr 2021 14:14:10 +0200 Subject: [PATCH 10/13] directly submit query (#97254) --- .../lens/public/app_plugin/app.test.tsx | 20 +++++++++++++++++++ x-pack/plugins/lens/public/app_plugin/app.tsx | 1 + 2 files changed, 21 insertions(+) diff --git a/x-pack/plugins/lens/public/app_plugin/app.test.tsx b/x-pack/plugins/lens/public/app_plugin/app.test.tsx index a4137aa0407ba..87000865850e1 100644 --- a/x-pack/plugins/lens/public/app_plugin/app.test.tsx +++ b/x-pack/plugins/lens/public/app_plugin/app.test.tsx @@ -1272,6 +1272,26 @@ describe('Lens App', () => { ); }); + it('updates the query if saved query is selected', () => { + const { component } = mountWith({}); + act(() => { + component.find(TopNavMenu).prop('onSavedQueryUpdated')!({ + id: '2', + attributes: { + title: 'new title', + description: '', + query: { query: 'abc:def', language: 'lucene' }, + }, + }); + }); + expect(TopNavMenu).toHaveBeenCalledWith( + expect.objectContaining({ + query: { query: 'abc:def', language: 'lucene' }, + }), + {} + ); + }); + it('clears all existing unpinned filters when the active saved query is cleared', () => { const { component, frame, services } = mountWith({}); act(() => diff --git a/x-pack/plugins/lens/public/app_plugin/app.tsx b/x-pack/plugins/lens/public/app_plugin/app.tsx index e30fcda40276c..f137047cfc871 100644 --- a/x-pack/plugins/lens/public/app_plugin/app.tsx +++ b/x-pack/plugins/lens/public/app_plugin/app.tsx @@ -692,6 +692,7 @@ export function App({ setState((s) => ({ ...s, savedQuery: { ...savedQuery }, // Shallow query for reference issues + query: savedQuery.attributes.query, })); }} onClearSavedQuery={() => { From 1b02152e185caf3cfb8d997558650a0d388be4a2 Mon Sep 17 00:00:00 2001 From: Marco Liberati Date: Mon, 19 Apr 2021 15:30:28 +0200 Subject: [PATCH 11/13] [Graph] Fix style for disabled fields when focused (#96780) Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../field_manager/_field_editor.scss | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/x-pack/plugins/graph/public/components/field_manager/_field_editor.scss b/x-pack/plugins/graph/public/components/field_manager/_field_editor.scss index 20773d98ce9c3..867899fc66391 100644 --- a/x-pack/plugins/graph/public/components/field_manager/_field_editor.scss +++ b/x-pack/plugins/graph/public/components/field_manager/_field_editor.scss @@ -1,11 +1,21 @@ .gphFieldEditor__badge { @include gphFieldBadgeSize; -} -.gphFieldEditor__badge--disabled, -.gphFieldEditor__badge--disabled:focus { - opacity: .7; - text-decoration: line-through; + &.gphFieldEditor__badge--disabled, + &.gphFieldEditor__badge--disabled:hover, + &.gphFieldEditor__badge--disabled:focus, + &.gphFieldEditor__badge--disabled:not(:disabled):hover + &.gphFieldEditor__badge--disabled:not(:disabled):focus { + opacity: .7; + text-decoration: line-through; + } + + // Chrome fix for focus: duplicate or Safari will ignore completely the disabled rule + &.gphFieldEditor__badge--disabled:focus:not(:focus-visible), + &.gphFieldEditor__badge--disabled:hover:not(:focus-visible) { + opacity: .7; + text-decoration: line-through; + } } .gphFieldEditor__badgeIcon { From 17ecb04dce72585f7ada69de7af3065cf4cc17d1 Mon Sep 17 00:00:00 2001 From: John Schulz Date: Mon, 19 Apr 2021 09:43:43 -0400 Subject: [PATCH 12/13] [Fleet] Filter hosted policies from menu (#97380) ## Summary * 4C & 7C from https://github.com/elastic/kibana/issues/91906 about hiding hosted agent policy from select menus * Also changed reassign agent to new policy UI from flyout to modal as requested
Screenshots

Current

Screen Shot 2021-04-16 at 1 37 02 PM

PR

Screen Shot 2021-04-16 at 1 43 51 PM

current

Screen Shot 2021-04-16 at 1 44 41 PM

PR

Screen Shot 2021-04-16 at 1 50 28 PM

current

Screen Shot 2021-04-16 at 1 35 48 PM

PR

Screen Shot 2021-04-16 at 2 35 15 PM Screen Shot 2021-04-16 at 3 24 16 PM
### 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/master/packages/kbn-i18n/README.md) Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../fleet/components/package_icon.tsx | 15 +- .../step_select_agent_policy.tsx | 6 +- .../components/actions_menu.tsx | 4 +- .../components/bulk_actions.tsx | 4 +- .../sections/agents/agent_list_page/index.tsx | 6 +- .../agent_enrollment_flyout/steps.tsx | 5 +- .../agent_reassign_policy_flyout/index.tsx | 175 ------------------ .../agent_reassign_policy_modal/index.tsx | 159 ++++++++++++++++ .../sections/agents/components/index.tsx | 2 +- 9 files changed, 189 insertions(+), 187 deletions(-) delete mode 100644 x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/agent_reassign_policy_flyout/index.tsx create mode 100644 x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/agent_reassign_policy_modal/index.tsx diff --git a/x-pack/plugins/fleet/public/applications/fleet/components/package_icon.tsx b/x-pack/plugins/fleet/public/applications/fleet/components/package_icon.tsx index cb0b02527f756..e7fd1da394bb3 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/components/package_icon.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/components/package_icon.tsx @@ -14,7 +14,18 @@ import { usePackageIconType } from '../hooks'; export const PackageIcon: React.FunctionComponent< UsePackageIconType & Omit -> = ({ packageName, version, icons, tryApi, ...euiIconProps }) => { +> = ({ size = 's', packageName, version, icons, tryApi, ...euiIconProps }) => { const iconType = usePackageIconType({ packageName, version, icons, tryApi }); - return ; + return ( + + // this collides with some EuiText (+img) CSS from the EuiIcon component + // which makes the button large, wide, and poorly layed out + // override those styles until the bug is fixed or we find a better approach + style={{ margin: 'unset', width: 'unset' }} + size={size} + type={iconType} + {...euiIconProps} + /> + ); }; diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/step_select_agent_policy.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/step_select_agent_policy.tsx index 53fab8bda4a8c..26d47cbff5b86 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/step_select_agent_policy.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/step_select_agent_policy.tsx @@ -94,7 +94,11 @@ export const StepSelectAgentPolicy: React.FunctionComponent<{ sortOrder: 'asc', full: true, }); - const agentPolicies = useMemo(() => agentPoliciesData?.items || [], [agentPoliciesData?.items]); + const agentPolicies = useMemo( + () => agentPoliciesData?.items.filter((policy) => !policy.is_managed) || [], + [agentPoliciesData?.items] + ); + const agentPoliciesById = useMemo(() => { return agentPolicies.reduce((acc: { [key: string]: GetAgentPoliciesResponseItem }, policy) => { acc[policy.id] = policy; diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/actions_menu.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/actions_menu.tsx index e5ad131bd7e05..d814d2d0646a8 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/actions_menu.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/actions_menu.tsx @@ -14,7 +14,7 @@ import { useCapabilities, useKibanaVersion } from '../../../../hooks'; import { ContextMenuActions } from '../../../../components'; import { AgentUnenrollAgentModal, - AgentReassignAgentPolicyFlyout, + AgentReassignAgentPolicyModal, AgentUpgradeAgentModal, } from '../../components'; import { useAgentRefresh } from '../hooks'; @@ -45,7 +45,7 @@ export const AgentDetailsActionMenu: React.FunctionComponent<{ <> {isReassignFlyoutOpen && ( - + )} {isUnenrollModalOpen && ( diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/bulk_actions.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/bulk_actions.tsx index de27d5fada755..b59ef1f749fb2 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/bulk_actions.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/bulk_actions.tsx @@ -22,7 +22,7 @@ import { FormattedMessage, FormattedNumber } from '@kbn/i18n/react'; import { SO_SEARCH_LIMIT } from '../../../../constants'; import type { Agent } from '../../../../types'; import { - AgentReassignAgentPolicyFlyout, + AgentReassignAgentPolicyModal, AgentUnenrollAgentModal, AgentUpgradeAgentModal, } from '../../components'; @@ -161,7 +161,7 @@ export const AgentBulkActions: React.FunctionComponent<{ <> {isReassignFlyoutOpen && ( - { setIsReassignFlyoutOpen(false); diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/index.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/index.tsx index 6dd1b8a9693e8..b3c0cf93c88ef 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/index.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/index.tsx @@ -41,7 +41,7 @@ import { AgentPolicySummaryLine, ContextMenuActions } from '../../../components' import { AgentStatusKueryHelper, isAgentUpgradeable } from '../../../services'; import { AGENT_SAVED_OBJECT_TYPE } from '../../../constants'; import { - AgentReassignAgentPolicyFlyout, + AgentReassignAgentPolicyModal, AgentHealth, AgentUnenrollAgentModal, AgentUpgradeAgentModal, @@ -379,7 +379,7 @@ export const AgentListPage: React.FunctionComponent<{}> = () => { return ( - + {agentPolicy && } {showWarning && ( @@ -488,7 +488,7 @@ export const AgentListPage: React.FunctionComponent<{}> = () => { ) : null} {agentToReassign && ( - { setAgentToReassign(undefined); diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/agent_enrollment_flyout/steps.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/agent_enrollment_flyout/steps.tsx index 1d5e8cbfc5cd6..faa0461ed4773 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/agent_enrollment_flyout/steps.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/agent_enrollment_flyout/steps.tsx @@ -53,13 +53,16 @@ export const AgentPolicySelectionStep = ({ setSelectedAPIKeyId?: (key: string) => void; setSelectedPolicyId?: (policyId: string) => void; }) => { + const regularAgentPolicies = Array.isArray(agentPolicies) + ? agentPolicies.filter((policy) => policy && !policy.is_managed) + : []; return { title: i18n.translate('xpack.fleet.agentEnrollment.stepChooseAgentPolicyTitle', { defaultMessage: 'Choose an agent policy', }), children: ( void; - agents: Agent[] | string; -} - -export const AgentReassignAgentPolicyFlyout: React.FunctionComponent = ({ - onClose, - agents, -}) => { - const { notifications } = useStartServices(); - const isSingleAgent = Array.isArray(agents) && agents.length === 1; - - const [selectedAgentPolicyId, setSelectedAgentPolicyId] = useState( - isSingleAgent ? (agents[0] as Agent).policy_id : undefined - ); - const agentPoliciesRequest = useGetAgentPolicies({ - page: 1, - perPage: 1000, - }); - // eslint-disable-next-line react-hooks/exhaustive-deps - const agentPolicies = agentPoliciesRequest.data ? agentPoliciesRequest.data.items : []; - useEffect(() => { - if (!selectedAgentPolicyId && agentPolicies[0]) { - setSelectedAgentPolicyId(agentPolicies[0].id); - } - }, [agentPolicies, selectedAgentPolicyId]); - - const [isSubmitting, setIsSubmitting] = useState(false); - async function onSubmit() { - try { - setIsSubmitting(true); - if (!selectedAgentPolicyId) { - throw new Error('No selected agent policy id'); - } - const res = isSingleAgent - ? await sendPutAgentReassign((agents[0] as Agent).id, { - policy_id: selectedAgentPolicyId, - }) - : await sendPostBulkAgentReassign({ - policy_id: selectedAgentPolicyId, - agents: Array.isArray(agents) ? agents.map((agent) => agent.id) : agents, - }); - if (res.error) { - throw res.error; - } - setIsSubmitting(false); - const successMessage = i18n.translate( - 'xpack.fleet.agentReassignPolicy.successSingleNotificationTitle', - { - defaultMessage: 'Agent policy reassigned', - } - ); - notifications.toasts.addSuccess(successMessage); - onClose(); - } catch (error) { - setIsSubmitting(false); - notifications.toasts.addError(error, { - title: 'Unable to reassign agent policy', - }); - } - } - - return ( - - - -

- -

-
- - - - -
- - - - - ({ - value: agentPolicy.id, - text: agentPolicy.name, - }))} - value={selectedAgentPolicyId} - onChange={(e) => setSelectedAgentPolicyId(e.target.value)} - /> - - - - - - {selectedAgentPolicyId && ( - - )} - - - - - - - - - - - - - - - -
- ); -}; diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/agent_reassign_policy_modal/index.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/agent_reassign_policy_modal/index.tsx new file mode 100644 index 0000000000000..8ee401d3c4ddf --- /dev/null +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/agent_reassign_policy_modal/index.tsx @@ -0,0 +1,159 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { useState, useEffect, useMemo } from 'react'; +import { i18n } from '@kbn/i18n'; +import { + EuiConfirmModal, + EuiSpacer, + EuiFlexGroup, + EuiFlexItem, + EuiSelect, + EuiFormRow, +} from '@elastic/eui'; +import { FormattedMessage } from '@kbn/i18n/react'; + +import type { Agent } from '../../../../types'; +import { + sendPutAgentReassign, + sendPostBulkAgentReassign, + useStartServices, + useGetAgentPolicies, +} from '../../../../hooks'; +import { AgentPolicyPackageBadges } from '../agent_policy_package_badges'; + +interface Props { + onClose: () => void; + agents: Agent[] | string; +} + +export const AgentReassignAgentPolicyModal: React.FunctionComponent = ({ + onClose, + agents, +}) => { + const { notifications } = useStartServices(); + const isSingleAgent = Array.isArray(agents) && agents.length === 1; + + const [selectedAgentPolicyId, setSelectedAgentPolicyId] = useState( + isSingleAgent ? (agents[0] as Agent).policy_id : undefined + ); + const agentPoliciesRequest = useGetAgentPolicies({ + page: 1, + perPage: 1000, + }); + // eslint-disable-next-line react-hooks/exhaustive-deps + const agentPolicies = agentPoliciesRequest.data ? agentPoliciesRequest.data.items : []; + useEffect(() => { + if (!selectedAgentPolicyId && agentPolicies[0]) { + setSelectedAgentPolicyId(agentPolicies[0].id); + } + }, [agentPolicies, selectedAgentPolicyId]); + + const policySelectOptions = useMemo(() => { + return agentPolicies + .filter((policy) => policy && !policy.is_managed) + .map((agentPolicy) => ({ + value: agentPolicy.id, + text: agentPolicy.name, + })); + }, [agentPolicies]); + + const [isSubmitting, setIsSubmitting] = useState(false); + async function onSubmit() { + try { + setIsSubmitting(true); + if (!selectedAgentPolicyId) { + throw new Error('No selected agent policy id'); + } + const res = isSingleAgent + ? await sendPutAgentReassign((agents[0] as Agent).id, { + policy_id: selectedAgentPolicyId, + }) + : await sendPostBulkAgentReassign({ + policy_id: selectedAgentPolicyId, + agents: Array.isArray(agents) ? agents.map((agent) => agent.id) : agents, + }); + if (res.error) { + throw res.error; + } + setIsSubmitting(false); + const successMessage = i18n.translate( + 'xpack.fleet.agentReassignPolicy.successSingleNotificationTitle', + { + defaultMessage: 'Agent policy reassigned', + } + ); + notifications.toasts.addSuccess(successMessage); + onClose(); + } catch (error) { + setIsSubmitting(false); + notifications.toasts.addError(error, { + title: 'Unable to reassign agent policy', + }); + } + } + + return ( + + } + onCancel={onClose} + onConfirm={onSubmit} + cancelButtonText={ + + } + confirmButtonDisabled={ + isSubmitting || (isSingleAgent && selectedAgentPolicyId === (agents[0] as Agent).policy_id) + } + confirmButtonText={ + + } + buttonColor="danger" + > +

+ +

+ + + + setSelectedAgentPolicyId(e.target.value)} + /> + + + + + + {selectedAgentPolicyId && } +
+ ); +}; diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/index.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/index.tsx index 93425ba10413c..45f09c79d5533 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/index.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/index.tsx @@ -6,7 +6,7 @@ */ export * from './loading'; -export * from './agent_reassign_policy_flyout'; +export * from './agent_reassign_policy_modal'; export * from './agent_enrollment_flyout'; export * from './agent_health'; export * from './agent_unenroll_modal'; From efcf7d1a25f4df487829489b631edd39b75ae3e5 Mon Sep 17 00:00:00 2001 From: Sonja Krause-Harder Date: Mon, 19 Apr 2021 16:01:10 +0200 Subject: [PATCH 13/13] [Fleet] Don't fail on errors in 'update' or 'reupdate' operation in /setup (#97404) * Don't fail on, just report, update and reupdate errors. * Show error toast on update and reupdate errors. * Don't return empty error array. * Adjust mock. * Adjust test. --- .../plugins/fleet/common/types/models/epm.ts | 5 ++++ .../common/types/rest_spec/ingest_setup.ts | 3 ++ .../fleet/public/applications/fleet/app.tsx | 7 +++++ .../server/routes/setup/handlers.test.ts | 6 +++- .../fleet/server/routes/setup/handlers.ts | 10 +++++-- .../epm/packages/bulk_install_packages.ts | 12 ++++++-- .../ensure_installed_default_packages.test.ts | 2 +- .../server/services/epm/packages/install.ts | 28 ++++++++++++++++--- x-pack/plugins/fleet/server/services/setup.ts | 13 ++++++--- 9 files changed, 72 insertions(+), 14 deletions(-) diff --git a/x-pack/plugins/fleet/common/types/models/epm.ts b/x-pack/plugins/fleet/common/types/models/epm.ts index 1a594e77f4857..eab13fe5819f9 100644 --- a/x-pack/plugins/fleet/common/types/models/epm.ts +++ b/x-pack/plugins/fleet/common/types/models/epm.ts @@ -30,6 +30,11 @@ export enum InstallStatus { uninstalling = 'uninstalling', } +export interface DefaultPackagesInstallationError { + installType: InstallType; + error: Error; +} + export type InstallType = 'reinstall' | 'reupdate' | 'rollback' | 'update' | 'install' | 'unknown'; export type InstallSource = 'registry' | 'upload'; diff --git a/x-pack/plugins/fleet/common/types/rest_spec/ingest_setup.ts b/x-pack/plugins/fleet/common/types/rest_spec/ingest_setup.ts index 2180b66908498..6f64f1c48336d 100644 --- a/x-pack/plugins/fleet/common/types/rest_spec/ingest_setup.ts +++ b/x-pack/plugins/fleet/common/types/rest_spec/ingest_setup.ts @@ -5,7 +5,10 @@ * 2.0. */ +import type { DefaultPackagesInstallationError } from '../models/epm'; + export interface PostIngestSetupResponse { isInitialized: boolean; preconfigurationError?: { name: string; message: string }; + nonFatalPackageUpgradeErrors?: DefaultPackagesInstallationError[]; } diff --git a/x-pack/plugins/fleet/public/applications/fleet/app.tsx b/x-pack/plugins/fleet/public/applications/fleet/app.tsx index 5663bd4768d5c..f2eee6228906a 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/app.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/app.tsx @@ -90,6 +90,13 @@ export const WithPermissionsAndSetup: React.FC = memo(({ children }) => { }), }); } + if (setupResponse.data.nonFatalPackageUpgradeErrors) { + notifications.toasts.addError(setupResponse.data.nonFatalPackageUpgradeErrors, { + title: i18n.translate('xpack.fleet.setup.nonFatalPackageErrorsTitle', { + defaultMessage: 'One or more packages could not be successfully upgraded', + }), + }); + } } catch (err) { setInitializationError(err); } diff --git a/x-pack/plugins/fleet/server/routes/setup/handlers.test.ts b/x-pack/plugins/fleet/server/routes/setup/handlers.test.ts index 2cf9bbc3b91e3..fd32d699ae45e 100644 --- a/x-pack/plugins/fleet/server/routes/setup/handlers.test.ts +++ b/x-pack/plugins/fleet/server/routes/setup/handlers.test.ts @@ -46,7 +46,11 @@ describe('FleetSetupHandler', () => { it('POST /setup succeeds w/200 and body of resolved value', async () => { mockSetupIngestManager.mockImplementation(() => - Promise.resolve({ isInitialized: true, preconfigurationError: undefined }) + Promise.resolve({ + isInitialized: true, + preconfigurationError: undefined, + nonFatalPackageUpgradeErrors: [], + }) ); await fleetSetupHandler(context, request, response); diff --git a/x-pack/plugins/fleet/server/routes/setup/handlers.ts b/x-pack/plugins/fleet/server/routes/setup/handlers.ts index b6aa9e29de9ee..a6d7acccfb4fe 100644 --- a/x-pack/plugins/fleet/server/routes/setup/handlers.ts +++ b/x-pack/plugins/fleet/server/routes/setup/handlers.ts @@ -46,8 +46,14 @@ export const fleetSetupHandler: RequestHandler = async (context, request, respon try { const soClient = context.core.savedObjects.client; const esClient = context.core.elasticsearch.client.asCurrentUser; - const body: PostIngestSetupResponse = { isInitialized: true }; - await setupIngestManager(soClient, esClient); + const setupStatus = await setupIngestManager(soClient, esClient); + const body: PostIngestSetupResponse = { + isInitialized: true, + }; + + if (setupStatus.nonFatalPackageUpgradeErrors.length > 0) { + body.nonFatalPackageUpgradeErrors = setupStatus.nonFatalPackageUpgradeErrors; + } return response.ok({ body, diff --git a/x-pack/plugins/fleet/server/services/epm/packages/bulk_install_packages.ts b/x-pack/plugins/fleet/server/services/epm/packages/bulk_install_packages.ts index baaaaf6c6b0cf..2c5b072aa3979 100644 --- a/x-pack/plugins/fleet/server/services/epm/packages/bulk_install_packages.ts +++ b/x-pack/plugins/fleet/server/services/epm/packages/bulk_install_packages.ts @@ -45,7 +45,11 @@ export async function bulkInstallPackages({ skipPostInstall: true, }); if (installResult.error) { - return { name: packageName, error: installResult.error }; + return { + name: packageName, + error: installResult.error, + installType: installResult.installType, + }; } else { return { name: packageName, @@ -75,7 +79,11 @@ export async function bulkInstallPackages({ const packageName = packagesToInstall[index]; if (result.status === 'fulfilled') { if (result.value && result.value.error) { - return { name: packageName, error: result.value.error }; + return { + name: packageName, + error: result.value.error, + installType: result.value.installType, + }; } else { return result.value; } diff --git a/x-pack/plugins/fleet/server/services/epm/packages/ensure_installed_default_packages.test.ts b/x-pack/plugins/fleet/server/services/epm/packages/ensure_installed_default_packages.test.ts index f8c91e55fbbb6..60e2e5ea2cbf8 100644 --- a/x-pack/plugins/fleet/server/services/epm/packages/ensure_installed_default_packages.test.ts +++ b/x-pack/plugins/fleet/server/services/epm/packages/ensure_installed_default_packages.test.ts @@ -84,7 +84,7 @@ describe('ensureInstalledDefaultPackages', () => { ]; }); const resp = await ensureInstalledDefaultPackages(soClient, jest.fn()); - expect(resp).toEqual([mockInstallation.attributes]); + expect(resp.installations).toEqual([mockInstallation.attributes]); }); it('should throw the first Error it finds', async () => { class SomeCustomError extends Error {} diff --git a/x-pack/plugins/fleet/server/services/epm/packages/install.ts b/x-pack/plugins/fleet/server/services/epm/packages/install.ts index 31d0732096790..ec1cc322475b0 100644 --- a/x-pack/plugins/fleet/server/services/epm/packages/install.ts +++ b/x-pack/plugins/fleet/server/services/epm/packages/install.ts @@ -12,7 +12,12 @@ import type { ElasticsearchClient, SavedObject, SavedObjectsClientContract } fro import { generateESIndexPatterns } from '../elasticsearch/template/template'; import { defaultPackages } from '../../../../common'; -import type { BulkInstallPackageInfo, InstallablePackage, InstallSource } from '../../../../common'; +import type { + BulkInstallPackageInfo, + InstallablePackage, + InstallSource, + DefaultPackagesInstallationError, +} from '../../../../common'; import { IngestManagerError, PackageOperationNotSupportedError, @@ -45,11 +50,17 @@ import { removeInstallation } from './remove'; import { getPackageSavedObjects } from './get'; import { _installPackage } from './_install_package'; +export interface DefaultPackagesInstallationResult { + installations: Installation[]; + nonFatalPackageUpgradeErrors: DefaultPackagesInstallationError[]; +} + export async function ensureInstalledDefaultPackages( savedObjectsClient: SavedObjectsClientContract, esClient: ElasticsearchClient -): Promise { +): Promise { const installations = []; + const nonFatalPackageUpgradeErrors = []; const bulkResponse = await bulkInstallPackages({ savedObjectsClient, packagesToInstall: Object.values(defaultPackages), @@ -58,19 +69,27 @@ export async function ensureInstalledDefaultPackages( for (const resp of bulkResponse) { if (isBulkInstallError(resp)) { - throw resp.error; + if (resp.installType && (resp.installType === 'update' || resp.installType === 'reupdate')) { + nonFatalPackageUpgradeErrors.push({ installType: resp.installType, error: resp.error }); + } else { + throw resp.error; + } } else { installations.push(getInstallation({ savedObjectsClient, pkgName: resp.name })); } } const retrievedInstallations = await Promise.all(installations); - return retrievedInstallations.map((installation, index) => { + const verifiedInstallations = retrievedInstallations.map((installation, index) => { if (!installation) { throw new Error(`could not get installation ${bulkResponse[index].name}`); } return installation; }); + return { + installations: verifiedInstallations, + nonFatalPackageUpgradeErrors, + }; } async function isPackageVersionOrLaterInstalled(options: { @@ -181,6 +200,7 @@ export async function handleInstallPackageFailure({ export interface IBulkInstallPackageError { name: string; error: Error; + installType?: InstallType; } export type BulkInstallResponse = BulkInstallPackageInfo | IBulkInstallPackageError; diff --git a/x-pack/plugins/fleet/server/services/setup.ts b/x-pack/plugins/fleet/server/services/setup.ts index c906dc73e6df2..de6876c7f6fda 100644 --- a/x-pack/plugins/fleet/server/services/setup.ts +++ b/x-pack/plugins/fleet/server/services/setup.ts @@ -10,7 +10,7 @@ import { i18n } from '@kbn/i18n'; import { DEFAULT_AGENT_POLICIES_PACKAGES, FLEET_SERVER_PACKAGE } from '../../common'; -import type { PackagePolicy } from '../../common'; +import type { PackagePolicy, DefaultPackagesInstallationError } from '../../common'; import { SO_SEARCH_LIMIT } from '../constants'; @@ -33,6 +33,7 @@ import { awaitIfFleetServerSetupPending } from './fleet_server'; export interface SetupStatus { isInitialized: boolean; preconfigurationError: { name: string; message: string } | undefined; + nonFatalPackageUpgradeErrors: DefaultPackagesInstallationError[]; } export async function setupIngestManager( @@ -46,7 +47,7 @@ async function createSetupSideEffects( soClient: SavedObjectsClientContract, esClient: ElasticsearchClient ): Promise { - const [installedPackages, defaultOutput] = await Promise.all([ + const [defaultPackagesResult, defaultOutput] = await Promise.all([ // packages installed by default ensureInstalledDefaultPackages(soClient, esClient), outputService.ensureDefaultOutput(soClient), @@ -142,7 +143,7 @@ async function createSetupSideEffects( ); } - for (const installedPackage of installedPackages) { + for (const installedPackage of defaultPackagesResult.installations) { const packageShouldBeInstalled = DEFAULT_AGENT_POLICIES_PACKAGES.some( (packageName) => installedPackage.name === packageName ); @@ -172,7 +173,11 @@ async function createSetupSideEffects( await ensureAgentActionPolicyChangeExists(soClient, esClient); - return { isInitialized: true, preconfigurationError }; + return { + isInitialized: true, + preconfigurationError, + nonFatalPackageUpgradeErrors: defaultPackagesResult.nonFatalPackageUpgradeErrors, + }; } export async function ensureDefaultEnrollmentAPIKeysExists(