Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

SavedObjects tagging MVP #79096

Merged
merged 155 commits into from
Nov 3, 2020
Merged

Conversation

pgayvallet
Copy link
Contributor

@pgayvallet pgayvallet commented Oct 1, 2020

Summary

Implements MVP of the savedObjects tagging feature as defined in #74571

Some screenshots

tags management page

Screenshot 2020-10-19 at 15 28 06

tag creation modal

Screenshot 2020-10-19 at 15 32 30

vis save modal

Screenshot 2020-10-19 at 15 24 13

vis listing

Screenshot 2020-10-19 at 15 24 33

dashboard save modal

Screenshot 2020-10-21 at 21 13 10

dashboard listing

Screenshot 2020-10-19 at 15 24 48

SO management listing

Screenshot 2020-10-19 at 15 25 06

Technical implementation

Object to tag relations

The base implementation of tagging is quite simple. We introduced a new Tag savedObject type, and assigning tags to saved objects is done by adding a reference to the tag in any other saved object, using the already existing references field. Full discussion about the chosen design can be seen in #74571, and more details are available in the discussion starting here

Tagging API consumption from OSS

The savedObjectsTagging plugin is in xpack. However the tagging API needs to be accessed from various OSS plugins. This is the reason why the savedObjectsTaggingOss plugin was introduced. This oss plugins allows a provider to register the tagging API, and will then act as a bridge to expose it to oss plugins. As the types also needs to be accessible from OSS, the types definition for the SavedObjectsTaggingAPI are also living in this plugin.

Changes

This PR impacts the following parts of the codebase:

Core

  • Adapt the find API to allow searching for multiple references.

hasReference now accepts an array, allowing to search for object matching multiple references. A new hasReferenceOperator also has been introduced to switch between AND and OR when searching for references (defaults to OR)

  • Add a new removeReferencesTo(type, id) API to the SO repository and client

This API updates all objects referencing the given object to remove the reference, using a update_by_query operation. This is required to remove references to a tag when deleting it.

  • Adapt the export http endpoint to allow exporting by references

When exporting by types, it is now possible to specify a list of references to use when searching for the root objects to include in the export. This is used by the SO management page to filter by tag when exporting the currently displayed objects

oss plugins

savedObjectsTaggingOss

Introduce the new savedObjectsTaggingOss that is a bridge for accessing the xpack's savedObjectsTagging plugin API. The plugin also contains all the typescript types definition for the SavedObjectsTaggingAPI.

savedObjectsManagement

  • Update the SO management page to add the Tags column and filter
  • Allow to pass an initial search query when accessing the page, via the initialQuery query parameter
  • Adapt the export logic to filter by tag when tags are selected

savedObjects

The way the client-side SavedObject class was handling references was an issue (see #74571 (comment) for context), as the class makes the assumption that the config-provided injectReferences and extractReferences are the single source of truth for references, which was causing problems with the Tag references we added.

The PR adds a decorator registry to the savedObject plugin to allow enhancing the SavedObject class with proper separation of concerns.

Also, the options prop from the SavedObjectSaveModal component was added to SavedObjectSaveModalOrigin, to allow passing down additional options than the ones generated within the origin modal. This is used to pass the tags selection dropdown to the modal. Eventually, these modals would probably need a global rewrite, but I just did not felt like doing it there.

dashboard

  • Adapt the dashboard listing view to add the tags column and filters
  • Adapt the dashboard edit/create popin to add the tags selection widget

visualize

  • Adapt the visualization listing view to add the tags column and filters.
  • Adapt the visualization edit/create popin to add the tags selection widget for savedVis

x-pack plugins

savedObjectsTagging

Introduce the new savedObjectsTagging plugin

spaces

Update the spaces client wrapper to implements removeReferencesTo

security

Update the security client wrapper to implements removeReferencesTo

encrypted_saved_objects

Update the encrypted saved object client wrapper to implements removeReferencesTo

lens

  • Adapt the lens edit/create popin to add the tags selection widget

What is outside of the scope of the PR

Tags are currently visible in the SO management section

We are currently not doing the distinction between types that are exportable/importable and the types we are displaying on the SO management section. Setting the tag type as not exportable would cause issues when exporting objects with references to tag, in addition to making it impossible to import them back.

Setting the tag type as hidden would more even more problem than that, the first being that it would be outside of the security plugin's RBAC.

We need to improve the SavedObjectsTypeManagementDefinition type to allow to define types that are exportable, while not being visible/searchable on the SO management section. However as the PR is already quite big, I would rather handle that in a follow-up.

Tag components / widgets may not be all in final state

@elastic/kibana-core-ui as already discussed sync on slack, some components may not be in final design state. Ideally, this should not block the PR to be merged, and improvements would instead be performed in follow-ups by you team. I will still, of course, handle anything that is judged blocker to merge the current PR.

The batch action menu is missing in the So tagging management listing table

Waiting for elastic/eui#4095 to be delivered in next EUI update to be able to add the menu. It can be done as a follow-up, to avoid blocking the feature just for that (will be done before 7.11)

Release Note

Categorize and organize your dashboards, visualizations and other saved objects with tags. Tags can be centrally managed in Stack Management and created in-line across Kibana.

@pgayvallet pgayvallet mentioned this pull request Oct 3, 2020
41 tasks
@pgayvallet pgayvallet added v7.11.0 Team:Core Core services & architecture: plugins, logging, config, saved objects, http, ES client, i18n, etc labels Oct 6, 2020
@ryankeairns ryankeairns self-requested a review October 30, 2020 13:06
Copy link
Contributor

@ryankeairns ryankeairns left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Awesome work Pierre, this will generate a ton of excitement!

There was one small copy change that Gail requested, but I don't want to force another CI run on this PR since it's green. We can pick it up post merge.

@pgayvallet
Copy link
Contributor Author

but I don't want to force another CI run on this PR since it's green

Trust me, that's not the final build 😅 . Will do the wording change in this PR.

@pgayvallet
Copy link
Contributor Author

@gchaps done in f6a5d7b

Screenshot 2020-10-30 at 17 20 38

@@ -51,6 +57,20 @@ export interface SavedObjectsExportOptions {
namespace?: string;
}

type SavedObjectsFetchByTypeOptions = Pick<Required<SavedObjectsExportOptions>, 'types'> &
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd rather declare the public interfaces explicitly:

interface SavedObjectsFetchByTypeOptions {
  /** optional array of saved object types. */
  types: string[];
  /** optional array of references to search object for when exporting by types */
  hasReference?: SavedObjectsFindOptionsReference[];
  /** optional query string to filter exported objects. */
  search?: string;
  /** an instance of the SavedObjectsClient. */
  savedObjectsClient: SavedObjectsClientContract;
  /** the maximum number of objects to export. */
  exportSizeLimit: number;
  /** optional namespace to override the namespace used by the savedObjectsClient. */
  namespace?: string;
}

interface SavedObjectsFetchByObjectOptions {
  /** optional array of objects to export. */
  objects: Array<{
    /** the saved object id. */
    id: string;
    /** the saved object type. */
    type: string;
  }>;
  /** an instance of the SavedObjectsClient. */
  savedObjectsClient: SavedObjectsClientContract;
  /** the maximum number of objects to export. */
  exportSizeLimit: number;
  /** optional namespace to override the namespace used by the savedObjectsClient. */
  namespace?: string;
}

types,
}: SavedObjectsExportOptions):
| SavedObjectsFetchByTypeOptions
| SavedObjectsFetchByObjectOptions => {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

would it be better to define return type explicitly instead?

const fetchByObjectOptions: SavedObjectsFetchByObjectOptions = {
  objects,
  exportSizeLimit,
  savedObjectsClient,
  namespace,
};
return fetchByObjectOptions;

);

if (body.failures?.length) {
throw SavedObjectsErrorHelpers.createConflictError(type, id);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this.api = api;
},
(error) => {
this.apiRegistered = false;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ok, even though registerTaggingApi doesn't know what code created provider promise, it might be overengineering to add a proper error handling. console.error is fine, imo

"kibanaVersion": "kibana",
"server": true,
"ui": true,
"configPath": ["xpack", "saved_object_tagging"],
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Until we've refactored all config keys in a single big refactor, all existing and new config keys should keep using camelCase for consistency.

I believe it's for the existing keys. I'd rather using snake_case for the new ones to prevent refactoring in the future.

},
};

export const USERS = {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@alexfrancoeur
Copy link

@pgayvallet as requested, here's a quick description of tags for the the release notes. Thoughts?

Categorize and organize your dashboards, visualizations and other saved objects with tags. Tags can be centrally managed in Stack Management and created in-line across Kibana.

@kibanamachine
Copy link
Contributor

💛 Build succeeded, but was flaky


Test Failures

Firefox UI Functional Tests.test/functional/apps/visualize/_tsvb_chart·ts.visualize app visual builder metric should populate fields for basic functions

Link to Jenkins

Standard Out

Failed Tests Reporter:
  - Test has failed 2 times on tracked branches: https://github.com/elastic/kibana/issues/75127

[00:00:00]       │
[00:13:09]         └-: visualize app
[00:13:09]           └-> "before all" hook
[00:13:09]           └-> "before all" hook
[00:13:09]             │ debg Starting visualize before method
[00:13:09]             │ info [logstash_functional] Loading "mappings.json"
[00:13:09]             │ info [logstash_functional] Loading "data.json.gz"
[00:13:09]             │ info [o.e.c.m.MetadataCreateIndexService] [kibana-ci-immutable-ubuntu-18-tests-xxl-1604388620303136419] [logstash-2015.09.22] creating index, cause [api], templates [], shards [1]/[0]
[00:13:09]             │ info [o.e.c.r.a.AllocationService] [kibana-ci-immutable-ubuntu-18-tests-xxl-1604388620303136419] current.health="GREEN" message="Cluster health status changed from [YELLOW] to [GREEN] (reason: [shards started [[logstash-2015.09.22][0]]])." previous.health="YELLOW" reason="shards started [[logstash-2015.09.22][0]]"
[00:13:09]             │ info [logstash_functional] Created index "logstash-2015.09.22"
[00:13:09]             │ debg [logstash_functional] "logstash-2015.09.22" settings {"index":{"analysis":{"analyzer":{"url":{"max_token_length":"1000","tokenizer":"uax_url_email","type":"standard"}}},"number_of_replicas":"0","number_of_shards":"1"}}
[00:13:09]             │ info [o.e.c.m.MetadataCreateIndexService] [kibana-ci-immutable-ubuntu-18-tests-xxl-1604388620303136419] [logstash-2015.09.20] creating index, cause [api], templates [], shards [1]/[0]
[00:13:09]             │ info [o.e.c.r.a.AllocationService] [kibana-ci-immutable-ubuntu-18-tests-xxl-1604388620303136419] current.health="GREEN" message="Cluster health status changed from [YELLOW] to [GREEN] (reason: [shards started [[logstash-2015.09.20][0]]])." previous.health="YELLOW" reason="shards started [[logstash-2015.09.20][0]]"
[00:13:09]             │ info [logstash_functional] Created index "logstash-2015.09.20"
[00:13:09]             │ debg [logstash_functional] "logstash-2015.09.20" settings {"index":{"analysis":{"analyzer":{"url":{"max_token_length":"1000","tokenizer":"uax_url_email","type":"standard"}}},"number_of_replicas":"0","number_of_shards":"1"}}
[00:13:09]             │ info [o.e.c.m.MetadataCreateIndexService] [kibana-ci-immutable-ubuntu-18-tests-xxl-1604388620303136419] [logstash-2015.09.21] creating index, cause [api], templates [], shards [1]/[0]
[00:13:09]             │ info [o.e.c.r.a.AllocationService] [kibana-ci-immutable-ubuntu-18-tests-xxl-1604388620303136419] current.health="GREEN" message="Cluster health status changed from [YELLOW] to [GREEN] (reason: [shards started [[logstash-2015.09.21][0]]])." previous.health="YELLOW" reason="shards started [[logstash-2015.09.21][0]]"
[00:13:09]             │ info [logstash_functional] Created index "logstash-2015.09.21"
[00:13:09]             │ debg [logstash_functional] "logstash-2015.09.21" settings {"index":{"analysis":{"analyzer":{"url":{"max_token_length":"1000","tokenizer":"uax_url_email","type":"standard"}}},"number_of_replicas":"0","number_of_shards":"1"}}
[00:13:19]             │ info progress: 12341
[00:13:20]             │ info [logstash_functional] Indexed 4633 docs into "logstash-2015.09.22"
[00:13:20]             │ info [logstash_functional] Indexed 4757 docs into "logstash-2015.09.20"
[00:13:20]             │ info [logstash_functional] Indexed 4614 docs into "logstash-2015.09.21"
[00:13:20]             │ info [long_window_logstash] Loading "mappings.json"
[00:13:20]             │ info [long_window_logstash] Loading "data.json.gz"
[00:13:20]             │ info [o.e.c.m.MetadataCreateIndexService] [kibana-ci-immutable-ubuntu-18-tests-xxl-1604388620303136419] [long-window-logstash-0] creating index, cause [api], templates [], shards [1]/[0]
[00:13:20]             │ info [o.e.c.r.a.AllocationService] [kibana-ci-immutable-ubuntu-18-tests-xxl-1604388620303136419] current.health="GREEN" message="Cluster health status changed from [YELLOW] to [GREEN] (reason: [shards started [[long-window-logstash-0][0]]])." previous.health="YELLOW" reason="shards started [[long-window-logstash-0][0]]"
[00:13:20]             │ info [long_window_logstash] Created index "long-window-logstash-0"
[00:13:20]             │ debg [long_window_logstash] "long-window-logstash-0" settings {"index":{"analysis":{"analyzer":{"makelogs_url":{"max_token_length":"1000","tokenizer":"uax_url_email","type":"standard"}}},"number_of_replicas":"0","number_of_shards":"1"}}
[00:13:30]             │ info progress: 10837
[00:13:33]             │ info [long_window_logstash] Indexed 14005 docs into "long-window-logstash-0"
[00:13:33]             │ info [visualize] Loading "mappings.json"
[00:13:33]             │ info [visualize] Loading "data.json"
[00:13:33]             │ info [o.e.c.m.MetadataDeleteIndexService] [kibana-ci-immutable-ubuntu-18-tests-xxl-1604388620303136419] [.kibana_1/ZlEsyVEMQWSmq1l3eHiKLA] deleting index
[00:13:33]             │ info [o.e.c.m.MetadataDeleteIndexService] [kibana-ci-immutable-ubuntu-18-tests-xxl-1604388620303136419] [.kibana_2/8SMJ0yjVTOi9VNpULy9oPw] deleting index
[00:13:33]             │ info [visualize] Deleted existing index [".kibana_2",".kibana_1"]
[00:13:33]             │ info [o.e.c.m.MetadataCreateIndexService] [kibana-ci-immutable-ubuntu-18-tests-xxl-1604388620303136419] [.kibana] creating index, cause [api], templates [], shards [1]/[1]
[00:13:33]             │ info [visualize] Created index ".kibana"
[00:13:33]             │ debg [visualize] ".kibana" settings {"index":{"number_of_replicas":"1","number_of_shards":"1"}}
[00:13:33]             │ info [o.e.c.m.MetadataMappingService] [kibana-ci-immutable-ubuntu-18-tests-xxl-1604388620303136419] [.kibana/y1Gw8SBDRoGELvKYgP2dMQ] update_mapping [_doc]
[00:13:33]             │ info [visualize] Indexed 12 docs into ".kibana"
[00:13:34]             │ info [o.e.c.m.MetadataMappingService] [kibana-ci-immutable-ubuntu-18-tests-xxl-1604388620303136419] [.kibana/y1Gw8SBDRoGELvKYgP2dMQ] update_mapping [_doc]
[00:13:34]             │ debg Migrating saved objects
[00:13:34]             │ proc [kibana]   log   [08:05:49.851] [info][savedobjects-service] Creating index .kibana_2.
[00:13:34]             │ info [o.e.c.m.MetadataCreateIndexService] [kibana-ci-immutable-ubuntu-18-tests-xxl-1604388620303136419] [.kibana_2] creating index, cause [api], templates [], shards [1]/[1]
[00:13:34]             │ info [o.e.c.r.a.AllocationService] [kibana-ci-immutable-ubuntu-18-tests-xxl-1604388620303136419] updating number_of_replicas to [0] for indices [.kibana_2]
[00:13:34]             │ proc [kibana]   log   [08:05:49.891] [info][savedobjects-service] Reindexing .kibana to .kibana_1
[00:13:34]             │ info [o.e.c.m.MetadataCreateIndexService] [kibana-ci-immutable-ubuntu-18-tests-xxl-1604388620303136419] [.kibana_1] creating index, cause [api], templates [], shards [1]/[1]
[00:13:34]             │ info [o.e.c.r.a.AllocationService] [kibana-ci-immutable-ubuntu-18-tests-xxl-1604388620303136419] updating number_of_replicas to [0] for indices [.kibana_1]
[00:13:34]             │ info [o.e.t.LoggingTaskListener] [kibana-ci-immutable-ubuntu-18-tests-xxl-1604388620303136419] 10087 finished with response BulkByScrollResponse[took=17.6ms,timed_out=false,sliceId=null,updated=0,created=12,deleted=0,batches=1,versionConflicts=0,noops=0,retries=0,throttledUntil=0s,bulk_failures=[],search_failures=[]]
[00:13:34]             │ info [o.e.c.m.MetadataDeleteIndexService] [kibana-ci-immutable-ubuntu-18-tests-xxl-1604388620303136419] [.kibana/y1Gw8SBDRoGELvKYgP2dMQ] deleting index
[00:13:34]             │ proc [kibana]   log   [08:05:50.211] [info][savedobjects-service] Migrating .kibana_1 saved objects to .kibana_2
[00:13:34]             │ proc [kibana]   log   [08:05:50.225] [error][savedobjects-service] Error: Unable to migrate the corrupt Saved Object document index-pattern:test_index*. To prevent Kibana from performing a migration on every restart, please delete or fix this document by ensuring that the namespace and type in the document's id matches the values in the namespace and type fields.
[00:13:34]             │ info [o.e.c.m.MetadataMappingService] [kibana-ci-immutable-ubuntu-18-tests-xxl-1604388620303136419] [.kibana_2/ASfBIrvGQeWqJd1yPo97nQ] update_mapping [_doc]
[00:13:34]             │ info [o.e.c.m.MetadataMappingService] [kibana-ci-immutable-ubuntu-18-tests-xxl-1604388620303136419] [.kibana_2/ASfBIrvGQeWqJd1yPo97nQ] update_mapping [_doc]
[00:13:34]             │ proc [kibana]   log   [08:05:50.315] [info][savedobjects-service] Pointing alias .kibana to .kibana_2.
[00:13:34]             │ proc [kibana]   log   [08:05:50.344] [info][savedobjects-service] Finished in 494ms.
[00:13:34]             │ debg applying update to kibana config: {"accessibility:disableAnimations":true,"dateFormat:tz":"UTC"}
[00:13:34]             │ info [o.e.c.m.MetadataMappingService] [kibana-ci-immutable-ubuntu-18-tests-xxl-1604388620303136419] [.kibana_2/ASfBIrvGQeWqJd1yPo97nQ] update_mapping [_doc]
[00:13:36]             │ debg replacing kibana config doc: {"defaultIndex":"logstash-*","format:bytes:defaultPattern":"0,0.[000]b"}
[00:14:06]           └-: 
[00:14:06]             └-> "before all" hook
[00:14:06]             └-: visual builder
[00:14:06]               └-> "before all" hook
[00:14:06]               └-: metric
[00:14:06]                 └-> "before all" hook
[00:14:06]                 └-> should not have inspector enabled
[00:14:06]                   └-> "before each" hook: global before each
[00:14:06]                   └-> "before each" hook
[00:14:06]                     │ debg navigating to visualize url: http://localhost:61231/app/visualize#/
[00:14:06]                     │ debg navigate to: http://localhost:61231/app/visualize#/
[00:14:06]                     │ debg browser[log] "^ A single error about an inline script not firing due to content security policy is expected!"
[00:14:06]                     │ debg ... sleep(700) start
[00:14:07]                     │ debg ... sleep(700) end
[00:14:07]                     │ debg returned from get, calling refresh
[00:14:07]                     │ERROR browser[error] (new TypeError("NetworkError when attempting to fetch resource.", "http://localhost:61231/37933/bundles/core/core.entry.js", 6))
[00:14:07]                     │ debg browser[log] "^ A single error about an inline script not firing due to content security policy is expected!"
[00:14:08]                     │ debg currentUrl = http://localhost:61231/app/visualize#/
[00:14:08]                     │          appUrl = http://localhost:61231/app/visualize#/
[00:14:08]                     │ debg TestSubjects.find(kibanaChrome)
[00:14:08]                     │ debg Find.findByCssSelector('[data-test-subj="kibanaChrome"]') with timeout=60000
[00:14:08]                     │ debg ... sleep(501) start
[00:14:09]                     │ debg ... sleep(501) end
[00:14:09]                     │ debg in navigateTo url = http://localhost:61231/app/visualize#/?_g=(filters:!(),refreshInterval:(pause:!t,value:0),time:(from:now-15m,to:now))
[00:14:09]                     │ debg --- retry.try error: URL changed, waiting for it to settle
[00:14:10]                     │ debg ... sleep(501) start
[00:14:10]                     │ debg ... sleep(501) end
[00:14:10]                     │ debg in navigateTo url = http://localhost:61231/app/visualize#/?_g=(filters:!(),refreshInterval:(pause:!t,value:0),time:(from:now-15m,to:now))
[00:14:10]                     │ debg TestSubjects.exists(statusPageContainer)
[00:14:10]                     │ debg Find.existsByDisplayedByCssSelector('[data-test-subj="statusPageContainer"]') with timeout=2500
[00:14:13]                     │ debg --- retry.tryForTime error: [data-test-subj="statusPageContainer"] is not displayed
[00:14:13]                     │ debg isGlobalLoadingIndicatorVisible
[00:14:13]                     │ debg TestSubjects.exists(globalLoadingIndicator)
[00:14:13]                     │ debg Find.existsByDisplayedByCssSelector('[data-test-subj="globalLoadingIndicator"]') with timeout=1500
[00:14:15]                     │ debg --- retry.tryForTime error: [data-test-subj="globalLoadingIndicator"] is not displayed
[00:14:15]                     │ debg TestSubjects.exists(globalLoadingIndicator-hidden)
[00:14:15]                     │ debg Find.existsByCssSelector('[data-test-subj="globalLoadingIndicator-hidden"]') with timeout=100000
[00:14:15]                     │ debg TestSubjects.exists(newItemButton)
[00:14:15]                     │ debg Find.existsByDisplayedByCssSelector('[data-test-subj="newItemButton"]') with timeout=10000
[00:14:15]                     │ debg TestSubjects.click(newItemButton)
[00:14:15]                     │ debg Find.clickByCssSelector('[data-test-subj="newItemButton"]') with timeout=10000
[00:14:15]                     │ debg Find.findByCssSelector('[data-test-subj="newItemButton"]') with timeout=10000
[00:14:16]                     │ debg TestSubjects.find(visNewDialogTypes)
[00:14:16]                     │ debg Find.findByCssSelector('[data-test-subj="visNewDialogTypes"]') with timeout=10000
[00:14:16]                     │ debg TestSubjects.click(visType-metrics)
[00:14:16]                     │ debg Find.clickByCssSelector('[data-test-subj="visType-metrics"]') with timeout=10000
[00:14:16]                     │ debg Find.findByCssSelector('[data-test-subj="visType-metrics"]') with timeout=10000
[00:14:16]                     │ debg browser[log] "^ A single error about an inline script not firing due to content security policy is expected!"
[00:14:16]                     │ debg isGlobalLoadingIndicatorVisible
[00:14:16]                     │ debg TestSubjects.exists(globalLoadingIndicator)
[00:14:16]                     │ debg Find.existsByDisplayedByCssSelector('[data-test-subj="globalLoadingIndicator"]') with timeout=1500
[00:14:18]                     │ debg --- retry.tryForTime error: [data-test-subj="globalLoadingIndicator"] is not displayed
[00:14:18]                     │ debg TestSubjects.exists(globalLoadingIndicator-hidden)
[00:14:18]                     │ debg Find.existsByCssSelector('[data-test-subj="globalLoadingIndicator-hidden"]') with timeout=100000
[00:14:18]                     │ debg TestSubjects.exists(tvbVisEditor)
[00:14:18]                     │ debg Find.existsByDisplayedByCssSelector('[data-test-subj="tvbVisEditor"]') with timeout=20000
[00:14:19]                   └-> "before each" hook
[00:14:19]                     │ debg navigateToActualUrl http://localhost:61231/app/visualize#create?type=metrics
[00:14:19]                     │ debg browser[log] "^ A single error about an inline script not firing due to content security policy is expected!"
[00:14:19]                     │ debg currentUrl = http://localhost:61231/app/visualize#create?type=metrics
[00:14:19]                     │          appUrl = http://localhost:61231/app/visualize#create?type=metrics
[00:14:19]                     │ debg TestSubjects.find(kibanaChrome)
[00:14:19]                     │ debg Find.findByCssSelector('[data-test-subj="kibanaChrome"]') with timeout=60000
[00:14:20]                     │ debg Wait for initializing TSVB editor
[00:14:20]                     │ debg TestSubjects.exists(tvbVisEditor)
[00:14:20]                     │ debg Find.existsByDisplayedByCssSelector('[data-test-subj="tvbVisEditor"]') with timeout=20000
[00:14:21]                     │ debg Set absolute time range from "Sep 19, 2015 @ 06:31:44.000" to "Sep 22, 2015 @ 18:31:44.000"
[00:14:21]                     │ debg Setting absolute range to Sep 19, 2015 @ 06:31:44.000 to Sep 22, 2015 @ 18:31:44.000
[00:14:21]                     │ debg TestSubjects.exists(superDatePickerToggleQuickMenuButton)
[00:14:21]                     │ debg Find.existsByDisplayedByCssSelector('[data-test-subj="superDatePickerToggleQuickMenuButton"]') with timeout=20000
[00:14:21]                     │ debg TestSubjects.exists(superDatePickerShowDatesButton)
[00:14:21]                     │ debg Find.existsByDisplayedByCssSelector('[data-test-subj="superDatePickerShowDatesButton"]') with timeout=2500
[00:14:21]                     │ debg TestSubjects.click(superDatePickerShowDatesButton)
[00:14:21]                     │ debg Find.clickByCssSelector('[data-test-subj="superDatePickerShowDatesButton"]') with timeout=10000
[00:14:21]                     │ debg Find.findByCssSelector('[data-test-subj="superDatePickerShowDatesButton"]') with timeout=10000
[00:14:21]                     │ debg TestSubjects.exists(superDatePickerstartDatePopoverButton)
[00:14:21]                     │ debg Find.existsByDisplayedByCssSelector('[data-test-subj="superDatePickerstartDatePopoverButton"]') with timeout=2500
[00:14:21]                     │ debg TestSubjects.click(superDatePickerendDatePopoverButton)
[00:14:21]                     │ debg Find.clickByCssSelector('[data-test-subj="superDatePickerendDatePopoverButton"]') with timeout=10000
[00:14:21]                     │ debg Find.findByCssSelector('[data-test-subj="superDatePickerendDatePopoverButton"]') with timeout=10000
[00:14:21]                     │ debg Find.findByCssSelector('div.euiPopover__panel-isOpen') with timeout=10000
[00:14:21]                     │ debg TestSubjects.click(superDatePickerAbsoluteTab)
[00:14:21]                     │ debg Find.clickByCssSelector('[data-test-subj="superDatePickerAbsoluteTab"]') with timeout=10000
[00:14:21]                     │ debg Find.findByCssSelector('[data-test-subj="superDatePickerAbsoluteTab"]') with timeout=10000
[00:14:22]                     │ debg TestSubjects.click(superDatePickerAbsoluteDateInput)
[00:14:22]                     │ debg Find.clickByCssSelector('[data-test-subj="superDatePickerAbsoluteDateInput"]') with timeout=10000
[00:14:22]                     │ debg Find.findByCssSelector('[data-test-subj="superDatePickerAbsoluteDateInput"]') with timeout=10000
[00:14:22]                     │ debg TestSubjects.find(superDatePickerAbsoluteDateInput)
[00:14:22]                     │ debg Find.findByCssSelector('[data-test-subj="superDatePickerAbsoluteDateInput"]') with timeout=10000
[00:14:23]                     │ debg TestSubjects.click(superDatePickerstartDatePopoverButton)
[00:14:23]                     │ debg Find.clickByCssSelector('[data-test-subj="superDatePickerstartDatePopoverButton"]') with timeout=10000
[00:14:23]                     │ debg Find.findByCssSelector('[data-test-subj="superDatePickerstartDatePopoverButton"]') with timeout=10000
[00:14:23]                     │ debg Find.waitForElementStale with timeout=10000
[00:14:23]                     │ debg Find.findByCssSelector('div.euiPopover__panel-isOpen') with timeout=10000
[00:14:23]                     │ debg TestSubjects.click(superDatePickerAbsoluteTab)
[00:14:23]                     │ debg Find.clickByCssSelector('[data-test-subj="superDatePickerAbsoluteTab"]') with timeout=10000
[00:14:23]                     │ debg Find.findByCssSelector('[data-test-subj="superDatePickerAbsoluteTab"]') with timeout=10000
[00:14:24]                     │ debg TestSubjects.click(superDatePickerAbsoluteDateInput)
[00:14:24]                     │ debg Find.clickByCssSelector('[data-test-subj="superDatePickerAbsoluteDateInput"]') with timeout=10000
[00:14:24]                     │ debg Find.findByCssSelector('[data-test-subj="superDatePickerAbsoluteDateInput"]') with timeout=10000
[00:14:24]                     │ debg TestSubjects.find(superDatePickerAbsoluteDateInput)
[00:14:24]                     │ debg Find.findByCssSelector('[data-test-subj="superDatePickerAbsoluteDateInput"]') with timeout=10000
[00:14:25]                     │ debg TestSubjects.exists(superDatePickerApplyTimeButton)
[00:14:25]                     │ debg Find.existsByDisplayedByCssSelector('[data-test-subj="superDatePickerApplyTimeButton"]') with timeout=2500
[00:14:27]                     │ debg --- retry.tryForTime error: [data-test-subj="superDatePickerApplyTimeButton"] is not displayed
[00:14:28]                     │ debg TestSubjects.click(querySubmitButton)
[00:14:28]                     │ debg Find.clickByCssSelector('[data-test-subj="querySubmitButton"]') with timeout=10000
[00:14:28]                     │ debg Find.findByCssSelector('[data-test-subj="querySubmitButton"]') with timeout=10000
[00:14:28]                     │ debg Find.waitForElementStale with timeout=10000
[00:14:28]                     │ debg TestSubjects.exists(globalLoadingIndicator-hidden)
[00:14:28]                     │ debg Find.existsByCssSelector('[data-test-subj="globalLoadingIndicator-hidden"]') with timeout=100000
[00:14:28]                     │ debg ... sleep(2000) start
[00:14:30]                     │ debg ... sleep(2000) end
[00:14:30]                     │ debg TestSubjects.find(metricTsvbTypeBtn)
[00:14:30]                     │ debg Find.findByCssSelector('[data-test-subj="metricTsvbTypeBtn"]') with timeout=10000
[00:14:31]                     │ debg TestSubjects.exists(tsvbMetricValue)
[00:14:31]                     │ debg Find.existsByDisplayedByCssSelector('[data-test-subj="tsvbMetricValue"]') with timeout=20000
[00:14:31]                   │ debg TestSubjects.getAttribute(openInspectorButton, disabled, tryTimeout=120000, findTimeout=10000)
[00:14:31]                   │ debg TestSubjects.find(openInspectorButton)
[00:14:31]                   │ debg Find.findByCssSelector('[data-test-subj="openInspectorButton"]') with timeout=10000
[00:14:31]                   └- ✓ pass  (29ms) "visualize app  visual builder metric should not have inspector enabled"
[00:14:31]                 └-> should show correct data
[00:14:31]                   └-> "before each" hook: global before each
[00:14:31]                   └-> "before each" hook
[00:14:31]                     │ debg navigating to visualize url: http://localhost:61231/app/visualize#/
[00:14:31]                     │ debg navigate to: http://localhost:61231/app/visualize#/
[00:14:31]                     │ debg browser[log] "^ A single error about an inline script not firing due to content security policy is expected!"
[00:14:31]                     │ debg ... sleep(700) start
[00:14:32]                     │ debg ... sleep(700) end
[00:14:32]                     │ debg returned from get, calling refresh
[00:14:32]                     │ERROR browser[error] (new AbortError("The operation was aborted. ", (void 0)))
[00:14:32]                     │ debg browser[log] "^ A single error about an inline script not firing due to content security policy is expected!"
[00:14:33]                     │ debg currentUrl = http://localhost:61231/app/visualize#/
[00:14:33]                     │          appUrl = http://localhost:61231/app/visualize#/
[00:14:33]                     │ debg TestSubjects.find(kibanaChrome)
[00:14:33]                     │ debg Find.findByCssSelector('[data-test-subj="kibanaChrome"]') with timeout=60000
[00:14:34]                     │ debg ... sleep(501) start
[00:14:34]                     │ debg ... sleep(501) end
[00:14:34]                     │ debg in navigateTo url = http://localhost:61231/app/visualize#/
[00:14:34]                     │ debg TestSubjects.exists(statusPageContainer)
[00:14:34]                     │ debg Find.existsByDisplayedByCssSelector('[data-test-subj="statusPageContainer"]') with timeout=2500
[00:14:37]                     │ debg --- retry.tryForTime error: [data-test-subj="statusPageContainer"] is not displayed
[00:14:37]                     │ debg isGlobalLoadingIndicatorVisible
[00:14:37]                     │ debg TestSubjects.exists(globalLoadingIndicator)
[00:14:37]                     │ debg Find.existsByDisplayedByCssSelector('[data-test-subj="globalLoadingIndicator"]') with timeout=1500
[00:14:39]                     │ debg --- retry.tryForTime error: [data-test-subj="globalLoadingIndicator"] is not displayed
[00:14:39]                     │ debg TestSubjects.exists(globalLoadingIndicator-hidden)
[00:14:39]                     │ debg Find.existsByCssSelector('[data-test-subj="globalLoadingIndicator-hidden"]') with timeout=100000
[00:14:39]                     │ debg TestSubjects.exists(newItemButton)
[00:14:39]                     │ debg Find.existsByDisplayedByCssSelector('[data-test-subj="newItemButton"]') with timeout=10000
[00:14:39]                     │ debg TestSubjects.click(newItemButton)
[00:14:39]                     │ debg Find.clickByCssSelector('[data-test-subj="newItemButton"]') with timeout=10000
[00:14:39]                     │ debg Find.findByCssSelector('[data-test-subj="newItemButton"]') with timeout=10000
[00:14:40]                     │ debg TestSubjects.find(visNewDialogTypes)
[00:14:40]                     │ debg Find.findByCssSelector('[data-test-subj="visNewDialogTypes"]') with timeout=10000
[00:14:40]                     │ debg TestSubjects.click(visType-metrics)
[00:14:40]                     │ debg Find.clickByCssSelector('[data-test-subj="visType-metrics"]') with timeout=10000
[00:14:40]                     │ debg Find.findByCssSelector('[data-test-subj="visType-metrics"]') with timeout=10000
[00:14:40]                     │ debg browser[log] "^ A single error about an inline script not firing due to content security policy is expected!"
[00:14:40]                     │ debg isGlobalLoadingIndicatorVisible
[00:14:40]                     │ debg TestSubjects.exists(globalLoadingIndicator)
[00:14:40]                     │ debg Find.existsByDisplayedByCssSelector('[data-test-subj="globalLoadingIndicator"]') with timeout=1500
[00:14:42]                     │ debg --- retry.tryForTime error: [data-test-subj="globalLoadingIndicator"] is not displayed
[00:14:43]                     │ debg TestSubjects.exists(globalLoadingIndicator-hidden)
[00:14:43]                     │ debg Find.existsByCssSelector('[data-test-subj="globalLoadingIndicator-hidden"]') with timeout=100000
[00:14:43]                     │ debg TestSubjects.exists(tvbVisEditor)
[00:14:43]                     │ debg Find.existsByDisplayedByCssSelector('[data-test-subj="tvbVisEditor"]') with timeout=20000
[00:14:43]                   └-> "before each" hook
[00:14:43]                     │ debg navigateToActualUrl http://localhost:61231/app/visualize#create?type=metrics
[00:14:43]                     │ debg browser[log] "^ A single error about an inline script not firing due to content security policy is expected!"
[00:14:44]                     │ debg currentUrl = http://localhost:61231/app/visualize#create?type=metrics
[00:14:44]                     │          appUrl = http://localhost:61231/app/visualize#create?type=metrics
[00:14:44]                     │ debg TestSubjects.find(kibanaChrome)
[00:14:44]                     │ debg Find.findByCssSelector('[data-test-subj="kibanaChrome"]') with timeout=60000
[00:14:44]                     │ debg Wait for initializing TSVB editor
[00:14:44]                     │ debg TestSubjects.exists(tvbVisEditor)
[00:14:44]                     │ debg Find.existsByDisplayedByCssSelector('[data-test-subj="tvbVisEditor"]') with timeout=20000
[00:14:45]                     │ debg Set absolute time range from "Sep 19, 2015 @ 06:31:44.000" to "Sep 22, 2015 @ 18:31:44.000"
[00:14:45]                     │ debg Setting absolute range to Sep 19, 2015 @ 06:31:44.000 to Sep 22, 2015 @ 18:31:44.000
[00:14:45]                     │ debg TestSubjects.exists(superDatePickerToggleQuickMenuButton)
[00:14:45]                     │ debg Find.existsByDisplayedByCssSelector('[data-test-subj="superDatePickerToggleQuickMenuButton"]') with timeout=20000
[00:14:45]                     │ debg TestSubjects.exists(superDatePickerShowDatesButton)
[00:14:45]                     │ debg Find.existsByDisplayedByCssSelector('[data-test-subj="superDatePickerShowDatesButton"]') with timeout=2500
[00:14:45]                     │ debg TestSubjects.click(superDatePickerShowDatesButton)
[00:14:45]                     │ debg Find.clickByCssSelector('[data-test-subj="superDatePickerShowDatesButton"]') with timeout=10000
[00:14:45]                     │ debg Find.findByCssSelector('[data-test-subj="superDatePickerShowDatesButton"]') with timeout=10000
[00:14:45]                     │ debg TestSubjects.exists(superDatePickerstartDatePopoverButton)
[00:14:45]                     │ debg Find.existsByDisplayedByCssSelector('[data-test-subj="superDatePickerstartDatePopoverButton"]') with timeout=2500
[00:14:45]                     │ debg TestSubjects.click(superDatePickerendDatePopoverButton)
[00:14:45]                     │ debg Find.clickByCssSelector('[data-test-subj="superDatePickerendDatePopoverButton"]') with timeout=10000
[00:14:45]                     │ debg Find.findByCssSelector('[data-test-subj="superDatePickerendDatePopoverButton"]') with timeout=10000
[00:14:46]                     │ debg Find.findByCssSelector('div.euiPopover__panel-isOpen') with timeout=10000
[00:14:46]                     │ debg TestSubjects.click(superDatePickerAbsoluteTab)
[00:14:46]                     │ debg Find.clickByCssSelector('[data-test-subj="superDatePickerAbsoluteTab"]') with timeout=10000
[00:14:46]                     │ debg Find.findByCssSelector('[data-test-subj="superDatePickerAbsoluteTab"]') with timeout=10000
[00:14:46]                     │ debg TestSubjects.click(superDatePickerAbsoluteDateInput)
[00:14:46]                     │ debg Find.clickByCssSelector('[data-test-subj="superDatePickerAbsoluteDateInput"]') with timeout=10000
[00:14:46]                     │ debg Find.findByCssSelector('[data-test-subj="superDatePickerAbsoluteDateInput"]') with timeout=10000
[00:14:46]                     │ debg TestSubjects.find(superDatePickerAbsoluteDateInput)
[00:14:46]                     │ debg Find.findByCssSelector('[data-test-subj="superDatePickerAbsoluteDateInput"]') with timeout=10000
[00:14:47]                     │ debg TestSubjects.click(superDatePickerstartDatePopoverButton)
[00:14:47]                     │ debg Find.clickByCssSelector('[data-test-subj="superDatePickerstartDatePopoverButton"]') with timeout=10000
[00:14:47]                     │ debg Find.findByCssSelector('[data-test-subj="superDatePickerstartDatePopoverButton"]') with timeout=10000
[00:14:48]                     │ debg Find.waitForElementStale with timeout=10000
[00:14:48]                     │ debg Find.findByCssSelector('div.euiPopover__panel-isOpen') with timeout=10000
[00:14:48]                     │ debg TestSubjects.click(superDatePickerAbsoluteTab)
[00:14:48]                     │ debg Find.clickByCssSelector('[data-test-subj="superDatePickerAbsoluteTab"]') with timeout=10000
[00:14:48]                     │ debg Find.findByCssSelector('[data-test-subj="superDatePickerAbsoluteTab"]') with timeout=10000
[00:14:48]                     │ debg TestSubjects.click(superDatePickerAbsoluteDateInput)
[00:14:48]                     │ debg Find.clickByCssSelector('[data-test-subj="superDatePickerAbsoluteDateInput"]') with timeout=10000
[00:14:48]                     │ debg Find.findByCssSelector('[data-test-subj="superDatePickerAbsoluteDateInput"]') with timeout=10000
[00:14:48]                     │ debg TestSubjects.find(superDatePickerAbsoluteDateInput)
[00:14:48]                     │ debg Find.findByCssSelector('[data-test-subj="superDatePickerAbsoluteDateInput"]') with timeout=10000
[00:14:49]                     │ debg TestSubjects.exists(superDatePickerApplyTimeButton)
[00:14:49]                     │ debg Find.existsByDisplayedByCssSelector('[data-test-subj="superDatePickerApplyTimeButton"]') with timeout=2500
[00:14:52]                     │ debg --- retry.tryForTime error: [data-test-subj="superDatePickerApplyTimeButton"] is not displayed
[00:14:52]                     │ debg TestSubjects.click(querySubmitButton)
[00:14:52]                     │ debg Find.clickByCssSelector('[data-test-subj="querySubmitButton"]') with timeout=10000
[00:14:52]                     │ debg Find.findByCssSelector('[data-test-subj="querySubmitButton"]') with timeout=10000
[00:14:52]                     │ debg Find.waitForElementStale with timeout=10000
[00:14:53]                     │ debg TestSubjects.exists(globalLoadingIndicator-hidden)
[00:14:53]                     │ debg Find.existsByCssSelector('[data-test-subj="globalLoadingIndicator-hidden"]') with timeout=100000
[00:14:53]                     │ debg ... sleep(2000) start
[00:14:55]                     │ debg ... sleep(2000) end
[00:14:55]                     │ debg TestSubjects.find(metricTsvbTypeBtn)
[00:14:55]                     │ debg Find.findByCssSelector('[data-test-subj="metricTsvbTypeBtn"]') with timeout=10000
[00:14:55]                     │ debg TestSubjects.exists(tsvbMetricValue)
[00:14:55]                     │ debg Find.existsByDisplayedByCssSelector('[data-test-subj="tsvbMetricValue"]') with timeout=20000
[00:14:56]                   │ debg Waiting up to 20000ms for rendering count to stabilize...
[00:14:56]                   │ debg TestSubjects.find(visualizationLoader)
[00:14:56]                   │ debg Find.findByCssSelector('[data-test-subj="visualizationLoader"]') with timeout=10000
[00:14:56]                   │ debg -- firstCount=3
[00:14:56]                   │ debg ... sleep(2000) start
[00:14:58]                   │ debg ... sleep(2000) end
[00:14:58]                   │ debg TestSubjects.find(visualizationLoader)
[00:14:58]                   │ debg Find.findByCssSelector('[data-test-subj="visualizationLoader"]') with timeout=10000
[00:14:58]                   │ debg -- secondCount=3
[00:14:58]                   │ debg Find.findByCssSelector('.tvbVisMetric__value--primary') with timeout=10000
[00:14:58]                   └- ✓ pass  (2.2s) "visualize app  visual builder metric should show correct data"
[00:14:58]                 └-> should show correct data with Math Aggregation
[00:14:58]                   └-> "before each" hook: global before each
[00:14:58]                   └-> "before each" hook
[00:14:58]                     │ debg navigating to visualize url: http://localhost:61231/app/visualize#/
[00:14:58]                     │ debg navigate to: http://localhost:61231/app/visualize#/
[00:14:58]                     │ debg browser[log] "^ A single error about an inline script not firing due to content security policy is expected!"
[00:14:58]                     │ debg ... sleep(700) start
[00:14:59]                     │ debg ... sleep(700) end
[00:14:59]                     │ debg returned from get, calling refresh
[00:15:00]                     │ debg browser[log] "^ A single error about an inline script not firing due to content security policy is expected!"
[00:15:01]                     │ debg currentUrl = http://localhost:61231/app/visualize#/
[00:15:01]                     │          appUrl = http://localhost:61231/app/visualize#/
[00:15:01]                     │ debg TestSubjects.find(kibanaChrome)
[00:15:01]                     │ debg Find.findByCssSelector('[data-test-subj="kibanaChrome"]') with timeout=60000
[00:15:03]                     │ debg ... sleep(501) start
[00:15:03]                     │ debg ... sleep(501) end
[00:15:03]                     │ debg in navigateTo url = http://localhost:61231/app/visualize#/?_g=(filters:!(),refreshInterval:(pause:!t,value:0),time:(from:now-15m,to:now))
[00:15:03]                     │ debg --- retry.try error: URL changed, waiting for it to settle
[00:15:04]                     │ debg ... sleep(501) start
[00:15:04]                     │ debg ... sleep(501) end
[00:15:04]                     │ debg in navigateTo url = http://localhost:61231/app/visualize#/?_g=(filters:!(),refreshInterval:(pause:!t,value:0),time:(from:now-15m,to:now))
[00:15:04]                     │ debg TestSubjects.exists(statusPageContainer)
[00:15:04]                     │ debg Find.existsByDisplayedByCssSelector('[data-test-subj="statusPageContainer"]') with timeout=2500
[00:15:07]                     │ debg --- retry.tryForTime error: [data-test-subj="statusPageContainer"] is not displayed
[00:15:07]                     │ debg isGlobalLoadingIndicatorVisible
[00:15:07]                     │ debg TestSubjects.exists(globalLoadingIndicator)
[00:15:07]                     │ debg Find.existsByDisplayedByCssSelector('[data-test-subj="globalLoadingIndicator"]') with timeout=1500
[00:15:09]                     │ debg --- retry.tryForTime error: [data-test-subj="globalLoadingIndicator"] is not displayed
[00:15:09]                     │ debg TestSubjects.exists(globalLoadingIndicator-hidden)
[00:15:09]                     │ debg Find.existsByCssSelector('[data-test-subj="globalLoadingIndicator-hidden"]') with timeout=100000
[00:15:09]                     │ debg TestSubjects.exists(newItemButton)
[00:15:09]                     │ debg Find.existsByDisplayedByCssSelector('[data-test-subj="newItemButton"]') with timeout=10000
[00:15:09]                     │ debg TestSubjects.click(newItemButton)
[00:15:09]                     │ debg Find.clickByCssSelector('[data-test-subj="newItemButton"]') with timeout=10000
[00:15:09]                     │ debg Find.findByCssSelector('[data-test-subj="newItemButton"]') with timeout=10000
[00:15:10]                     │ debg TestSubjects.find(visNewDialogTypes)
[00:15:10]                     │ debg Find.findByCssSelector('[data-test-subj="visNewDialogTypes"]') with timeout=10000
[00:15:10]                     │ debg TestSubjects.click(visType-metrics)
[00:15:10]                     │ debg Find.clickByCssSelector('[data-test-subj="visType-metrics"]') with timeout=10000
[00:15:10]                     │ debg Find.findByCssSelector('[data-test-subj="visType-metrics"]') with timeout=10000
[00:15:10]                     │ debg browser[log] "^ A single error about an inline script not firing due to content security policy is expected!"
[00:15:10]                     │ debg isGlobalLoadingIndicatorVisible
[00:15:10]                     │ debg TestSubjects.exists(globalLoadingIndicator)
[00:15:10]                     │ debg Find.existsByDisplayedByCssSelector('[data-test-subj="globalLoadingIndicator"]') with timeout=1500
[00:15:13]                     │ debg --- retry.tryForTime error: [data-test-subj="globalLoadingIndicator"] is not displayed
[00:15:13]                     │ debg TestSubjects.exists(globalLoadingIndicator-hidden)
[00:15:13]                     │ debg Find.existsByCssSelector('[data-test-subj="globalLoadingIndicator-hidden"]') with timeout=100000
[00:15:13]                     │ debg TestSubjects.exists(tvbVisEditor)
[00:15:13]                     │ debg Find.existsByDisplayedByCssSelector('[data-test-subj="tvbVisEditor"]') with timeout=20000
[00:15:13]                   └-> "before each" hook
[00:15:13]                     │ debg navigateToActualUrl http://localhost:61231/app/visualize#create?type=metrics
[00:15:13]                     │ debg browser[log] "^ A single error about an inline script not firing due to content security policy is expected!"
[00:15:14]                     │ debg currentUrl = http://localhost:61231/app/visualize#create?type=metrics
[00:15:14]                     │          appUrl = http://localhost:61231/app/visualize#create?type=metrics
[00:15:14]                     │ debg TestSubjects.find(kibanaChrome)
[00:15:14]                     │ debg Find.findByCssSelector('[data-test-subj="kibanaChrome"]') with timeout=60000
[00:15:16]                     │ debg Wait for initializing TSVB editor
[00:15:16]                     │ debg TestSubjects.exists(tvbVisEditor)
[00:15:16]                     │ debg Find.existsByDisplayedByCssSelector('[data-test-subj="tvbVisEditor"]') with timeout=20000
[00:15:17]                     │ debg Set absolute time range from "Sep 19, 2015 @ 06:31:44.000" to "Sep 22, 2015 @ 18:31:44.000"
[00:15:17]                     │ debg Setting absolute range to Sep 19, 2015 @ 06:31:44.000 to Sep 22, 2015 @ 18:31:44.000
[00:15:17]                     │ debg TestSubjects.exists(superDatePickerToggleQuickMenuButton)
[00:15:17]                     │ debg Find.existsByDisplayedByCssSelector('[data-test-subj="superDatePickerToggleQuickMenuButton"]') with timeout=20000
[00:15:17]                     │ debg TestSubjects.exists(superDatePickerShowDatesButton)
[00:15:17]                     │ debg Find.existsByDisplayedByCssSelector('[data-test-subj="superDatePickerShowDatesButton"]') with timeout=2500
[00:15:17]                     │ debg TestSubjects.click(superDatePickerShowDatesButton)
[00:15:17]                     │ debg Find.clickByCssSelector('[data-test-subj="superDatePickerShowDatesButton"]') with timeout=10000
[00:15:17]                     │ debg Find.findByCssSelector('[data-test-subj="superDatePickerShowDatesButton"]') with timeout=10000
[00:15:17]                     │ debg TestSubjects.exists(superDatePickerstartDatePopoverButton)
[00:15:17]                     │ debg Find.existsByDisplayedByCssSelector('[data-test-subj="superDatePickerstartDatePopoverButton"]') with timeout=2500
[00:15:17]                     │ debg TestSubjects.click(superDatePickerendDatePopoverButton)
[00:15:17]                     │ debg Find.clickByCssSelector('[data-test-subj="superDatePickerendDatePopoverButton"]') with timeout=10000
[00:15:17]                     │ debg Find.findByCssSelector('[data-test-subj="superDatePickerendDatePopoverButton"]') with timeout=10000
[00:15:18]                     │ debg Find.findByCssSelector('div.euiPopover__panel-isOpen') with timeout=10000
[00:15:18]                     │ debg TestSubjects.click(superDatePickerAbsoluteTab)
[00:15:18]                     │ debg Find.clickByCssSelector('[data-test-subj="superDatePickerAbsoluteTab"]') with timeout=10000
[00:15:18]                     │ debg Find.findByCssSelector('[data-test-subj="superDatePickerAbsoluteTab"]') with timeout=10000
[00:15:18]                     │ debg TestSubjects.click(superDatePickerAbsoluteDateInput)
[00:15:18]                     │ debg Find.clickByCssSelector('[data-test-subj="superDatePickerAbsoluteDateInput"]') with timeout=10000
[00:15:18]                     │ debg Find.findByCssSelector('[data-test-subj="superDatePickerAbsoluteDateInput"]') with timeout=10000
[00:15:18]                     │ debg TestSubjects.find(superDatePickerAbsoluteDateInput)
[00:15:18]                     │ debg Find.findByCssSelector('[data-test-subj="superDatePickerAbsoluteDateInput"]') with timeout=10000
[00:15:19]                     │ debg TestSubjects.click(superDatePickerstartDatePopoverButton)
[00:15:19]                     │ debg Find.clickByCssSelector('[data-test-subj="superDatePickerstartDatePopoverButton"]') with timeout=10000
[00:15:19]                     │ debg Find.findByCssSelector('[data-test-subj="superDatePickerstartDatePopoverButton"]') with timeout=10000
[00:15:20]                     │ debg Find.waitForElementStale with timeout=10000
[00:15:20]                     │ debg Find.findByCssSelector('div.euiPopover__panel-isOpen') with timeout=10000
[00:15:20]                     │ debg TestSubjects.click(superDatePickerAbsoluteTab)
[00:15:20]                     │ debg Find.clickByCssSelector('[data-test-subj="superDatePickerAbsoluteTab"]') with timeout=10000
[00:15:20]                     │ debg Find.findByCssSelector('[data-test-subj="superDatePickerAbsoluteTab"]') with timeout=10000
[00:15:20]                     │ debg TestSubjects.click(superDatePickerAbsoluteDateInput)
[00:15:20]                     │ debg Find.clickByCssSelector('[data-test-subj="superDatePickerAbsoluteDateInput"]') with timeout=10000
[00:15:20]                     │ debg Find.findByCssSelector('[data-test-subj="superDatePickerAbsoluteDateInput"]') with timeout=10000
[00:15:20]                     │ debg TestSubjects.find(superDatePickerAbsoluteDateInput)
[00:15:20]                     │ debg Find.findByCssSelector('[data-test-subj="superDatePickerAbsoluteDateInput"]') with timeout=10000
[00:15:21]                     │ debg TestSubjects.exists(superDatePickerApplyTimeButton)
[00:15:21]                     │ debg Find.existsByDisplayedByCssSelector('[data-test-subj="superDatePickerApplyTimeButton"]') with timeout=2500
[00:15:23]                     │ debg --- retry.tryForTime error: [data-test-subj="superDatePickerApplyTimeButton"] is not displayed
[00:15:24]                     │ debg TestSubjects.click(querySubmitButton)
[00:15:24]                     │ debg Find.clickByCssSelector('[data-test-subj="querySubmitButton"]') with timeout=10000
[00:15:24]                     │ debg Find.findByCssSelector('[data-test-subj="querySubmitButton"]') with timeout=10000
[00:15:25]                     │ debg Find.waitForElementStale with timeout=10000
[00:15:25]                     │ debg TestSubjects.exists(globalLoadingIndicator-hidden)
[00:15:25]                     │ debg Find.existsByCssSelector('[data-test-subj="globalLoadingIndicator-hidden"]') with timeout=100000
[00:15:25]                     │ debg ... sleep(2000) start
[00:15:27]                     │ debg ... sleep(2000) end
[00:15:27]                     │ debg TestSubjects.find(metricTsvbTypeBtn)
[00:15:27]                     │ debg Find.findByCssSelector('[data-test-subj="metricTsvbTypeBtn"]') with timeout=10000
[00:15:27]                     │ debg TestSubjects.exists(tsvbMetricValue)
[00:15:27]                     │ debg Find.existsByDisplayedByCssSelector('[data-test-subj="tsvbMetricValue"]') with timeout=20000
[00:15:27]                   │ debg TestSubjects.findAll(aggSelector)
[00:15:27]                   │ debg Find.allByCssSelector('[data-test-subj="aggSelector"]') with timeout=10000
[00:15:27]                   │ debg TestSubjects.findAll(addMetricAddBtn)
[00:15:27]                   │ debg Find.allByCssSelector('[data-test-subj="addMetricAddBtn"]') with timeout=10000
[00:15:28]                   │ debg Waiting up to 20000ms for rendering count to stabilize...
[00:15:28]                   │ debg TestSubjects.find(visualizationLoader)
[00:15:28]                   │ debg Find.findByCssSelector('[data-test-subj="visualizationLoader"]') with timeout=10000
[00:15:28]                   │ debg -- firstCount=3
[00:15:28]                   │ debg ... sleep(2000) start
[00:15:30]                   │ debg ... sleep(2000) end
[00:15:30]                   │ debg TestSubjects.find(visualizationLoader)
[00:15:30]                   │ debg Find.findByCssSelector('[data-test-subj="visualizationLoader"]') with timeout=10000
[00:15:30]                   │ debg -- secondCount=4
[00:15:30]                   │ debg TestSubjects.find(visualizationLoader)
[00:15:30]                   │ debg Find.findByCssSelector('[data-test-subj="visualizationLoader"]') with timeout=10000
[00:15:31]                   │ debg -- firstCount=4
[00:15:31]                   │ debg ... sleep(2000) start
[00:15:33]                   │ debg ... sleep(2000) end
[00:15:33]                   │ debg TestSubjects.find(visualizationLoader)
[00:15:33]                   │ debg Find.findByCssSelector('[data-test-subj="visualizationLoader"]') with timeout=10000
[00:15:33]                   │ debg -- secondCount=4
[00:15:33]                   │ debg Waiting up to 20000ms for new agg is added...
[00:15:33]                   │ debg TestSubjects.findAll(aggSelector)
[00:15:33]                   │ debg Find.allByCssSelector('[data-test-subj="aggSelector"]') with timeout=10000
[00:15:33]                   │ debg TestSubjects.findAll(aggSelector)
[00:15:33]                   │ debg Find.allByCssSelector('[data-test-subj="aggSelector"]') with timeout=10000
[00:15:33]                   │ debg comboBox.setElement, value: math
[00:15:33]                   │ debg comboBox.isOptionSelected, value: math
[00:15:35]                   │ debg TestSubjects.exists(~comboBoxOptionsList)
[00:15:35]                   │ debg Find.existsByDisplayedByCssSelector('[data-test-subj~="comboBoxOptionsList"]') with timeout=2500
[00:15:35]                   │ debg Find.allByCssSelector('.euiFilterSelectItem[title^="math"]') with timeout=2500
[00:15:38]                   │ debg Find.findByCssSelector('.euiFilterSelectItem') with timeout=5000
[00:15:38]                   │ debg TestSubjects.exists(~comboBoxOptionsList)
[00:15:38]                   │ debg Find.existsByDisplayedByCssSelector('[data-test-subj~="comboBoxOptionsList"]') with timeout=2500
[00:15:41]                   │ debg --- retry.tryForTime error: [data-test-subj~="comboBoxOptionsList"] is not displayed
[00:15:41]                   │ debg isGlobalLoadingIndicatorVisible
[00:15:41]                   │ debg TestSubjects.exists(globalLoadingIndicator)
[00:15:41]                   │ debg Find.existsByDisplayedByCssSelector('[data-test-subj="globalLoadingIndicator"]') with timeout=1500
[00:15:43]                   │ debg --- retry.tryForTime error: [data-test-subj="globalLoadingIndicator"] is not displayed
[00:15:43]                   │ debg TestSubjects.exists(globalLoadingIndicator-hidden)
[00:15:43]                   │ debg Find.existsByCssSelector('[data-test-subj="globalLoadingIndicator-hidden"]') with timeout=100000
[00:15:43]                   │ debg TestSubjects.findAll(varRow)
[00:15:43]                   │ debg Find.allByCssSelector('[data-test-subj="varRow"]') with timeout=10000
[00:15:44]                   │ debg comboBox.setElement, value: Count
[00:15:44]                   │ debg comboBox.isOptionSelected, value: Count
[00:15:46]                   │ debg TestSubjects.exists(~comboBoxOptionsList)
[00:15:46]                   │ debg Find.existsByDisplayedByCssSelector('[data-test-subj~="comboBoxOptionsList"]') with timeout=2500
[00:15:46]                   │ debg Find.allByCssSelector('.euiFilterSelectItem[title^="Count"]') with timeout=2500
[00:15:47]                   │ debg TestSubjects.exists(~comboBoxOptionsList)
[00:15:47]                   │ debg Find.existsByDisplayedByCssSelector('[data-test-subj~="comboBoxOptionsList"]') with timeout=2500
[00:15:49]                   │ debg --- retry.tryForTime error: [data-test-subj~="comboBoxOptionsList"] is not displayed
[00:15:50]                   │ debg isGlobalLoadingIndicatorVisible
[00:15:50]                   │ debg TestSubjects.exists(globalLoadingIndicator)
[00:15:50]                   │ debg Find.existsByDisplayedByCssSelector('[data-test-subj="globalLoadingIndicator"]') with timeout=1500
[00:15:51]                   │ debg --- retry.tryForTime error: [data-test-subj="globalLoadingIndicator"] is not displayed
[00:15:52]                   │ debg TestSubjects.exists(globalLoadingIndicator-hidden)
[00:15:52]                   │ debg Find.existsByCssSelector('[data-test-subj="globalLoadingIndicator-hidden"]') with timeout=100000
[00:15:52]                   │ debg TestSubjects.findAll(mathExpression)
[00:15:52]                   │ debg Find.allByCssSelector('[data-test-subj="mathExpression"]') with timeout=10000
[00:15:52]                   │ debg isGlobalLoadingIndicatorVisible
[00:15:52]                   │ debg TestSubjects.exists(globalLoadingIndicator)
[00:15:52]                   │ debg Find.existsByDisplayedByCssSelector('[data-test-subj="globalLoadingIndicator"]') with timeout=1500
[00:15:54]                   │ debg --- retry.tryForTime error: [data-test-subj="globalLoadingIndicator"] is not displayed
[00:15:54]                   │ debg TestSubjects.exists(globalLoadingIndicator-hidden)
[00:15:54]                   │ debg Find.existsByCssSelector('[data-test-subj="globalLoadingIndicator-hidden"]') with timeout=100000
[00:15:54]                   │ debg Waiting up to 20000ms for rendering count to stabilize...
[00:15:54]                   │ debg TestSubjects.find(visualizationLoader)
[00:15:54]                   │ debg Find.findByCssSelector('[data-test-subj="visualizationLoader"]') with timeout=10000
[00:15:55]                   │ debg -- firstCount=8
[00:15:55]                   │ debg ... sleep(2000) start
[00:15:57]                   │ debg ... sleep(2000) end
[00:15:57]                   │ debg TestSubjects.find(visualizationLoader)
[00:15:57]                   │ debg Find.findByCssSelector('[data-test-subj="visualizationLoader"]') with timeout=10000
[00:15:57]                   │ debg -- secondCount=8
[00:15:57]                   │ debg Find.findByCssSelector('.tvbVisMetric__value--primary') with timeout=10000
[00:15:57]                   └- ✓ pass  (29.8s) "visualize app  visual builder metric should show correct data with Math Aggregation"
[00:15:57]                 └-> should populate fields for basic functions
[00:15:57]                   └-> "before each" hook: global before each
[00:15:57]                   └-> "before each" hook
[00:15:57]                     │ debg navigating to visualize url: http://localhost:61231/app/visualize#/
[00:15:57]                     │ debg navigate to: http://localhost:61231/app/visualize#/
[00:15:57]                     │ debg browser[log] "^ A single error about an inline script not firing due to content security policy is expected!"
[00:15:58]                     │ debg ... sleep(700) start
[00:15:58]                     │ debg ... sleep(700) end
[00:15:58]                     │ debg returned from get, calling refresh
[00:15:59]                     │ERROR browser[error] (new TypeError("NetworkError when attempting to fetch resource.", ""))
[00:15:59]                     │ debg browser[log] "^ A single error about an inline script not firing due to content security policy is expected!"
[00:16:00]                     │ debg currentUrl = http://localhost:61231/app/visualize#/
[00:16:00]                     │          appUrl = http://localhost:61231/app/visualize#/
[00:16:00]                     │ debg TestSubjects.find(kibanaChrome)
[00:16:00]                     │ debg Find.findByCssSelector('[data-test-subj="kibanaChrome"]') with timeout=60000
[00:16:02]                     │ debg ... sleep(501) start
[00:16:02]                     │ debg ... sleep(501) end
[00:16:02]                     │ debg in navigateTo url = http://localhost:61231/app/visualize#/?_g=(filters:!(),refreshInterval:(pause:!t,value:0),time:(from:now-15m,to:now))
[00:16:02]                     │ debg --- retry.try error: URL changed, waiting for it to settle
[00:16:03]                     │ debg ... sleep(501) start
[00:16:03]                     │ debg ... sleep(501) end
[00:16:03]                     │ debg in navigateTo url = http://localhost:61231/app/visualize#/?_g=(filters:!(),refreshInterval:(pause:!t,value:0),time:(from:now-15m,to:now))
[00:16:03]                     │ debg TestSubjects.exists(statusPageContainer)
[00:16:03]                     │ debg Find.existsByDisplayedByCssSelector('[data-test-subj="statusPageContainer"]') with timeout=2500
[00:16:06]                     │ debg --- retry.tryForTime error: [data-test-subj="statusPageContainer"] is not displayed
[00:16:06]                     │ debg isGlobalLoadingIndicatorVisible
[00:16:06]                     │ debg TestSubjects.exists(globalLoadingIndicator)
[00:16:06]                     │ debg Find.existsByDisplayedByCssSelector('[data-test-subj="globalLoadingIndicator"]') with timeout=1500
[00:16:08]                     │ debg --- retry.tryForTime error: [data-test-subj="globalLoadingIndicator"] is not displayed
[00:16:08]                     │ debg TestSubjects.exists(globalLoadingIndicator-hidden)
[00:16:08]                     │ debg Find.existsByCssSelector('[data-test-subj="globalLoadingIndicator-hidden"]') with timeout=100000
[00:16:09]                     │ debg TestSubjects.exists(newItemButton)
[00:16:09]                     │ debg Find.existsByDisplayedByCssSelector('[data-test-subj="newItemButton"]') with timeout=10000
[00:16:10]                     │ debg TestSubjects.click(newItemButton)
[00:16:10]                     │ debg Find.clickByCssSelector('[data-test-subj="newItemButton"]') with timeout=10000
[00:16:10]                     │ debg Find.findByCssSelector('[data-test-subj="newItemButton"]') with timeout=10000
[00:16:10]                     │ debg TestSubjects.find(visNewDialogTypes)
[00:16:10]                     │ debg Find.findByCssSelector('[data-test-subj="visNewDialogTypes"]') with timeout=10000
[00:16:11]                     │ debg TestSubjects.click(visType-metrics)
[00:16:11]                     │ debg Find.clickByCssSelector('[data-test-subj="visType-metrics"]') with timeout=10000
[00:16:11]                     │ debg Find.findByCssSelector('[data-test-subj="visType-metrics"]') with timeout=10000
[00:16:11]                     │ debg browser[log] "^ A single error about an inline script not firing due to content security policy is expected!"
[00:16:11]                     │ debg isGlobalLoadingIndicatorVisible
[00:16:11]                     │ debg TestSubjects.exists(globalLoadingIndicator)
[00:16:11]                     │ debg Find.existsByDisplayedByCssSelector('[data-test-subj="globalLoadingIndicator"]') with timeout=1500
[00:16:14]                     │ debg --- retry.tryForTime error: [data-test-subj="globalLoadingIndicator"] is not displayed
[00:16:14]                     │ debg TestSubjects.exists(globalLoadingIndicator-hidden)
[00:16:14]                     │ debg Find.existsByCssSelector('[data-test-subj="globalLoadingIndicator-hidden"]') with timeout=100000
[00:16:14]                     │ debg TestSubjects.exists(tvbVisEditor)
[00:16:14]                     │ debg Find.existsByDisplayedByCssSelector('[data-test-subj="tvbVisEditor"]') with timeout=20000
[00:16:14]                   └-> "before each" hook
[00:16:14]                     │ debg navigateToActualUrl http://localhost:61231/app/visualize#create?type=metrics
[00:16:15]                     │ debg browser[log] "^ A single error about an inline script not firing due to content security policy is expected!"
[00:16:16]                     │ debg currentUrl = http://localhost:61231/app/visualize#create?type=metrics
[00:16:16]                     │          appUrl = http://localhost:61231/app/visualize#create?type=metrics
[00:16:16]                     │ debg TestSubjects.find(kibanaChrome)
[00:16:16]                     │ debg Find.findByCssSelector('[data-test-subj="kibanaChrome"]') with timeout=60000
[00:16:18]                     │ debg Wait for initializing TSVB editor
[00:16:18]                     │ debg TestSubjects.exists(tvbVisEditor)
[00:16:18]                     │ debg Find.existsByDisplayedByCssSelector('[data-test-subj="tvbVisEditor"]') with timeout=20000
[00:16:19]                     │ debg Set absolute time range from "Sep 19, 2015 @ 06:31:44.000" to "Sep 22, 2015 @ 18:31:44.000"
[00:16:19]                     │ debg Setting absolute range to Sep 19, 2015 @ 06:31:44.000 to Sep 22, 2015 @ 18:31:44.000
[00:16:19]                     │ debg TestSubjects.exists(superDatePickerToggleQuickMenuButton)
[00:16:19]                     │ debg Find.existsByDisplayedByCssSelector('[data-test-subj="superDatePickerToggleQuickMenuButton"]') with timeout=20000
[00:16:19]                     │ debg TestSubjects.exists(superDatePickerShowDatesButton)
[00:16:19]                     │ debg Find.existsByDisplayedByCssSelector('[data-test-subj="superDatePickerShowDatesButton"]') with timeout=2500
[00:16:19]                     │ debg TestSubjects.click(superDatePickerShowDatesButton)
[00:16:19]                     │ debg Find.clickByCssSelector('[data-test-subj="superDatePickerShowDatesButton"]') with timeout=10000
[00:16:19]                     │ debg Find.findByCssSelector('[data-test-subj="superDatePickerShowDatesButton"]') with timeout=10000
[00:16:20]                     │ debg TestSubjects.exists(superDatePickerstartDatePopoverButton)
[00:16:20]                     │ debg Find.existsByDisplayedByCssSelector('[data-test-subj="superDatePickerstartDatePopoverButton"]') with timeout=2500
[00:16:20]                     │ debg TestSubjects.click(superDatePickerendDatePopoverButton)
[00:16:20]                     │ debg Find.clickByCssSelector('[data-test-subj="superDatePickerendDatePopoverButton"]') with timeout=10000
[00:16:20]                     │ debg Find.findByCssSelector('[data-test-subj="superDatePickerendDatePopoverButton"]') with timeout=10000
[00:16:20]                     │ debg Find.findByCssSelector('div.euiPopover__panel-isOpen') with timeout=10000
[00:16:20]                     │ debg TestSubjects.click(superDatePickerAbsoluteTab)
[00:16:20]                     │ debg Find.clickByCssSelector('[data-test-subj="superDatePickerAbsoluteTab"]') with timeout=10000
[00:16:20]                     │ debg Find.findByCssSelector('[data-test-subj="superDatePickerAbsoluteTab"]') with timeout=10000
[00:16:21]                     │ debg TestSubjects.click(superDatePickerAbsoluteDateInput)
[00:16:21]                     │ debg Find.clickByCssSelector('[data-test-subj="superDatePickerAbsoluteDateInput"]') with timeout=10000
[00:16:21]                     │ debg Find.findByCssSelector('[data-test-subj="superDatePickerAbsoluteDateInput"]') with timeout=10000
[00:16:21]                     │ debg TestSubjects.find(superDatePickerAbsoluteDateInput)
[00:16:21]                     │ debg Find.findByCssSelector('[data-test-subj="superDatePickerAbsoluteDateInput"]') with timeout=10000
[00:16:23]                     │ debg TestSubjects.click(superDatePickerstartDatePopoverButton)
[00:16:23]                     │ debg Find.clickByCssSelector('[data-test-subj="superDatePickerstartDatePopoverButton"]') with timeout=10000
[00:16:23]                     │ debg Find.findByCssSelector('[data-test-subj="superDatePickerstartDatePopoverButton"]') with timeout=10000
[00:16:24]                     │ debg Find.waitForElementStale with timeout=10000
[00:16:24]                     │ debg Find.findByCssSelector('div.euiPopover__panel-isOpen') with timeout=10000
[00:16:24]                     │ debg TestSubjects.click(superDatePickerAbsoluteTab)
[00:16:24]                     │ debg Find.clickByCssSelector('[data-test-subj="superDatePickerAbsoluteTab"]') with timeout=10000
[00:16:24]                     │ debg Find.findByCssSelector('[data-test-subj="superDatePickerAbsoluteTab"]') with timeout=10000
[00:16:24]                     │ debg TestSubjects.click(superDatePickerAbsoluteDateInput)
[00:16:24]                     │ debg Find.clickByCssSelector('[data-test-subj="superDatePickerAbsoluteDateInput"]') with timeout=10000
[00:16:24]                     │ debg Find.findByCssSelector('[data-test-subj="superDatePickerAbsoluteDateInput"]') with timeout=10000
[00:16:25]                     │ debg TestSubjects.find(superDatePickerAbsoluteDateInput)
[00:16:25]                     │ debg Find.findByCssSelector('[data-test-subj="superDatePickerAbsoluteDateInput"]') with timeout=10000
[00:16:26]                     │ debg TestSubjects.exists(superDatePickerApplyTimeButton)
[00:16:26]                     │ debg Find.existsByDisplayedByCssSelector('[data-test-subj="superDatePickerApplyTimeButton"]') with timeout=2500
[00:16:28]                     │ debg --- retry.tryForTime error: [data-test-subj="superDatePickerApplyTimeButton"] is not displayed
[00:16:29]                     │ debg TestSubjects.click(querySubmitButton)
[00:16:29]                     │ debg Find.clickByCssSelector('[data-test-subj="querySubmitButton"]') with timeout=10000
[00:16:29]                     │ debg Find.findByCssSelector('[data-test-subj="querySubmitButton"]') with timeout=10000
[00:16:29]                     │ debg Find.waitForElementStale with timeout=10000
[00:16:30]                     │ debg TestSubjects.exists(globalLoadingIndicator-hidden)
[00:16:30]                     │ debg Find.existsByCssSelector('[data-test-subj="globalLoadingIndicator-hidden"]') with timeout=100000
[00:16:30]                     │ debg ... sleep(2000) start
[00:16:32]                     │ debg ... sleep(2000) end
[00:16:32]                     │ debg TestSubjects.find(metricTsvbTypeBtn)
[00:16:32]                     │ debg Find.findByCssSelector('[data-test-subj="metricTsvbTypeBtn"]') with timeout=10000
[00:16:32]                     │ debg TestSubjects.exists(tsvbMetricValue)
[00:16:32]                     │ debg Find.existsByDisplayedByCssSelector('[data-test-subj="tsvbMetricValue"]') with timeout=20000
[00:16:32]                   │ debg TestSubjects.findAll(aggSelector)
[00:16:32]                   │ debg Find.allByCssSelector('[data-test-subj="aggSelector"]') with timeout=10000
[00:16:33]                   │ debg comboBox.setElement, value: Average
[00:16:33]                   │ debg comboBox.isOptionSelected, value: Average
[00:16:35]                   │ debg TestSubjects.exists(~comboBoxOptionsList)
[00:16:35]                   │ debg Find.existsByDisplayedByCssSelector('[data-test-subj~="comboBoxOptionsList"]') with timeout=2500
[00:16:35]                   │ debg Find.allByCssSelector('.euiFilterSelectItem[title^="Average"]') with timeout=2500
[00:16:36]                   │ debg TestSubjects.exists(~comboBoxOptionsList)
[00:16:36]                   │ debg Find.existsByDisplayedByCssSelector('[data-test-subj~="comboBoxOptionsList"]') with timeout=2500
[00:16:38]                   │ debg --- retry.tryForTime error: [data-test-subj~="comboBoxOptionsList"] is not displayed
[00:16:39]                   │ debg isGlobalLoadingIndicatorVisible
[00:16:39]                   │ debg TestSubjects.exists(globalLoadingIndicator)
[00:16:39]                   │ debg Find.existsByDisplayedByCssSelector('[data-test-subj="globalLoadingIndicator"]') with timeout=1500
[00:16:40]                   │ debg --- retry.tryForTime error: [data-test-subj="globalLoadingIndicator"] is not displayed
[00:16:41]                   │ debg TestSubjects.exists(globalLoadingIndicator-hidden)
[00:16:41]                   │ debg Find.existsByCssSelector('[data-test-subj="globalLoadingIndicator-hidden"]') with timeout=100000
[00:16:41]                   │ debg TestSubjects.findAll(aggRow)
[00:16:41]                   │ debg Find.allByCssSelector('[data-test-subj="aggRow"]') with timeout=10000
[00:16:41]                   │ debg comboBox.setElement, value: machine.ram
[00:16:41]                   │ debg comboBox.isOptionSelected, value: machine.ram
[00:16:44]                   │ debg TestSubjects.exists(~comboBoxOptionsList)
[00:16:44]                   │ debg Find.existsByDisplayedByCssSelector('[data-test-subj~="comboBoxOptionsList"]') with timeout=2500
[00:16:46]                   │ debg --- retry.tryForTime error: [data-test-subj~="comboBoxOptionsList"] is not displayed
[00:16:57]                   │ info Taking screenshot "/dev/shm/workspace/parallel/23/kibana/test/functional/screenshots/failure/visualize app  visual builder metric should populate fields for basic functions.png"
[00:16:57]                   │ info Current URL is: http://localhost:61231/app/visualize#/create?type=metrics&_g=(filters:!(),refreshInterval:(pause:!t,value:0),time:(from:%272015-09-19T06:31:44.000Z%27,to:%272015-09-22T18:31:44.000Z%27))&_a=(filters:!(),linked:!f,query:(language:kuery,query:%27%27),uiState:(),vis:(aggs:!(),params:(axis_formatter:number,axis_position:left,axis_scale:normal,background_color_rules:!((id:ccf259e0-1dab-11eb-b23f-b17d1a9dbeda)),default_index_pattern:%27logstash-*%27,default_timefield:%27@timestamp%27,id:%2761ca57f0-469d-11e7-af02-69e470af7417%27,index_pattern:%27%27,interval:%27%27,isModelInvalid:!f,series:!((axis_position:right,chart_type:line,color:%2368BC00,fill:0.5,formatter:number,id:%2761ca57f1-469d-11e7-af02-69e470af7417%27,label:%27%27,line_width:1,metrics:!((id:%2761ca57f2-469d-11e7-af02-69e470af7417%27,type:avg)),point_size:1,separate_axis:0,split_color_mode:kibana,split_mode:everything,stacked:none)),show_grid:1,show_legend:1,time_field:%27%27,tooltip_mode:show_all,type:metric),title:%27%27,type:metrics))
[00:16:57]                   │ info Saving page source to: /dev/shm/workspace/parallel/23/kibana/test/functional/failure_debug/html/visualize app  visual builder metric should populate fields for basic functions.html
[00:16:57]                   └- ✖ fail: visualize app  visual builder metric should populate fields for basic functions
[00:16:57]                   │      NoSuchElementError: Unable to locate element: [data-test-subj="comboBoxToggleListButton"]
[00:16:57]                   │       at Object.throwDecodedError (/dev/shm/workspace/kibana/node_modules/selenium-webdriver/lib/error.js:550:15)
[00:16:57]                   │       at parseHttpResponse (/dev/shm/workspace/kibana/node_modules/selenium-webdriver/lib/http.js:565:13)
[00:16:57]                   │       at Executor.execute (/dev/shm/workspace/kibana/node_modules/selenium-webdriver/lib/http.js:491:26)
[00:16:57]                   │       at process._tickCallback (internal/process/next_tick.js:68:7)
[00:16:57]                   │ 
[00:16:57]                   │ 

Stack Trace

{ NoSuchElementError: Unable to locate element: [data-test-subj="comboBoxToggleListButton"]
    at Object.throwDecodedError (/dev/shm/workspace/kibana/node_modules/selenium-webdriver/lib/error.js:550:15)
    at parseHttpResponse (/dev/shm/workspace/kibana/node_modules/selenium-webdriver/lib/http.js:565:13)
    at Executor.execute (/dev/shm/workspace/kibana/node_modules/selenium-webdriver/lib/http.js:491:26)
    at process._tickCallback (internal/process/next_tick.js:68:7)
  name: 'NoSuchElementError',
  remoteStacktrace:
   'WebDriverError@chrome://marionette/content/error.js:175:5\nNoSuchElementError@chrome://marionette/content/error.js:387:5\nelement.find/</<@chrome://marionette/content/element.js:331:16\n' }

Metrics [docs]

@kbn/optimizer bundle module count

id before after diff
lens 564 565 +1
savedObjects 43 46 +3
savedObjectsManagement 135 136 +1
savedObjectsTagging - 51 +51
savedObjectsTaggingOss - 13 +13
total +69

async chunk count

id before after diff
savedObjectsTagging - 3 +3

async chunks size

id before after diff
dashboard 194.1KB 197.4KB +3.3KB
lens 1.0MB 1.0MB +6.4KB
savedObjectsManagement 176.2KB 187.2KB +10.9KB
savedObjectsTagging - 59.3KB +59.3KB
visualize 258.4KB 259.6KB +1.1KB
total +81.1KB

distributable file count

id before after diff
default 42564 42613 +49
oss 22316 22323 +7

page load bundle size

id before after diff
core 544.6KB 545.1KB +556.0B
dashboard 311.2KB 311.4KB +211.0B
kibanaReact 131.7KB 131.8KB +115.0B
savedObjects 77.3KB 80.0KB +2.7KB
savedObjectsManagement 70.0KB 71.9KB +1.8KB
savedObjectsTagging - 44.1KB +44.1KB
savedObjectsTaggingOss - 8.4KB +8.4KB
visualizations 203.8KB 205.3KB +1.5KB
visualize 40.0KB 40.1KB +190.0B
total +59.6KB

Saved Objects .kibana field count

id before after diff
tag - 4 +4

History

To update your PR or re-run it, just comment with:
@elasticmachine merge upstream

@pgayvallet pgayvallet merged commit d4b2a51 into elastic:master Nov 3, 2020
pgayvallet added a commit to pgayvallet/kibana that referenced this pull request Nov 3, 2020
* create xpack plugin skeleton, start to implement management section

* add tag creation modal

* first implementation of the tags table

* use InMemoryTable

* add edit modal and delete action

* update plugin list

* add tag list, fix types

* add capabilities check on client-side

* add tag combo box component

* add missing i18n keys

* fix privilege FTR tests

* add base structure for FTR tests

* fix feature ftr test

* use string literals for i18n

* create savedObjectsTaggingOss plugin, move API types to oss plugin, start to wire to SO management page.

* update plugin list

* fix types

* allow to use `_find` with multiple references

* add FTR test for _find API on references fields

* add _find integration tests

* update generated doc

* start to implement tag filtering on SO management section

* update generated docs

* wire tagging API to dashboard listing page

* fix i18n namespace

* fix type & tests

* update dashboard listing snapshots

* adapt FTR listingTable service to search for parsable queries

* wite tagging API to visualize listing

* update tagging plugin limits

* add server-side and client-side validation for tag create/edit

* rename title field to name

* fix types

* fix types bis

* add removeReferencesTo API to SOR/SOC

* update generated doc

* add server-side unit test for `savedObjectsTagging` plugin

* move tagging API types to its own file

* add savedObjectsTaggingOss mock

* add tags_cache tests

* add tests for client-side tag client

* extract uiApi to distinct files

* various API improvements

* add more tests

* add link between tag and so management sections + add connection counts

* add base functional test suite for tagging

* add more FTR tests

* improve feature control func test

* update codeowners

* update generated doc

* fix access to proxy modal

* adapt SO save modal to allow to add tag field

* add SO decorator registry and tag implementation

* add unit tests for SO tag decorator

* add functional tests for visualize integration

* add tag SO read permission for vis/dash feature

* add RBAC api integ tests

* add API integration tests

* add test for getTagConnectionsUrl

* add SOM test suite

* add dashboard integration suite

* remove test line

* add missing unit tests

* improve API types doc

* fix create modal save button label

* remove console.log

* improve doc

* self review

* add refresh interval for tag cache

* improve page object doc

* minor cleanup

* address review comments

* small layout fixes

* add initial focus

* use lazy accessor for tag request handler context

* adapt SOM export and export route to handle references

* remove icon from feature config due to master changes

* fix SO table tests

* update generated docs

* sort tags by name in filter dropdown and listing component

* wire SO tagging to dashboard save modal

* fix types

* - add 'create tag' action in tag selector
- add notifications on update/create/delete from management
- delete modal wording

* add description max length validation

* remove real-time validation

* fix i18n bundle id

* update expected size of savedObjectsTagging plugin

* use own useIfMounted

* update limit again, contract components cannot be lazy loaded atm.

* math is hard

* remove single usage of lodash for bundle size

* add async imports for create/edit modal

* add FTR test for 'create tag' action from tag selector

* allow 'create new' option to prepopulate name field

* extract savedObjectToTag

* add advancedSettings read user for security api_integ suite

* add audit login for security client wrapper

* use import type when possible

* wire SO tagging to lens visualization

* fix lens jest test

* Fix `create tag` option being selected when closing the selector dropdown

* add sorting to tag column from getTableColumnDef

* address some of restrry comments

* rename tag selector's setSelected option to onTagsSelected

* fix audit logging even type for saved_object_remove_references

* update plugin size limit to current size

* adapt maxlength validation wording

* remove selection column until we have batch action menu

* remove connections link when user lack read privilege to savedObjectManagement

* forbid registering multiple SO decorators with the same priority

* add so decorator test

* extract getTagFindReferences and create API mock

* update audit-logging ascidoc

* doc nit

* throw conflict error if update returns any failure

* use refresh=true as default

* wording nits

* export: rename `references` to `hasReference`

* update generated doc

* set description max length to 100

* do not initialize tag cache on anonymous pages

* split fetchObjectsToExport into two distinct functions

* change tag client `delete` call order

* tsdoc nits

* more nits

* add README for oss plugin

* add oss plugin start tests

* SavedObject.find: rename `references` to `hasReference`

* change section description label

* remove url prefix constants

* last nits and comments

* update generated doc
# Conflicts:
#	.github/CODEOWNERS
#	packages/kbn-optimizer/limits.yml
#	x-pack/scripts/functional_tests.js
pgayvallet added a commit that referenced this pull request Nov 3, 2020
* SavedObjects tagging MVP (#79096)

* create xpack plugin skeleton, start to implement management section

* add tag creation modal

* first implementation of the tags table

* use InMemoryTable

* add edit modal and delete action

* update plugin list

* add tag list, fix types

* add capabilities check on client-side

* add tag combo box component

* add missing i18n keys

* fix privilege FTR tests

* add base structure for FTR tests

* fix feature ftr test

* use string literals for i18n

* create savedObjectsTaggingOss plugin, move API types to oss plugin, start to wire to SO management page.

* update plugin list

* fix types

* allow to use `_find` with multiple references

* add FTR test for _find API on references fields

* add _find integration tests

* update generated doc

* start to implement tag filtering on SO management section

* update generated docs

* wire tagging API to dashboard listing page

* fix i18n namespace

* fix type & tests

* update dashboard listing snapshots

* adapt FTR listingTable service to search for parsable queries

* wite tagging API to visualize listing

* update tagging plugin limits

* add server-side and client-side validation for tag create/edit

* rename title field to name

* fix types

* fix types bis

* add removeReferencesTo API to SOR/SOC

* update generated doc

* add server-side unit test for `savedObjectsTagging` plugin

* move tagging API types to its own file

* add savedObjectsTaggingOss mock

* add tags_cache tests

* add tests for client-side tag client

* extract uiApi to distinct files

* various API improvements

* add more tests

* add link between tag and so management sections + add connection counts

* add base functional test suite for tagging

* add more FTR tests

* improve feature control func test

* update codeowners

* update generated doc

* fix access to proxy modal

* adapt SO save modal to allow to add tag field

* add SO decorator registry and tag implementation

* add unit tests for SO tag decorator

* add functional tests for visualize integration

* add tag SO read permission for vis/dash feature

* add RBAC api integ tests

* add API integration tests

* add test for getTagConnectionsUrl

* add SOM test suite

* add dashboard integration suite

* remove test line

* add missing unit tests

* improve API types doc

* fix create modal save button label

* remove console.log

* improve doc

* self review

* add refresh interval for tag cache

* improve page object doc

* minor cleanup

* address review comments

* small layout fixes

* add initial focus

* use lazy accessor for tag request handler context

* adapt SOM export and export route to handle references

* remove icon from feature config due to master changes

* fix SO table tests

* update generated docs

* sort tags by name in filter dropdown and listing component

* wire SO tagging to dashboard save modal

* fix types

* - add 'create tag' action in tag selector
- add notifications on update/create/delete from management
- delete modal wording

* add description max length validation

* remove real-time validation

* fix i18n bundle id

* update expected size of savedObjectsTagging plugin

* use own useIfMounted

* update limit again, contract components cannot be lazy loaded atm.

* math is hard

* remove single usage of lodash for bundle size

* add async imports for create/edit modal

* add FTR test for 'create tag' action from tag selector

* allow 'create new' option to prepopulate name field

* extract savedObjectToTag

* add advancedSettings read user for security api_integ suite

* add audit login for security client wrapper

* use import type when possible

* wire SO tagging to lens visualization

* fix lens jest test

* Fix `create tag` option being selected when closing the selector dropdown

* add sorting to tag column from getTableColumnDef

* address some of restrry comments

* rename tag selector's setSelected option to onTagsSelected

* fix audit logging even type for saved_object_remove_references

* update plugin size limit to current size

* adapt maxlength validation wording

* remove selection column until we have batch action menu

* remove connections link when user lack read privilege to savedObjectManagement

* forbid registering multiple SO decorators with the same priority

* add so decorator test

* extract getTagFindReferences and create API mock

* update audit-logging ascidoc

* doc nit

* throw conflict error if update returns any failure

* use refresh=true as default

* wording nits

* export: rename `references` to `hasReference`

* update generated doc

* set description max length to 100

* do not initialize tag cache on anonymous pages

* split fetchObjectsToExport into two distinct functions

* change tag client `delete` call order

* tsdoc nits

* more nits

* add README for oss plugin

* add oss plugin start tests

* SavedObject.find: rename `references` to `hasReference`

* change section description label

* remove url prefix constants

* last nits and comments

* update generated doc
# Conflicts:
#	.github/CODEOWNERS
#	packages/kbn-optimizer/limits.yml
#	x-pack/scripts/functional_tests.js

* fix FTR mapping files for 7.x
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Feature:Saved Object Tagging Saved Objects Tagging feature Team:Core Core services & architecture: plugins, logging, config, saved objects, http, ES client, i18n, etc v7.11.0
Projects
None yet
Development

Successfully merging this pull request may close these issues.